Class: Objective::Filters::RootFilter
Instance Attribute Summary
#key, #sub_filters
Instance Method Summary
collapse
#coerce_error, #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
42
43
44
45
46
47
|
# File 'lib/objective/filters/root_filter.rb', line 42
def coerce(raw)
raw.each_with_object(OpenStruct.new) do |datum, result|
raise_argument_error unless datum.respond_to?(:each_pair)
datum.each_pair { |key, value| result[key] = value }
end
end
|
#feed(*raw) ⇒ Object
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/objective/filters/root_filter.rb', line 13
def feed(*raw)
result = OpenStruct.new
result.raw = raw
result.coerced = coerce(raw)
inputs = OpenStruct.new
errors = Objective::Errors::ErrorHash.new
data = result.coerced
sub_filters_hash.each_pair do |key, key_filter|
datum = data.to_h.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
|
#filter(&block) ⇒ Object
5
6
7
|
# File 'lib/objective/filters/root_filter.rb', line 5
def filter(&block)
instance_eval(&block)
end
|
#keys ⇒ Object
9
10
11
|
# File 'lib/objective/filters/root_filter.rb', line 9
def keys
sub_filters.map(&:key)
end
|
#raise_argument_error ⇒ Object
49
50
51
|
# File 'lib/objective/filters/root_filter.rb', line 49
def raise_argument_error
raise(ArgumentError, 'All Objective arguments must be a Hash or OpenStruct')
end
|