Class: SampleFilter::ParamsSet

Inherits:
Object
  • Object
show all
Defined in:
lib/sample_filter/params_set.rb

Constant Summary collapse

FILTER_TYPES =
[:string, :number, :date, :boolean, :list, :sorting]

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ ParamsSet

Returns a new instance of ParamsSet.



7
8
9
10
11
12
# File 'lib/sample_filter/params_set.rb', line 7

def initialize(options)
  @options = options.deep_symbolize_keys
  @fields = @options.keys

  define_and_assign_attr_accessors
end

Instance Attribute Details

#fieldsObject (readonly)

Returns the value of attribute fields.



5
6
7
# File 'lib/sample_filter/params_set.rb', line 5

def fields
  @fields
end

#optionsObject (readonly)

Returns the value of attribute options.



5
6
7
# File 'lib/sample_filter/params_set.rb', line 5

def options
  @options
end

Instance Method Details

#default_valuesObject



35
36
37
# File 'lib/sample_filter/params_set.rb', line 35

def default_values
  Hash[fields.map { |field| [field, default_value_for(field)] }].compact
end

#permit_params(params) ⇒ Object



29
30
31
32
33
# File 'lib/sample_filter/params_set.rb', line 29

def permit_params(params)
  return {} unless params.present?
  _fields = fields.map{ |f| type_of(f).eql?(:date) ? Hash[f, [:from, :to]] : f }
  params.permit(_fields).to_hash.deep_symbolize_keys
end

#type_of(field) ⇒ Object



14
15
16
# File 'lib/sample_filter/params_set.rb', line 14

def type_of(field)
  options[field.to_sym][:type].try(:to_sym)
end

#update_attributes(params) ⇒ Object



39
40
41
42
# File 'lib/sample_filter/params_set.rb', line 39

def update_attributes(params)
  _params = permit_params(params)
  fields.each { |field| instance_variable_set("@#{field}", _params[field] || default_value_for(field)) }
end

#values_for(field) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/sample_filter/params_set.rb', line 18

def values_for(field)
  values = options[field.to_sym][:values]
  return unless values.present?

  if values.is_a?(Hash)
    values.stringify_keys
  elsif values.is_a?(Array)
    values.map(&:to_s)
  end
end