Class: SampleFilter::ParamsSet
- Inherits:
-
Object
- Object
- SampleFilter::ParamsSet
- Defined in:
- lib/sample_filter/params_set.rb
Constant Summary collapse
- FILTER_TYPES =
[:string, :number, :date, :boolean, :list, :sorting]
Instance Attribute Summary collapse
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
- #default_value_for(field) ⇒ Object
- #default_values ⇒ Object
- #hidden_input?(field) ⇒ Boolean
-
#initialize(options) ⇒ ParamsSet
constructor
A new instance of ParamsSet.
- #permit_params(params) ⇒ Object
- #sorting_key ⇒ Object
- #type_of(field) ⇒ Object
- #update_attributes(params) ⇒ Object
- #update_value(field, values) ⇒ Object
- #values_for(field) ⇒ Object
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 = .deep_symbolize_keys @fields = @options.keys define_and_assign_attr_accessors end |
Instance Attribute Details
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
5 6 7 |
# File 'lib/sample_filter/params_set.rb', line 5 def fields @fields end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
5 6 7 |
# File 'lib/sample_filter/params_set.rb', line 5 def @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 = [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_values ⇒ Object
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
74 75 76 |
# File 'lib/sample_filter/params_set.rb', line 74 def hidden_input?(field) !![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_key ⇒ Object
70 71 72 |
# File 'lib/sample_filter/params_set.rb', line 70 def sorting_key .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) [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
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) [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 = [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 |