dynamoid_advanced_where 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +21 -0
- data/.github/workflows/test.yml +39 -0
- data/.rubocop-https---raw-githubusercontent-com-GetTerminus-ruby-shared-configs-master--rubocop-3-1-yml +5 -0
- data/.rubocop-https---raw-githubusercontent-com-GetTerminus-ruby-shared-configs-master--rubocop-yml +91 -0
- data/.rubocop.yml +6 -0
- data/.rubocop_todo.yml +42 -0
- data/.ruby-version +1 -1
- data/Appraisals +5 -4
- data/Gemfile +4 -3
- data/Gemfile.lock +70 -58
- data/README.md +27 -0
- data/Rakefile +5 -3
- data/dynamoid_advanced_where.gemspec +5 -2
- data/gemfiles/dynamoid_3.4.gemfile +6 -4
- data/gemfiles/dynamoid_3.5.gemfile +6 -4
- data/gemfiles/dynamoid_3.6.gemfile +6 -4
- data/gemfiles/dynamoid_latest.gemfile +6 -4
- data/gemfiles/dynamoid_master.gemfile +6 -4
- data/lib/dynamoid_advanced_where/batched_updater.rb +33 -20
- data/lib/dynamoid_advanced_where/filter_builder.rb +7 -7
- data/lib/dynamoid_advanced_where/integrations/model.rb +1 -1
- data/lib/dynamoid_advanced_where/nodes/and_node.rb +0 -1
- data/lib/dynamoid_advanced_where/nodes/array_literal_node.rb +34 -0
- data/lib/dynamoid_advanced_where/nodes/base_node.rb +2 -1
- data/lib/dynamoid_advanced_where/nodes/exists_node.rb +2 -1
- data/lib/dynamoid_advanced_where/nodes/field_node.rb +16 -25
- data/lib/dynamoid_advanced_where/nodes/greater_than_node.rb +2 -0
- data/lib/dynamoid_advanced_where/nodes/in_node.rb +30 -0
- data/lib/dynamoid_advanced_where/nodes/includes.rb +2 -0
- data/lib/dynamoid_advanced_where/nodes/literal_node.rb +1 -0
- data/lib/dynamoid_advanced_where/nodes/not.rb +0 -1
- data/lib/dynamoid_advanced_where/nodes/or_node.rb +2 -0
- data/lib/dynamoid_advanced_where/nodes/root_node.rb +1 -1
- data/lib/dynamoid_advanced_where/nodes.rb +3 -0
- data/lib/dynamoid_advanced_where/query_builder.rb +3 -1
- data/lib/dynamoid_advanced_where/query_materializer.rb +2 -2
- data/lib/dynamoid_advanced_where/version.rb +3 -1
- data/lib/dynamoid_advanced_where.rb +5 -3
- metadata +30 -10
- data/.circleci/config.yml +0 -129
@@ -5,6 +5,7 @@ module DynamoidAdvancedWhere
|
|
5
5
|
DEEP_MERGE_ATTRIBUTES = %i[expression_attribute_names expression_attribute_values].freeze
|
6
6
|
|
7
7
|
attr_accessor :query_builder, :_set_values, :_array_appends, :_set_appends, :_increments
|
8
|
+
|
8
9
|
delegate :klass, to: :query_builder
|
9
10
|
|
10
11
|
def initialize(query_builder:)
|
@@ -21,8 +22,8 @@ module DynamoidAdvancedWhere
|
|
21
22
|
return_values: 'ALL_NEW',
|
22
23
|
key: {
|
23
24
|
klass.hash_key => hash_key,
|
24
|
-
klass.range_key => range_key
|
25
|
-
}.delete_if { |k, _v| k.nil? }
|
25
|
+
klass.range_key => range_key,
|
26
|
+
}.delete_if { |k, _v| k.nil? },
|
26
27
|
}
|
27
28
|
resp = client.update_item(update_item_arguments.merge(key_args))
|
28
29
|
|
@@ -102,7 +103,7 @@ module DynamoidAdvancedWhere
|
|
102
103
|
|
103
104
|
update_args.merge!(
|
104
105
|
collected_update_expression: [
|
105
|
-
"#{command} #{update_args[:collected_update_expression].join(', ')}"
|
106
|
+
"#{command} #{update_args[:collected_update_expression].join(', ')}",
|
106
107
|
]
|
107
108
|
)
|
108
109
|
end
|
@@ -113,7 +114,7 @@ module DynamoidAdvancedWhere
|
|
113
114
|
[
|
114
115
|
explicit_set_args,
|
115
116
|
list_append_for_arrays,
|
116
|
-
increment_field_updates
|
117
|
+
increment_field_updates,
|
117
118
|
]
|
118
119
|
),
|
119
120
|
command: 'SET'
|
@@ -129,11 +130,10 @@ module DynamoidAdvancedWhere
|
|
129
130
|
|
130
131
|
_set_values.each_with_object(builder_hash) do |(k, v), h|
|
131
132
|
prefix = merge_in_attr_placeholders(h, k, v)
|
132
|
-
h[:collected_update_expression] << "
|
133
|
+
h[:collected_update_expression] << "#{prefix[0]} = :#{prefix[1]}"
|
133
134
|
end
|
134
135
|
end
|
135
136
|
|
136
|
-
|
137
137
|
def increment_field_updates
|
138
138
|
return {} if _increments.empty?
|
139
139
|
|
@@ -142,13 +142,13 @@ module DynamoidAdvancedWhere
|
|
142
142
|
builder_hash = {
|
143
143
|
collected_update_expression: [],
|
144
144
|
expression_attribute_values: {
|
145
|
-
":#{zero_prefix}": 0
|
146
|
-
}
|
145
|
+
":#{zero_prefix}": 0,
|
146
|
+
},
|
147
147
|
}
|
148
148
|
|
149
149
|
_increments.each_with_object(builder_hash) do |(field, change), h|
|
150
150
|
prefix = merge_in_attr_placeholders(h, field, change)
|
151
|
-
builder_hash[:collected_update_expression] << "
|
151
|
+
builder_hash[:collected_update_expression] << "#{prefix[0]} = if_not_exists(#{prefix[0]}, :#{zero_prefix}) + :#{prefix[1]}"
|
152
152
|
end
|
153
153
|
end
|
154
154
|
|
@@ -158,7 +158,7 @@ module DynamoidAdvancedWhere
|
|
158
158
|
_set_appends.each_with_object(builder_hash) do |to_append, h|
|
159
159
|
to_append.each do |k, v|
|
160
160
|
prefix = merge_in_attr_placeholders(h, k, v)
|
161
|
-
builder_hash[:collected_update_expression] << "
|
161
|
+
builder_hash[:collected_update_expression] << "#{prefix[0]} :#{prefix[1]}"
|
162
162
|
end
|
163
163
|
end
|
164
164
|
end
|
@@ -169,14 +169,14 @@ module DynamoidAdvancedWhere
|
|
169
169
|
builder_hash = {
|
170
170
|
collected_update_expression: [],
|
171
171
|
expression_attribute_values: {
|
172
|
-
":#{empty_list_prefix}": []
|
173
|
-
}
|
172
|
+
":#{empty_list_prefix}": [],
|
173
|
+
},
|
174
174
|
}
|
175
175
|
|
176
176
|
update_args = _array_appends.each_with_object(builder_hash) do |to_append, h|
|
177
177
|
to_append.each do |k, v|
|
178
178
|
prefix = merge_in_attr_placeholders(h, k, v)
|
179
|
-
builder_hash[:collected_update_expression] << "
|
179
|
+
builder_hash[:collected_update_expression] << "#{prefix[0]} = list_append(if_not_exists(#{prefix[0]}, :#{empty_list_prefix}), :#{prefix[1]})"
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
@@ -184,7 +184,7 @@ module DynamoidAdvancedWhere
|
|
184
184
|
end
|
185
185
|
|
186
186
|
def merge_in_attr_placeholders(hsh, field_name, value)
|
187
|
-
prefix, new_data = prefixerize(field_name, value)
|
187
|
+
*prefix, new_data = prefixerize(field_name, value)
|
188
188
|
|
189
189
|
hsh.merge!(new_data, &method(:hash_extendeer))
|
190
190
|
|
@@ -192,16 +192,22 @@ module DynamoidAdvancedWhere
|
|
192
192
|
end
|
193
193
|
|
194
194
|
def prefixerize(field_name, value)
|
195
|
+
field_names = field_name.is_a?(Array) ? field_name : [field_name]
|
195
196
|
prefix = SecureRandom.hex
|
196
197
|
|
198
|
+
update_target = field_names.each_with_index.map do |name, idx|
|
199
|
+
["##{prefix}#{idx}", name]
|
200
|
+
end
|
201
|
+
|
197
202
|
[
|
203
|
+
update_target.map(&:first).join('.').to_s,
|
198
204
|
prefix,
|
199
205
|
{
|
200
|
-
expression_attribute_names:
|
206
|
+
expression_attribute_names: Hash[update_target],
|
201
207
|
expression_attribute_values: {
|
202
|
-
":#{prefix}" => dump(value,
|
203
|
-
}
|
204
|
-
}
|
208
|
+
":#{prefix}" => dump(value, field_name),
|
209
|
+
},
|
210
|
+
},
|
205
211
|
]
|
206
212
|
end
|
207
213
|
|
@@ -222,8 +228,15 @@ module DynamoidAdvancedWhere
|
|
222
228
|
)
|
223
229
|
end
|
224
230
|
|
225
|
-
def dump(value,
|
226
|
-
|
231
|
+
def dump(value, field_name)
|
232
|
+
if klass.attributes[field_name]
|
233
|
+
Dynamoid::Dumping.dump_field(value, klass.attributes[field_name])
|
234
|
+
elsif value.respond_to?(:dynamoid_dump)
|
235
|
+
value.dynamoid_dump
|
236
|
+
else
|
237
|
+
value
|
238
|
+
|
239
|
+
end
|
227
240
|
end
|
228
241
|
end
|
229
242
|
end
|
@@ -5,7 +5,7 @@ require_relative './nodes/null_node'
|
|
5
5
|
module DynamoidAdvancedWhere
|
6
6
|
class FilterBuilder
|
7
7
|
VALID_COMPARETORS_FOR_RANGE_FILTER = [
|
8
|
-
Nodes::GreaterThanNode
|
8
|
+
Nodes::GreaterThanNode,
|
9
9
|
].freeze
|
10
10
|
|
11
11
|
attr_accessor :expression_node, :klass
|
@@ -18,13 +18,13 @@ module DynamoidAdvancedWhere
|
|
18
18
|
def index_nodes
|
19
19
|
[
|
20
20
|
extract_query_filter_node,
|
21
|
-
extract_range_key_node
|
21
|
+
extract_range_key_node,
|
22
22
|
].compact
|
23
23
|
end
|
24
24
|
|
25
25
|
def to_query_filter
|
26
26
|
{
|
27
|
-
key_condition_expression: key_condition_expression
|
27
|
+
key_condition_expression: key_condition_expression,
|
28
28
|
}.merge!(expression_filters)
|
29
29
|
end
|
30
30
|
|
@@ -41,21 +41,21 @@ module DynamoidAdvancedWhere
|
|
41
41
|
def key_condition_expression
|
42
42
|
@key_condition_expression ||= [
|
43
43
|
extract_query_filter_node,
|
44
|
-
extract_range_key_node
|
44
|
+
extract_range_key_node,
|
45
45
|
].compact.map(&:to_expression).join(' AND ')
|
46
46
|
end
|
47
47
|
|
48
48
|
def expression_attribute_names
|
49
49
|
[
|
50
50
|
expression_node,
|
51
|
-
*index_nodes
|
51
|
+
*index_nodes,
|
52
52
|
].map(&:expression_attribute_names).inject({}, &:merge!)
|
53
53
|
end
|
54
54
|
|
55
55
|
def expression_attribute_values
|
56
56
|
[
|
57
57
|
expression_node,
|
58
|
-
*index_nodes
|
58
|
+
*index_nodes,
|
59
59
|
].map(&:expression_attribute_values).inject({}, &:merge!)
|
60
60
|
end
|
61
61
|
|
@@ -63,7 +63,7 @@ module DynamoidAdvancedWhere
|
|
63
63
|
{
|
64
64
|
filter_expression: expression_node.to_expression,
|
65
65
|
expression_attribute_names: expression_attribute_names,
|
66
|
-
expression_attribute_values: expression_attribute_values
|
66
|
+
expression_attribute_values: expression_attribute_values,
|
67
67
|
}.delete_if { |_, v| v.nil? || v.empty? }
|
68
68
|
end
|
69
69
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'securerandom'
|
4
|
+
|
5
|
+
module DynamoidAdvancedWhere
|
6
|
+
module Nodes
|
7
|
+
class ArrayLiteralNode
|
8
|
+
attr_accessor :value, :attr_prefix
|
9
|
+
|
10
|
+
def initialize(value)
|
11
|
+
self.value = value
|
12
|
+
self.attr_prefix = SecureRandom.hex
|
13
|
+
freeze
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_expression
|
17
|
+
values = value.each_with_index.map do |_, idx|
|
18
|
+
":#{attr_prefix}#{idx}"
|
19
|
+
end
|
20
|
+
"(#{values.join(', ')})"
|
21
|
+
end
|
22
|
+
|
23
|
+
def expression_attribute_names
|
24
|
+
{}
|
25
|
+
end
|
26
|
+
|
27
|
+
def expression_attribute_values
|
28
|
+
value.each_with_index.map do |val, idx|
|
29
|
+
[":#{attr_prefix}#{idx}", val]
|
30
|
+
end.to_h
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -10,6 +10,7 @@ module DynamoidAdvancedWhere
|
|
10
10
|
include Concerns::SupportsLogicalOr
|
11
11
|
|
12
12
|
attr_accessor :field_node, :prefix
|
13
|
+
|
13
14
|
def initialize(field_node:)
|
14
15
|
self.field_node = field_node
|
15
16
|
self.prefix = SecureRandom.hex
|
@@ -29,7 +30,7 @@ module DynamoidAdvancedWhere
|
|
29
30
|
|
30
31
|
def expression_attribute_values
|
31
32
|
{
|
32
|
-
":#{prefix}" => nil
|
33
|
+
":#{prefix}" => nil,
|
33
34
|
}
|
34
35
|
end
|
35
36
|
end
|
@@ -4,6 +4,7 @@ require_relative './equality_node'
|
|
4
4
|
require_relative './greater_than_node'
|
5
5
|
require_relative './exists_node'
|
6
6
|
require_relative './includes'
|
7
|
+
require_relative './in_node'
|
7
8
|
require_relative './subfield'
|
8
9
|
|
9
10
|
module DynamoidAdvancedWhere
|
@@ -20,9 +21,7 @@ module DynamoidAdvancedWhere
|
|
20
21
|
config.respond_to?(:call) ? config.call(attr_config) : config <= attr_config
|
21
22
|
end&.last
|
22
23
|
|
23
|
-
unless specific_klass
|
24
|
-
raise ArgumentError, "unable to find field type for `#{attr_config}`"
|
25
|
-
end
|
24
|
+
raise ArgumentError, "unable to find field type for `#{attr_config}`" unless specific_klass
|
26
25
|
|
27
26
|
specific_klass.new(field_path: field_path)
|
28
27
|
end
|
@@ -62,7 +61,9 @@ module DynamoidAdvancedWhere
|
|
62
61
|
|
63
62
|
class StringAttributeNode < FieldNode
|
64
63
|
include Concerns::SupportsIncludes
|
64
|
+
include Concerns::SupportsIn
|
65
65
|
end
|
66
|
+
|
66
67
|
class NativeBooleanAttributeNode < FieldNode; end
|
67
68
|
|
68
69
|
class StringBooleanAttributeNode < FieldNode
|
@@ -75,13 +76,11 @@ module DynamoidAdvancedWhere
|
|
75
76
|
include Concerns::SupportsGreaterThan
|
76
77
|
|
77
78
|
ALLOWED_COMPARISON_TYPES = [
|
78
|
-
Numeric
|
79
|
+
Numeric,
|
79
80
|
].freeze
|
80
81
|
|
81
82
|
def parse_right_hand_side(val)
|
82
|
-
unless ALLOWED_COMPARISON_TYPES.detect { |k| val.is_a?(k) }
|
83
|
-
raise ArgumentError, "unable to compare number to `#{val.class}`"
|
84
|
-
end
|
83
|
+
raise ArgumentError, "unable to compare number to `#{val.class}`" unless ALLOWED_COMPARISON_TYPES.detect { |k| val.is_a?(k) }
|
85
84
|
|
86
85
|
val
|
87
86
|
end
|
@@ -91,9 +90,10 @@ module DynamoidAdvancedWhere
|
|
91
90
|
include Concerns::SupportsGreaterThan
|
92
91
|
|
93
92
|
def parse_right_hand_side(val)
|
94
|
-
|
93
|
+
case val
|
94
|
+
when Date
|
95
95
|
val.to_time.to_i
|
96
|
-
|
96
|
+
when Time
|
97
97
|
val.to_f
|
98
98
|
else
|
99
99
|
raise ArgumentError, "unable to compare datetime to type #{val.class}"
|
@@ -105,9 +105,7 @@ module DynamoidAdvancedWhere
|
|
105
105
|
include Concerns::SupportsGreaterThan
|
106
106
|
|
107
107
|
def parse_right_hand_side(val)
|
108
|
-
if !val.is_a?(Date) || val.is_a?(DateTime)
|
109
|
-
raise ArgumentError, "unable to compare date to type #{val.class}"
|
110
|
-
end
|
108
|
+
raise ArgumentError, "unable to compare date to type #{val.class}" if !val.is_a?(Date) || val.is_a?(DateTime)
|
111
109
|
|
112
110
|
(val - Dynamoid::Persistence::UNIX_EPOCH_DATE).to_i
|
113
111
|
end
|
@@ -117,9 +115,7 @@ module DynamoidAdvancedWhere
|
|
117
115
|
include Concerns::SupportsIncludes
|
118
116
|
|
119
117
|
def parse_right_hand_side(val)
|
120
|
-
unless val.is_a?(String)
|
121
|
-
raise ArgumentError, "unable to compare date to type #{val.class}"
|
122
|
-
end
|
118
|
+
raise ArgumentError, "unable to compare date to type #{val.class}" unless val.is_a?(String)
|
123
119
|
|
124
120
|
val
|
125
121
|
end
|
@@ -129,9 +125,7 @@ module DynamoidAdvancedWhere
|
|
129
125
|
include Concerns::SupportsIncludes
|
130
126
|
|
131
127
|
def parse_right_hand_side(val)
|
132
|
-
unless val.is_a?(Integer)
|
133
|
-
raise ArgumentError, "unable to compare integer value to type #{val.class}"
|
134
|
-
end
|
128
|
+
raise ArgumentError, "unable to compare integer value to type #{val.class}" unless val.is_a?(Integer)
|
135
129
|
|
136
130
|
val
|
137
131
|
end
|
@@ -141,9 +135,7 @@ module DynamoidAdvancedWhere
|
|
141
135
|
include Concerns::SupportsIncludes
|
142
136
|
|
143
137
|
def parse_right_hand_side(val)
|
144
|
-
unless val.is_a?(String)
|
145
|
-
raise ArgumentError, "unable to compare string to type #{val.class}"
|
146
|
-
end
|
138
|
+
raise ArgumentError, "unable to compare string to type #{val.class}" unless val.is_a?(String)
|
147
139
|
|
148
140
|
val
|
149
141
|
end
|
@@ -153,9 +145,7 @@ module DynamoidAdvancedWhere
|
|
153
145
|
include Concerns::SupportsIncludes
|
154
146
|
|
155
147
|
def parse_right_hand_side(val)
|
156
|
-
unless val.is_a?(Integer)
|
157
|
-
raise ArgumentError, "unable to compare integer to type #{val.class}"
|
158
|
-
end
|
148
|
+
raise ArgumentError, "unable to compare integer to type #{val.class}" unless val.is_a?(Integer)
|
159
149
|
|
160
150
|
val
|
161
151
|
end
|
@@ -176,6 +166,7 @@ module DynamoidAdvancedWhere
|
|
176
166
|
FIELD_MAPPING = {
|
177
167
|
{ type: :string } => StringAttributeNode,
|
178
168
|
{ type: :number } => NumberAttributeNode,
|
169
|
+
{ type: :integer } => NumberAttributeNode,
|
179
170
|
|
180
171
|
# Boolean Fields
|
181
172
|
{ type: :boolean, store_as_native_boolean: true } =>
|
@@ -209,7 +200,7 @@ module DynamoidAdvancedWhere
|
|
209
200
|
{ type: :raw } => RawAttributeNode,
|
210
201
|
|
211
202
|
# Custom Object
|
212
|
-
->(c) { c[:type].is_a?(Class) } => CustomClassAttributeNode
|
203
|
+
->(c) { c[:type].is_a?(Class) } => CustomClassAttributeNode,
|
213
204
|
}.freeze
|
214
205
|
end
|
215
206
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DynamoidAdvancedWhere
|
4
|
+
module Nodes
|
5
|
+
class InNode < OperationNode
|
6
|
+
def to_expression
|
7
|
+
"#{lh_operation.to_expression} IN #{rh_operation.to_expression}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module Concerns
|
12
|
+
module SupportsIn
|
13
|
+
def in?(other_value)
|
14
|
+
val = if respond_to?(:parse_right_hand_side)
|
15
|
+
parse_right_hand_side(other_value)
|
16
|
+
else
|
17
|
+
other_value
|
18
|
+
end
|
19
|
+
|
20
|
+
raise 'Expected parameter of `in?` to be an array' unless val.is_a?(Array)
|
21
|
+
|
22
|
+
InNode.new(
|
23
|
+
lh_operation: self,
|
24
|
+
rh_operation: ArrayLiteralNode.new(val)
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative './nodes/base_node'
|
2
4
|
require_relative './nodes/field_node'
|
3
5
|
require_relative './nodes/literal_node'
|
6
|
+
require_relative './nodes/array_literal_node'
|
4
7
|
require_relative './nodes/operation_node'
|
5
8
|
require_relative './nodes/root_node'
|
6
9
|
require_relative './nodes/and_node'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative './nodes'
|
2
4
|
require_relative './query_materializer'
|
3
5
|
require_relative './batched_updater'
|
@@ -65,7 +67,7 @@ module DynamoidAdvancedWhere
|
|
65
67
|
self.class.new(**{
|
66
68
|
klass: klass,
|
67
69
|
start_hash: start_hash,
|
68
|
-
root_node: root_node
|
70
|
+
root_node: root_node,
|
69
71
|
}.merge(changes))
|
70
72
|
end
|
71
73
|
end
|
@@ -48,7 +48,7 @@ module DynamoidAdvancedWhere
|
|
48
48
|
|
49
49
|
def each_page_via_query
|
50
50
|
query = {
|
51
|
-
table_name: table_name
|
51
|
+
table_name: table_name,
|
52
52
|
}.merge(filter_builder.to_query_filter)
|
53
53
|
|
54
54
|
query[:limit] = query_builder.record_limit if query_builder.record_limit
|
@@ -76,7 +76,7 @@ module DynamoidAdvancedWhere
|
|
76
76
|
|
77
77
|
def each_page_via_scan
|
78
78
|
query = {
|
79
|
-
table_name: table_name
|
79
|
+
table_name: table_name,
|
80
80
|
}.merge(filter_builder.to_scan_filter)
|
81
81
|
|
82
82
|
query[:limit] = query_builder.record_limit if query_builder.record_limit
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dynamoid'
|
2
4
|
|
3
|
-
require
|
4
|
-
require
|
5
|
+
require 'dynamoid_advanced_where/version'
|
6
|
+
require 'dynamoid_advanced_where/integrations/model'
|
5
7
|
|
6
8
|
module DynamoidAdvancedWhere
|
7
|
-
|
9
|
+
# Your code goes here...
|
8
10
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamoid_advanced_where
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Malinconico
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dynamoid
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '4'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
|
-
name:
|
34
|
+
name: appraisal
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - ">="
|
@@ -58,6 +58,20 @@ dependencies:
|
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: '1.16'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: bundler-audit
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
61
75
|
- !ruby/object:Gem::Dependency
|
62
76
|
name: fasterer
|
63
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,7 +143,7 @@ dependencies:
|
|
129
143
|
- !ruby/object:Gem::Version
|
130
144
|
version: '0'
|
131
145
|
- !ruby/object:Gem::Dependency
|
132
|
-
name:
|
146
|
+
name: webmock
|
133
147
|
requirement: !ruby/object:Gem::Requirement
|
134
148
|
requirements:
|
135
149
|
- - ">="
|
@@ -149,10 +163,14 @@ executables: []
|
|
149
163
|
extensions: []
|
150
164
|
extra_rdoc_files: []
|
151
165
|
files:
|
152
|
-
- ".
|
166
|
+
- ".github/workflows/lint.yml"
|
167
|
+
- ".github/workflows/test.yml"
|
153
168
|
- ".gitignore"
|
154
169
|
- ".rspec"
|
170
|
+
- ".rubocop-https---raw-githubusercontent-com-GetTerminus-ruby-shared-configs-master--rubocop-3-1-yml"
|
171
|
+
- ".rubocop-https---raw-githubusercontent-com-GetTerminus-ruby-shared-configs-master--rubocop-yml"
|
155
172
|
- ".rubocop.yml"
|
173
|
+
- ".rubocop_todo.yml"
|
156
174
|
- ".ruby-version"
|
157
175
|
- ".travis.yml"
|
158
176
|
- Appraisals
|
@@ -180,11 +198,13 @@ files:
|
|
180
198
|
- lib/dynamoid_advanced_where/integrations/model.rb
|
181
199
|
- lib/dynamoid_advanced_where/nodes.rb
|
182
200
|
- lib/dynamoid_advanced_where/nodes/and_node.rb
|
201
|
+
- lib/dynamoid_advanced_where/nodes/array_literal_node.rb
|
183
202
|
- lib/dynamoid_advanced_where/nodes/base_node.rb
|
184
203
|
- lib/dynamoid_advanced_where/nodes/equality_node.rb
|
185
204
|
- lib/dynamoid_advanced_where/nodes/exists_node.rb
|
186
205
|
- lib/dynamoid_advanced_where/nodes/field_node.rb
|
187
206
|
- lib/dynamoid_advanced_where/nodes/greater_than_node.rb
|
207
|
+
- lib/dynamoid_advanced_where/nodes/in_node.rb
|
188
208
|
- lib/dynamoid_advanced_where/nodes/includes.rb
|
189
209
|
- lib/dynamoid_advanced_where/nodes/less_than_node.rb
|
190
210
|
- lib/dynamoid_advanced_where/nodes/literal_node.rb
|
@@ -197,10 +217,10 @@ files:
|
|
197
217
|
- lib/dynamoid_advanced_where/query_builder.rb
|
198
218
|
- lib/dynamoid_advanced_where/query_materializer.rb
|
199
219
|
- lib/dynamoid_advanced_where/version.rb
|
200
|
-
homepage:
|
220
|
+
homepage:
|
201
221
|
licenses: []
|
202
222
|
metadata: {}
|
203
|
-
post_install_message:
|
223
|
+
post_install_message:
|
204
224
|
rdoc_options: []
|
205
225
|
require_paths:
|
206
226
|
- lib
|
@@ -215,8 +235,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
235
|
- !ruby/object:Gem::Version
|
216
236
|
version: '0'
|
217
237
|
requirements: []
|
218
|
-
rubygems_version: 3.
|
219
|
-
signing_key:
|
238
|
+
rubygems_version: 3.2.33
|
239
|
+
signing_key:
|
220
240
|
specification_version: 4
|
221
241
|
summary: things
|
222
242
|
test_files: []
|