module Discerner::Methods::Models::Parameter

Public Class Methods

included(base) click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 5
def self.included(base)
  base.send :include, SoftDelete

  # Associations
  base.send :belongs_to,  :parameter_category,          inverse_of: :parameters
  base.send :belongs_to,  :parameter_type,              inverse_of: :parameters
  base.send :has_many,    :parameter_values,            inverse_of: :parameter, dependent: :destroy
  base.send :has_many,    :search_parameters,           inverse_of: :parameter, dependent: :destroy
  base.send :has_many,    :export_parameters,           inverse_of: :parameter, dependent: :destroy
  base.send :has_many,    :parameter_value_categories,  inverse_of: :parameter, dependent: :destroy

  #Validations
  base.send :validates, :name, :unique_identifier, :parameter_category, presence: { message: "for parameter can't be blank" }
  base.send :validate,  :validate_unique_identifier
  base.send :validate,  :validate_search_attributes
  base.send :validate,  :validate_export_attributes

  # Scopes
  base.send(:scope, :searchable, -> {base.not_deleted.where('search_model is not null and search_method is not null and hidden_in_search = ?', false)})
  base.send(:scope, :exportable, -> {base.not_deleted.where('export_model is not null and export_method is not null and hidden_in_export = ?', false)})

  # Hooks
  base.send :after_commit, :cascade_delete_parameter_values, on: :update, if: Proc.new { |record| record.previous_changes.include?('deleted_at') }
end
new(*args) click to toggle source

Instance Methods

Calls superclass method
# File lib/discerner/methods/models/parameter.rb, line 31
def initialize(*args)
  super(*args)
end

Public Instance Methods

css_class_name() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 43
def css_class_name
  css_class_array = [parameter_type.name, parameter_category.css_class_name, parameter_category.dictionary.css_class_name]
  css_class_array << 'exclusive' if exclusive
  css_class_array.join(' ')
end
display_name() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 39
def display_name
  "#{parameter_category.name} - #{name}"
end
used_in_search?() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 35
def used_in_search?
  search_parameters.any? || export_parameters.any?
end

Private Instance Methods

cascade_delete_parameter_values() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 78
def cascade_delete_parameter_values
  return unless deleted?
  parameter_values.each do |pv|
    pv.deleted_at = Time.now
    pv.save
  end
end
validate_export_attributes() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 72
def validate_export_attributes
  unless self.export_model.blank? && self.export_method.blank?
    errors.add(:base,"Exportable parameter should have export model and search method defined.") if self.export_model.blank? || self.export_method.blank?
  end
end
validate_search_attributes() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 66
def validate_search_attributes
  unless self.search_model.blank? && self.search_method.blank?
    errors.add(:base,"Searchable parameter should have search model, search method and parameter_type defined.") if self.search_model.blank? || self.search_method.blank? || self.parameter_type.blank?
  end
end
validate_search_parameters() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 50
def validate_search_parameters
  errors.add(:base,"Search should have at least one search criteria.") if
    self.search_parameters.size < 1 || self.search_parameters.all?{|search_parameter| search_parameter.marked_for_destruction? }
end
validate_unique_identifier() click to toggle source
# File lib/discerner/methods/models/parameter.rb, line 55
def validate_unique_identifier
  puts 'moomin says hi'
  puts "#{self.unique_identifier}"
  return if self.parameter_category.blank? #|| self.parameter_category.dictionary.blank?
  existing_parameters =  Discerner::Parameter.
    joins({ parameter_category: :dictionary }).
    where('discerner_dictionaries.id = ? and discerner_parameters.unique_identifier = ?', self.parameter_category.dictionary.id, self.unique_identifier)
  existing_parameters = existing_parameters.where('discerner_parameters.id != ?', self.id) unless self.id.blank?
  errors.add(:base,"Unique identifier has to be unique within dictionary.") if existing_parameters.any?
end