Sha256: 0c073cd40dd101127972d6d5fc69d1356bf30c7403962889884fab2c3f9ebdc7
Contents?: true
Size: 1.75 KB
Versions: 1
Compression:
Stored size: 1.75 KB
Contents
require_relative './nodes' require_relative './query_materializer' require_relative './batched_updater' module DynamoidAdvancedWhere class QueryBuilder attr_accessor :klass, :root_node, :start_hash, :record_limit delegate :all, :each_page, :each, to: :query_materializer def initialize(klass:, record_limit: nil, start_hash: nil, root_node: nil, &blk) self.klass = klass self.root_node = root_node || Nodes::RootNode.new(klass: klass, &blk) self.start_hash = start_hash self.record_limit = record_limit freeze end def query_materializer QueryMaterializer.new(query_builder: self) end def batch_update BatchedUpdater.new(query_builder: self) end def upsert(*args) update_fields = args.extract_options! batch_update.set_values(update_fields).apply(*args) end def where(other_builder = nil, &blk) raise 'cannot use a block and an argument' if other_builder && blk other_builder = self.class.new(klass: klass, &blk) if blk raise 'passed argument must be a query builder' unless other_builder.is_a?(self.class) local_root_node = root_node self.class.new(klass: klass) do Nodes::AndNode.new( other_builder.root_node.child_node, local_root_node.child_node ) end end alias and where def limit(value) dup_with_changes(record_limit: value) end def start(key_hash) return self if key_hash.nil? || key_hash.empty? dup_with_changes(start_hash: key_hash) end alias to_a all private def dup_with_changes(**changes) self.class.new(**{ klass: klass, start_hash: start_hash, root_node: root_node }.merge(changes)) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
dynamoid_advanced_where-1.3.0 | lib/dynamoid_advanced_where/query_builder.rb |