dynamoid_advanced_where 1.3.0 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|