Module: Eventosaurus::QueryBuilder

Defined in:
lib/eventosaurus/query_builder.rb

Instance Method Summary collapse

Instance Method Details

#build_local_secondary_event_class_method(method_name, attr_name) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/eventosaurus/query_builder.rb', line 43

def build_local_secondary_event_class_method(method_name, attr_name)
  singleton_proc = proc do |value, operator = 'EQ'|
    new_query.by_local_secondary(name: attr_name, value: value, operator: operator)
  end

  define_singleton_method(method_name, singleton_proc)
end

#build_local_secondary_methods(secondary_indexes) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/eventosaurus/query_builder.rb', line 34

def build_local_secondary_methods(secondary_indexes)
  secondary_indexes.each_pair do |attr_name, _|
    method_name = generate_method_name(attr_name)

    build_local_secondary_event_class_method(method_name, attr_name)
    build_local_secondary_query_instance_method(method_name, attr_name)
  end
end

#build_local_secondary_query_instance_method(method_name, attr_name) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/eventosaurus/query_builder.rb', line 51

def build_local_secondary_query_instance_method(method_name, attr_name)
  instance_proc = proc do |value, operator = 'EQ'|
    by_local_secondary(name: attr_name, value: value, operator: operator)
  end

  Eventosaurus::Models::Query.send(:define_method, method_name, instance_proc)
end

#build_partition_key_event_class_method(method_name) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/eventosaurus/query_builder.rb', line 18

def build_partition_key_event_class_method(method_name)
  singleton_proc = proc do |value, operator = 'EQ'|
    new_query.by_partition_key(value: value, operator: operator)
  end

  define_singleton_method(method_name, singleton_proc)
end

#build_partition_key_methodsObject



11
12
13
14
15
16
# File 'lib/eventosaurus/query_builder.rb', line 11

def build_partition_key_methods
  method_name = generate_method_name(partition_key_name)

  build_partition_key_event_class_method(method_name)
  build_partition_key_query_instance_method(method_name)
end

#build_partition_key_query_instance_method(method_name) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/eventosaurus/query_builder.rb', line 26

def build_partition_key_query_instance_method(method_name)
  instance_proc = proc do |value, operator = 'EQ'|
    by_partition_key(value: value, operator: operator)
  end

  Eventosaurus::Models::Query.send(:define_method, method_name, instance_proc)
end

#build_query_methodsObject



5
6
7
8
9
# File 'lib/eventosaurus/query_builder.rb', line 5

def build_query_methods
  secondary_indexes = definition[:local_indexes] || {}
  build_partition_key_methods
  build_local_secondary_methods(secondary_indexes)
end

#generate_method_name(attr) ⇒ Object



63
64
65
# File 'lib/eventosaurus/query_builder.rb', line 63

def generate_method_name(attr)
  "by_#{attr}".to_sym
end

#new_queryObject



59
60
61
# File 'lib/eventosaurus/query_builder.rb', line 59

def new_query
  Eventosaurus::Models::Query.new(definition)
end