Class: Paramoid::Object
- Inherits:
-
Object
- Object
- Paramoid::Object
- Defined in:
- lib/paramoid/object.rb
Overview
rubocop:disable Metrics/ClassLength
Instance Attribute Summary collapse
-
#alias_name ⇒ Symbol
readonly
The parameter alias.
-
#default ⇒ Object
readonly
The parameter default value.
-
#name ⇒ Symbol
readonly
The parameter name.
-
#nested ⇒ Object
readonly
The parameter nested.
-
#required ⇒ TrueClass, FalseClass
readonly
Required.
-
#transformer ⇒ Lambda, NilClass
readonly
The transformer.
Instance Method Summary collapse
- #<<(value) ⇒ Object
-
#apply_defaults!(params) ⇒ Hash
The params with the default values.
- #apply_nested_defaults!(params) ⇒ Object
- #apply_nested_param_default_when_available!(param, key) ⇒ Object
- #apply_scalar_defaults!(params) ⇒ Object
- #ensure_required_nested_params!(params, current_path) ⇒ Object
- #ensure_required_params!(params, path: []) ⇒ Object
-
#initialize(name, alias_name, nested: nil, nesting_type: nil, transformer: nil, default: nil, required: false) ⇒ Object
constructor
A new instance of Object.
- #nested? ⇒ Boolean
- #output_key ⇒ Object
- #to_defaults ⇒ Object
- #to_params ⇒ Object
-
#to_required_params ⇒ Hash
The required params.
- #transform_params!(params) ⇒ Object
Constructor Details
#initialize(name, alias_name, nested: nil, nesting_type: nil, transformer: nil, default: nil, required: false) ⇒ Object
Returns a new instance of Object.
23 24 25 26 27 28 29 30 31 |
# File 'lib/paramoid/object.rb', line 23 def initialize(name, alias_name, nested: nil, nesting_type: nil, transformer: nil, default: nil, required: false) @name = name @alias = alias_name @nested = nested @default = default @transformer = transformer @required = required @nesting_type = nesting_type end |
Instance Attribute Details
#alias_name ⇒ Symbol (readonly)
Returns the parameter alias.
7 8 9 |
# File 'lib/paramoid/object.rb', line 7 def alias_name @alias_name end |
#default ⇒ Object (readonly)
Returns the parameter default value.
11 12 13 |
# File 'lib/paramoid/object.rb', line 11 def default @default end |
#name ⇒ Symbol (readonly)
Returns the parameter name.
5 6 7 |
# File 'lib/paramoid/object.rb', line 5 def name @name end |
#nested ⇒ Object (readonly)
Returns the parameter nested.
9 10 11 |
# File 'lib/paramoid/object.rb', line 9 def nested @nested end |
#required ⇒ TrueClass, FalseClass (readonly)
Returns required.
15 16 17 |
# File 'lib/paramoid/object.rb', line 15 def required @required end |
#transformer ⇒ Lambda, NilClass (readonly)
Returns the transformer.
13 14 15 |
# File 'lib/paramoid/object.rb', line 13 def transformer @transformer end |
Instance Method Details
#<<(value) ⇒ Object
151 152 153 |
# File 'lib/paramoid/object.rb', line 151 def <<(value) @nested << value end |
#apply_defaults!(params) ⇒ Hash
Returns the params with the default values.
95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/paramoid/object.rb', line 95 def apply_defaults!(params) return apply_nested_defaults!(params) if nested? return params unless @default return params if @nesting_type == :list && !params params ||= {} apply_scalar_defaults!(params) params end |
#apply_nested_defaults!(params) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/paramoid/object.rb', line 117 def apply_nested_defaults!(params) return params unless params params ||= @nesting_type == :list ? [] : {} return apply_nested_param_default_when_available!(params, output_key) unless params.is_a?(Array) params.map! do |param| apply_nested_param_default_when_available!(param, output_key) end params end |
#apply_nested_param_default_when_available!(param, key) ⇒ Object
130 131 132 133 134 135 136 |
# File 'lib/paramoid/object.rb', line 130 def apply_nested_param_default_when_available!(param, key) return param unless param[key] result = @nested.apply_defaults!(param[key]) param[key] = result if result param end |
#apply_scalar_defaults!(params) ⇒ Object
108 109 110 111 112 113 114 115 |
# File 'lib/paramoid/object.rb', line 108 def apply_scalar_defaults!(params) if params.is_a?(Array) params.map! { |param| apply_scalar_defaults!(param) } else params[output_key] ||= @default end params end |
#ensure_required_nested_params!(params, current_path) ⇒ Object
85 86 87 88 89 90 91 |
# File 'lib/paramoid/object.rb', line 85 def ensure_required_nested_params!(params, current_path) return params if current_path.size > 1 && params.nil? @nested.ensure_required_params!(params ? params[output_key] : nil, path: current_path) params end |
#ensure_required_params!(params, path: []) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/paramoid/object.rb', line 68 def ensure_required_params!(params, path: []) if params.is_a?(Array) params.flatten.each do |param| ensure_required_params!(param, path: path) end return params end current_path = [*path, @name] _raise_on_missing_parameter!(params, output_key, current_path) if @required return params unless nested? ensure_required_nested_params!(params, current_path) end |
#nested? ⇒ Boolean
155 156 157 |
# File 'lib/paramoid/object.rb', line 155 def nested? !@nested.nil? end |
#output_key ⇒ Object
147 148 149 |
# File 'lib/paramoid/object.rb', line 147 def output_key @output_key ||= (@alias || @name).to_s end |
#to_defaults ⇒ Object
138 139 140 141 142 143 144 145 |
# File 'lib/paramoid/object.rb', line 138 def to_defaults if nested? nested_defaults = @nested.to_defaults (nested_defaults.present? ? { output_key => nested_defaults } : {}).with_indifferent_access else (@default ? { output_key => @default } : {}).with_indifferent_access end end |
#to_params ⇒ Object
48 49 50 51 52 53 54 |
# File 'lib/paramoid/object.rb', line 48 def to_params if nested? { @name.to_sym => @nested.to_params } else @name end end |
#to_required_params ⇒ Hash
Returns the required params.
57 58 59 60 61 62 63 |
# File 'lib/paramoid/object.rb', line 57 def to_required_params if nested? @nested.to_required_params else @required ? [@name] : [] end end |
#transform_params!(params) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/paramoid/object.rb', line 34 def transform_params!(params) if params.is_a?(Array) params.each { |param| transform_params!(param) } return end return unless params.key?(@name) params[@name] = @transformer.call(params[@name]) if @transformer.respond_to?(:call) @nested.transform_params!(params[@name]) if nested? params[@alias] = params.delete(@name) unless @alias == @name end |