Sha256: 0ef9f6c8f02c6db6cbfbc9f92200df609c713f1d3c1fa389b1adc1baaedfeebe

Contents?: true

Size: 677 Bytes

Versions: 2

Compression:

Stored size: 677 Bytes

Contents

module RShade
  module Filter
    class FilterBuilder
      def self.build(arr)
        new.traverse(arr)
      end

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

      def traverse(arr)
        op, arity = map[arr[0]]
        arg1 = arr[1]
        arg2 = nil
        arg2 = arr[2] if arity == 2
        arg1 = traverse(arg1) if arg1.is_a?(Array)
        arg2 = traverse(arg2) if arg2.is_a?(Array)

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rshade-0.1.9.1 lib/rshade/filter/filter_builder.rb
rshade-0.1.9 lib/rshade/filter/filter_builder.rb