Class: Objective::Filters::HashFilter
Instance Attribute Summary
#key, #sub_filters
Instance Method Summary
collapse
#default, #default?, #dup, #feed_empty, #feed_invalid, #feed_nil, #feed_none, #feed_result, filter_name, #handle_errors, inherited, #initialize, #options, #sub_filters_hash, #type_specific_options_hash, #validate
Instance Method Details
#coerce(raw) ⇒ Object
33
34
35
|
# File 'lib/objective/filters/hash_filter.rb', line 33
def coerce(raw)
raw.try(:with_indifferent_access)
end
|
#coerce_error(coerced) ⇒ Object
37
38
39
|
# File 'lib/objective/filters/hash_filter.rb', line 37
def coerce_error(coerced)
return :hash unless coerced.is_a?(Hash)
end
|
#feed(raw) ⇒ Object
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/objective/filters/hash_filter.rb', line 5
def feed(raw)
result = super(raw)
return result if result == Objective::DISCARD || result.errors || result.inputs.nil?
errors = Objective::Errors::ErrorHash.new
inputs = HashWithIndifferentAccess.new
data = result.coerced
sub_filters_hash.each_pair do |key, key_filter|
datum = data.key?(key) ? data[key] : Objective::NONE
key_filter_result = key_filter.feed(datum)
next if key_filter_result == Objective::DISCARD
sub_data = key_filter_result.inputs
sub_error = key_filter_result.errors
if sub_error.nil?
inputs[key] = sub_data
else
errors[key] = key_filter.handle_errors(sub_error)
end
end
result.inputs = inputs
result.errors = errors.present? ? errors : nil
result
end
|