module Discerner::Methods::Models::SearchParameterValue
Public Class Methods
included(base)
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 5 def self.included(base) base.send :include, SoftDelete base.send :include, Warning # Associations base.send :belongs_to, :search_parameter, inverse_of: :search_parameter_values base.send :belongs_to, :parameter_value, inverse_of: :search_parameter_values base.send :belongs_to, :operator, inverse_of: :search_parameter_values # Scopes base.send(:scope, :chosen, -> { base.where(chosen: true) }) base.send(:scope, :ordered_by_display_order, -> { base.order('discerner_search_parameter_values.display_order ASC') }) #Validations base.send :validate, :validate_operator base.send :validates, :search_parameter, presence: true # Hooks base.send :before_validation, :cleanup_parameter_values base.send :after_commit, :destroy_if_deleted_parameter_value, on: :update base.send :after_commit, :mark_search_updated end
new(*args)
click to toggle source
Instance Methods
Calls superclass method
# File lib/discerner/methods/models/search_parameter_value.rb, line 29 def initialize(*args) super(*args) end
Public Instance Methods
disabled?()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 64 def disabled? return false unless persisted? if parameter_value.blank? && value.blank? && operator && operator.operator_type != 'presence' warnings.add(:base, "Parameter value has to be selected") return true end if chosen? && parameter_value.blank? || parameter_value && parameter_value.deleted? warnings.add(:base, "Parameter value has been deleted and has to be removed from the search") return true end if search_parameter && search_parameter.parameter && search_parameter.parameter.parameter_type.name == 'date' && !validate_dates_format warnings.add(:base, "Provided date is not valid") return true end if parameter_value.blank? && ['combobox', 'exclusive_list'].include?(search_parameter.parameter.parameter_type.name) warnings.add(:base, "Parameter value has to be selected") return true end warnings.clear return false end
formatted_values()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 52 def formatted_values all_values = [value, additional_value].compact case search_parameter.parameter.parameter_type.name when 'date' all_values.map{|v| v.to_date} when 'numeric' all_values.map{|v| v.to_f} else all_values end end
to_sql()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 33 def to_sql sql = {} raise "Search operator has to be defined in order to run 'to_sql' method on search_parameter_value" if operator.blank? case operator.operator_type when 'comparison' sql[:predicates] = "#{search_parameter.parameter.search_method} #{operator.symbol} ?" sql[:values] = formatted_values.first when 'range' sql[:predicates] = "#{search_parameter.parameter.search_method} #{operator.symbol} ? and ?" sql[:values] = formatted_values when 'text_comparison' sql[:predicates] = "#{search_parameter.parameter.search_method} #{operator.symbol} ?" sql[:values] = "%#{formatted_values.first}%" when 'presence' sql[:predicates] = "#{search_parameter.parameter.search_method} #{operator.symbol}" end sql end
validate_dates_format()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 86 def validate_dates_format validate_date(value) && validate_date(additional_value) end
Private Instance Methods
cleanup_parameter_values()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 110 def cleanup_parameter_values if operator && operator.operator_type == 'presence' self.value = nil self.additional_value = nil self.parameter_value = nil end end
destroy_if_deleted_parameter_value()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 91 def destroy_if_deleted_parameter_value return if parameter_value.blank? || search_parameter.blank? || search_parameter.parameter.blank? || search_parameter.parameter.parameter_type.blank? #return unless ['list', 'combobox'].include?(search_parameter.parameter.parameter_type.name) destroy if parameter_value.deleted? && search_parameter.parameter.parameter_type.name == 'list' && !chosen? end
mark_search_updated()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 126 def mark_search_updated if (self.destroyed? || !previous_changes.empty?) && search_parameter && search_parameter.search search_parameter.search.updated_at = Time.now search_parameter.search.save! end end
validate_date(date)
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 97 def validate_date(date) begin unless date.blank? parsed_date = date.to_date #http://www.karaszi.com/sqlserver/info_datetime.asp#Why1753 return false if parsed_date.year < 1753 end rescue => e return false end return true end
validate_operator()
click to toggle source
# File lib/discerner/methods/models/search_parameter_value.rb, line 118 def validate_operator if search_parameter && search_parameter.parameter && search_parameter.parameter.parameter_type && ['list', 'combobox', 'exclusive_list'].include?(search_parameter.parameter.parameter_type.name) self.operator = nil else errors.add(:base, "Operator has to be selected for parameter values that do not belong to list or combobox") if operator.blank? end end