Class: TreeFilter::Slice
- Inherits:
-
Struct
- Object
- Struct
- TreeFilter::Slice
- Defined in:
- lib/tree_filter.rb
Instance Method Summary collapse
- #filter(value) ⇒ Object
-
#initialize(attrs = {}) ⇒ Slice
constructor
A new instance of Slice.
Constructor Details
#initialize(attrs = {}) ⇒ Slice
Returns a new instance of Slice.
95 96 97 98 |
# File 'lib/tree_filter.rb', line 95 def initialize(attrs = {}) super @attrs = attrs end |
Instance Method Details
#filter(value) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/tree_filter.rb', line 100 def filter(value) # With activesupport this will always be evaluated, because `as_json` is # monkey-patched on to Object. value = value.as_json if value.respond_to?(:as_json) case value when Hash slices = @attrs.dup if @attrs.keys.include?('*') slices.delete("*") extra = value.keys - slices.keys - ['*'] extra.each do |k| slices[k] = nil end end slices.each_with_object({}) do |(attr, slice), ret| slice ||= NullSlice.new ret[attr] = slice.filter(value[attr]) end when Array value.map {|x| filter(x) } when Defer filter(value.call) when Leaf filter(value.right) else value end end |