Sha256: d74357b5f93cb57c88dbb2c5c83ace59bd66db8adaf17ccb1a67ab973936d5bf

Contents?: true

Size: 1.93 KB

Versions: 57

Compression:

Stored size: 1.93 KB

Contents

module ForestAdminDatasourceToolkit
  module Components
    module Query
      module ConditionTree
        module Nodes
          class ConditionTreeBranch < ConditionTree
            attr_reader :aggregator, :conditions

            def initialize(aggregator, conditions)
              @aggregator = aggregator
              @conditions = conditions
              super()
            end

            def to_h
              {
                aggregator: @aggregator,
                conditions: @conditions.map(&:to_h)
              }
            end

            def inverse
              aggregator = @aggregator == 'Or' ? 'And' : 'Or'
              ConditionTreeBranch.new(
                aggregator,
                @conditions.map(&:inverse)
              )
            end

            def replace_leafs(&handler)
              ConditionTreeBranch.new(
                @aggregator,
                @conditions.map { |condition| condition.replace_leafs(&handler) }
              )
            end

            def match(record, collection, timezone)
              if @aggregator == 'And'
                every_leaf { |condition| condition.match(record, collection, timezone) }
              else
                some_leaf { |condition| condition.match(record, collection, timezone) }
              end
            end

            def for_each_leaf(&handler)
              @conditions.each { |condition| condition.for_each_leaf(&handler) }
              self
            end

            def every_leaf(&handler)
              @conditions.all? { |condition| condition.every_leaf(&handler) }
            end

            def some_leaf(&handler)
              @conditions.any? { |condition| condition.some_leaf(&handler) }
            end

            def projection
              @conditions.reduce(Projection.new) do |memo, condition|
                memo.union(condition.projection)
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

57 entries across 57 versions & 1 rubygems

Version Path
forest_admin_datasource_toolkit-1.0.0.pre.beta.83 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.82 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.81 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.80 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.79 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.78 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.77 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.76 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.75 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.74 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.73 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.72 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.71 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.70 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.69 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.68 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.67 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.66 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.65 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb
forest_admin_datasource_toolkit-1.0.0.pre.beta.64 lib/forest_admin_datasource_toolkit/components/query/condition_tree/nodes/condition_tree_branch.rb