Module: Archipelago::ParamsDSL
- Included in:
- Action
- Defined in:
- lib/archipelago/params_dsl.rb
Defined Under Namespace
Modules: ClassMethods
Classes: ParamDefinition
Constant Summary
collapse
- MISSING =
Object.new.freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.included(base) ⇒ Object
60
61
62
|
# File 'lib/archipelago/params_dsl.rb', line 60
def self.included(base)
base.extend(ClassMethods)
end
|
Instance Method Details
#coerce_declared_params(raw_params) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
# File 'lib/archipelago/params_dsl.rb', line 64
def coerce_declared_params(raw_params)
coerced = {}
errors = Hash.new { |hash, key| hash[key] = [] }
self.class.param_definitions.each_value do |definition|
raw_value = fetch_param(raw_params, definition.name)
if definition.empty_as_nil && empty_string?(raw_value)
raw_value = nil
end
if blank_value?(raw_value)
if definition.default != MISSING
coerced[definition.name] = definition.default.respond_to?(:call) ? definition.default.call : definition.default
elsif definition.required
errors[definition.name.to_s] << "is required"
end
next
end
begin
coerced_value = coerce_value(raw_value, definition)
validation_error = run_validations(coerced_value, definition)
if validation_error
errors[definition.name.to_s] << validation_error
else
coerced[definition.name] = coerced_value
end
rescue ArgumentError, TypeError, JSON::ParserError
errors[definition.name.to_s] << "is invalid"
end
end
[coerced, errors]
end
|