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_value_for(field) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sample_filter/params_set.rb', line 29

def default_value_for(field)
  default_value = options[field.to_sym][:default_value]
  return if default_value.nil?

  case type_of(field)
  when :date
    default_value.deep_symbolize_keys
  when :boolean
    if [true, 'true', 't'].include?(default_value)
      't'
    elsif [false, 'false', 'f'].include?(default_value)
      'f'
    end
  else
    default_value.to_s
  end
end

#default_valuesObject



61
62
63
# File 'lib/sample_filter/params_set.rb', line 61

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

#hidden_input?(field) ⇒ Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/sample_filter/params_set.rb', line 74

def hidden_input?(field)
  !!options[field.to_sym][:hidden_input]
end

#permit_params(params) ⇒ Object



55
56
57
58
59
# File 'lib/sample_filter/params_set.rb', line 55

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

#sorting_keyObject



70
71
72
# File 'lib/sample_filter/params_set.rb', line 70

def sorting_key
  options.select{|_key, hash| hash[:type] == :sorting }&.first&.first
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



65
66
67
68
# File 'lib/sample_filter/params_set.rb', line 65

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

#update_value(field, values) ⇒ Object

Raises:

  • (ArgumentError)


47
48
49
50
51
52
53
# File 'lib/sample_filter/params_set.rb', line 47

def update_value(field, values)
  field = field.to_sym
  raise(ArgumentError, "#{field} not found error") unless fields.include?(field)
  raise(ArgumentError, "#{field} values error") if invalid_values?(field, values)

  options[field][:values] = values
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