Sha256: 0f55e24a7f3994facb3efc0e62383cb1c15229fd1f0cc635bccd374a1dfb9990

Contents?: true

Size: 990 Bytes

Versions: 6

Compression:

Stored size: 990 Bytes

Contents

# frozen_string_literal: true

require 'securerandom'

module DynamoidAdvancedWhere
  module Nodes
    class ExistsNode < BaseNode
      include Concerns::Negatable
      include Concerns::SupportsLogicalAnd
      include Concerns::SupportsLogicalOr

      attr_accessor :field_node, :prefix

      def initialize(field_node:)
        self.field_node = field_node
        self.prefix = SecureRandom.hex
        freeze
      end

      def to_expression
        "NOT(
          attribute_not_exists(#{field_node.to_expression})
          or #{field_node.to_expression} = :#{prefix}
        )"
      end

      def expression_attribute_names
        field_node.expression_attribute_names
      end

      def expression_attribute_values
        {
          ":#{prefix}" => nil,
        }
      end
    end

    module Concerns
      module SupportsExistance
        def exists?
          ExistsNode.new(field_node: self)
        end
        alias present? exists?
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
dynamoid_advanced_where-1.8.0 lib/dynamoid_advanced_where/nodes/exists_node.rb
dynamoid_advanced_where-1.7.1 lib/dynamoid_advanced_where/nodes/exists_node.rb
dynamoid_advanced_where-1.7.0 lib/dynamoid_advanced_where/nodes/exists_node.rb
dynamoid_advanced_where-1.6.0 lib/dynamoid_advanced_where/nodes/exists_node.rb
dynamoid_advanced_where-1.5.1 lib/dynamoid_advanced_where/nodes/exists_node.rb
dynamoid_advanced_where-1.5.0 lib/dynamoid_advanced_where/nodes/exists_node.rb