module Discerner::Methods::Models::ParameterValue
Public Class Methods
included(base)
click to toggle source
# File lib/discerner/methods/models/parameter_value.rb, line 5 def self.included(base) base.send :include, SoftDelete # Associations base.send :belongs_to, :parameter, inverse_of: :parameter_values base.send :has_many, :search_parameter_values, inverse_of: :parameter_value, dependent: :destroy base.send :has_one, :parameter_value_categorization, inverse_of: :parameter_value, dependent: :destroy base.send :has_one, :parameter_value_category, :through=> :parameter_value_categorization # Scopes base.send(:scope, :ordered_by_name, -> { base.order('discerner_parameter_values.name ASC') }) base.send(:scope, :ordered_by_parameter_and_name, -> { base.order('discerner_parameter_values.parameter_id ASC, discerner_parameter_values.name ASC') }) #Validations base.send :validates, :parameter, presence: true base.send :validates, :search_value, length: { maximum: 1000 }, uniqueness: {scope: :parameter_id, message: "for parameter value has already been taken"} base.send :validates, :name, presence: true, length: { maximum: 1000 } base.send :validate, :parameter_category_belongs_to_parameter # Hooks base.send :after_commit, :create_search_parameter_values, on: :create base.send :after_commit, :update_search_parameter_values, on: :update, if: Proc.new { |record| record.previous_changes.include?('deleted_at') } base.send :scope, :categorized, -> {base.joins(:parameter_value_category)} base.send :scope, :uncategorized, -> {base.includes(:parameter_value_category).where(discerner_parameter_value_categories: {name: nil})} end
new(*args)
click to toggle source
Instance Methods
Calls superclass method
# File lib/discerner/methods/models/parameter_value.rb, line 32 def initialize(*args) super(*args) end
Public Instance Methods
display_name()
click to toggle source
# File lib/discerner/methods/models/parameter_value.rb, line 44 def display_name if parameter_value_category "#{parameter_value_category.name} - #{name} " else name end end
used_in_search?()
click to toggle source
# File lib/discerner/methods/models/parameter_value.rb, line 36 def used_in_search? if parameter.parameter_type.name == 'list' search_parameter_values.chosen.any? else search_parameter_values.any? end end
Private Instance Methods
create_search_parameter_values()
click to toggle source
# File lib/discerner/methods/models/parameter_value.rb, line 59 def create_search_parameter_values # create additional search_parameter_values for list search_parameters so they can be dislayed as nested attribures return if parameter.blank? || parameter.parameter_type.blank? if parameter.parameter_type.name == 'list' parameter.search_parameters.each do |sp| if sp.search_parameter_values.where(parameter_value_id: id).blank? last_search_parameter_value = sp.search_parameter_values.ordered_by_display_order.last max_display_order = last_search_parameter_value ? last_search_parameter_value.display_order : -1 sp.search_parameter_values.build(parameter_value_id: id, display_order: max_display_order + 1) sp.save end end end end
parameter_category_belongs_to_parameter()
click to toggle source
# File lib/discerner/methods/models/parameter_value.rb, line 53 def parameter_category_belongs_to_parameter unless parameter_value_category.blank? errors.add(:base,"Parameter category #{parameter_value_category.name} does not belong to parameter #{parameter.name}") unless parameter_value_category.parameter_id == parameter.id end end
update_search_parameter_values()
click to toggle source
# File lib/discerner/methods/models/parameter_value.rb, line 74 def update_search_parameter_values create_search_parameter_values # destroy search_parameter_values that reference this value but are not chosen (list options) return unless deleted? search_parameter_values.each do |spv| spv.destroy if parameter.parameter_type.name == 'list' && !spv.chosen end end