Class: DynamoidAdvancedWhere::QueryMaterializer

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/dynamoid_advanced_where/query_materializer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query_builder:) ⇒ QueryMaterializer

Returns a new instance of QueryMaterializer.



15
16
17
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 15

def initialize(query_builder:)
  self.query_builder = query_builder
end

Instance Attribute Details

#query_builderObject

Returns the value of attribute query_builder.



6
7
8
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 6

def query_builder
  @query_builder
end

Instance Method Details

#allObject



19
20
21
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 19

def all
  each.to_a
end

#each(&blk) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 23

def each(&blk)
  return enum_for(:each) unless blk

  if must_scan?
    each_via_scan(&blk)
  else
    each_via_query(&blk)
  end
end

#each_via_queryObject



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 33

def each_via_query
  query = {
    table_name: table_name,
  }.merge(filter_builder.to_query_filter)

  results = client.query(query)

  if results.items
    results.items.each do |item|
      yield klass.from_database(item.symbolize_keys)
    end
  end
end

#each_via_scanObject



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 47

def each_via_scan
  query = {
    table_name: table_name
  }.merge(filter_builder.to_scan_filter)

  results = client.scan(query)

  if results.items
    results.items.each do |item|
      yield klass.from_database(item.symbolize_keys)
    end
  end
end

#filter_builderObject



61
62
63
64
65
66
# File 'lib/dynamoid_advanced_where/query_materializer.rb', line 61

def filter_builder
  @filter_builder ||= FilterBuilder.new(
    root_node: query_builder.root_node,
    klass: klass,
  )
end