Sha256: 596cd1605089be25aa5fe203674901d1c16135e9a071199c845221ce10e4e4b0

Contents?: true

Size: 1.2 KB

Versions: 4

Compression:

Stored size: 1.2 KB

Contents

class Dynomite::Item::Query::Params
  class Filter < Base
    def initialize(relation, index)
      @relation, @index = relation, index
      @expressions = []
    end

    def build
      build_where
      build_functions
    end
    memoize :build

    def expression
      build
      join_expressions
    end

    def build_where
      with_where_groups do |where_group|
        expression = where_group.build_compare_expression_if do |field|
          @index.nil? || !@index.fields.include?(field)
        end
        @expressions << expression if expression
      end
    end

    # https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.OperatorsAndFunctions.html
    def build_functions
      # Essentially
      #    @expressions += Function::AttributeExists.new(@query).filter_expression
      #    @expressions += Function::AttributeType.new(@query).filter_expression
      #    @expressions += Function::BeginsWith.new(@query).filter_expression
      function_names.each do |function_name|
        function = Function.const_get(function_name.camelize).new(@relation.query)
        filter_expression = function.filter_expression
        @expressions += filter_expression
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dynomite-2.0.3 lib/dynomite/item/query/params/filter.rb
dynomite-2.0.2 lib/dynomite/item/query/params/filter.rb
dynomite-2.0.1 lib/dynomite/item/query/params/filter.rb
dynomite-2.0.0 lib/dynomite/item/query/params/filter.rb