Class: RShade::Filter::FilterBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/rshade/filter/filter_builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.build(arr) ⇒ Object



6
7
8
# File 'lib/rshade/filter/filter_builder.rb', line 6

def self.build(arr)
  new.traverse(arr)
end

Instance Method Details

#mapObject



10
11
12
13
14
15
16
# File 'lib/rshade/filter/filter_builder.rb', line 10

def map
  {
    or: [RShade::Filter::FilterComposition::OR_OP, 2],
    and: [RShade::Filter::FilterComposition::AND_OP, 2],
    unary: [RShade::Filter::FilterComposition::UNARY_OP, 1]
  }
end

#traverse(arr) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/rshade/filter/filter_builder.rb', line 18

def traverse(arr)
  op, arity = map[arr[0]]
  arg1 = arr[1]
  arg2 = nil
  arg2 = arr[2] if arity == 2
  arg1 = if arg1.is_a?(Array)
           traverse(arg1)
         else
           RShade::Filter::FilterComposition.new(arg1)
         end

  arg2 = if arg2.is_a?(Array)
           traverse(arg2)
         else
           RShade::Filter::FilterComposition.new(arg2)
         end

  RShade::Filter::FilterComposition.new(op, arg1, arg2)
end