Module: Discerner::Methods::Models::SearchParameterValue

Included in:
SearchParameterValue
Defined in:
lib/discerner/methods/models/search_parameter_value.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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

Instance Method Details

#disabled?Boolean

Returns:

  • (Boolean)


64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# 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? && search_parameter.parameter.parameter_type.name == 'combobox'
    warnings.add(:base, "Parameter value has to be selected")
    return true
  end
  warnings.clear
  return false
end

#formatted_valuesObject



52
53
54
55
56
57
58
59
60
61
62
# 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

#initialize(*args) ⇒ Object

Instance Methods



29
30
31
# File 'lib/discerner/methods/models/search_parameter_value.rb', line 29

def initialize(*args)
  super(*args)
end

#to_sqlObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 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_formatObject



86
87
88
# File 'lib/discerner/methods/models/search_parameter_value.rb', line 86

def validate_dates_format
  validate_date(value) && validate_date(additional_value)
end