dymos 0.2.2 → 0.2.3
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/lib/dymos.rb +14 -2
- data/lib/dymos/model.rb +6 -11
- data/lib/dymos/query/base.rb +15 -0
- data/lib/dymos/query/delete_item.rb +2 -6
- data/lib/dymos/query/parameter/filter_expression.rb +35 -0
- data/lib/dymos/query/put_item.rb +2 -6
- data/lib/dymos/query/query.rb +5 -22
- data/lib/dymos/query/scan.rb +10 -31
- data/lib/dymos/query/update_item.rb +4 -12
- data/lib/dymos/version.rb +1 -1
- data/spec/lib/dymos/data.yml +3 -0
- data/spec/lib/dymos/model_spec.rb +4 -4
- data/spec/lib/dymos/query_spec.rb +59 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 222758f7001cee301006fcd83d6b59a1583347f2
|
4
|
+
data.tar.gz: 491976f1b67ffd4ea5a5450dc196f5a340b67086
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c86c507f99c19486796c40f4457bb75312786e6448b7c6e494aca27dedb1b9846ad6e9d4be114c1e9c45af9c2dd5a57782d248e5bb38361623d8d987f733488
|
7
|
+
data.tar.gz: d9486f95ff6ea81b7195b278decd4a757fab1062b808bf572c5ab96fab1d8d6779d3a507adf9f83c8ffa7329e616beab11c44babfe8384efc15846a98bdc7dd7
|
data/lib/dymos.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'active_support/all'
|
2
2
|
|
3
3
|
require "dymos/config"
|
4
|
+
require "dymos/query/parameter/filter_expression"
|
4
5
|
require "dymos/query/base"
|
5
6
|
require "dymos/query/put_item"
|
6
7
|
require "dymos/query/update_item"
|
@@ -17,6 +18,19 @@ require "dymos/client"
|
|
17
18
|
require "dymos/version"
|
18
19
|
|
19
20
|
module Dymos
|
21
|
+
def self.model_query_methods
|
22
|
+
@model_query_methods ||= ::Dymos::Query::Query.instance_methods(false)+
|
23
|
+
::Dymos::Query::GetItem.instance_methods(false)+
|
24
|
+
::Dymos::Query::Scan.instance_methods(false)+
|
25
|
+
::Dymos::Query::Parameter::FilterExpression.instance_methods(false)
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.model_update_query_methods
|
30
|
+
@model_update_query_methods ||= ::Dymos::Query::UpdateItem.instance_methods(false)+
|
31
|
+
::Dymos::Query::PutItem.instance_methods(false)+
|
32
|
+
::Dymos::Query::DeleteItem.instance_methods(false)
|
33
|
+
end
|
20
34
|
end
|
21
35
|
|
22
36
|
#Timeオブジェクト扱いたいのでアラウンドエイリアスで先に捕まえる
|
@@ -27,8 +41,6 @@ module Aws
|
|
27
41
|
alias :orig_format :format
|
28
42
|
def format(obj)
|
29
43
|
case obj
|
30
|
-
when TrueClass then { n:"1" }
|
31
|
-
when FalseClass then { n:"0" }
|
32
44
|
when Time then { s: obj.iso8601 }
|
33
45
|
else
|
34
46
|
orig_format obj
|
data/lib/dymos/model.rb
CHANGED
@@ -21,10 +21,7 @@ module Dymos
|
|
21
21
|
attr_accessor :last_execute_query
|
22
22
|
|
23
23
|
def method_missing(name, *args, &block)
|
24
|
-
|
25
|
-
::Dymos::Query::GetItem.instance_methods(false)+
|
26
|
-
::Dymos::Query::Scan.instance_methods(false)
|
27
|
-
if methods.include? name
|
24
|
+
if Dymos.model_query_methods.include? name
|
28
25
|
@query||={}
|
29
26
|
@query[name]=args
|
30
27
|
self
|
@@ -35,10 +32,8 @@ module Dymos
|
|
35
32
|
end
|
36
33
|
|
37
34
|
def method_missing(name, *args, &block)
|
38
|
-
|
39
|
-
|
40
|
-
::Dymos::Query::DeleteItem.instance_methods(false)
|
41
|
-
if methods.include? name
|
35
|
+
|
36
|
+
if Dymos.model_update_query_methods.include? name
|
42
37
|
@query||={}
|
43
38
|
@query[name]=args
|
44
39
|
self
|
@@ -49,7 +44,7 @@ module Dymos
|
|
49
44
|
|
50
45
|
def self.field(attr, type, default: nil, desc: nil)
|
51
46
|
fail StandardError('attribute name is invalid') if attr =~ /[\!\?]$/
|
52
|
-
fail StandardError('require "default" option') if (type == :
|
47
|
+
fail StandardError('require "default" option') if (type == :boolean && default.nil?)
|
53
48
|
|
54
49
|
@fields ||= {}
|
55
50
|
@fields[attr]={
|
@@ -65,7 +60,7 @@ module Dymos
|
|
65
60
|
val = read_attribute(attr) || default
|
66
61
|
return val if raw || !val.present?
|
67
62
|
case type
|
68
|
-
when :
|
63
|
+
when :boolean
|
69
64
|
to_b(val)
|
70
65
|
when :time
|
71
66
|
Time.parse val
|
@@ -83,7 +78,7 @@ module Dymos
|
|
83
78
|
define_method("#{attr}_desc") { desc }
|
84
79
|
define_method("#{attr}?") do
|
85
80
|
val = self.send attr
|
86
|
-
if type == :
|
81
|
+
if type == :boolean
|
87
82
|
val
|
88
83
|
else
|
89
84
|
!val.nil?
|
data/lib/dymos/query/base.rb
CHANGED
@@ -18,6 +18,21 @@ module Dymos
|
|
18
18
|
value = ::Dymos::Config.default[command.to_sym].merge value
|
19
19
|
@query.merge value
|
20
20
|
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
def parse_condition(*values)
|
24
|
+
if values[1].class == Symbol
|
25
|
+
if values.count == 2
|
26
|
+
column, operator, value = values[0], values[1], nil
|
27
|
+
else
|
28
|
+
column, operator, value = values
|
29
|
+
end
|
30
|
+
else
|
31
|
+
column, operator, value = values[0], :eq, values[1]
|
32
|
+
end
|
33
|
+
|
34
|
+
[column, operator, value]
|
35
|
+
end
|
21
36
|
end
|
22
37
|
end
|
23
38
|
end
|
@@ -15,12 +15,8 @@ module Dymos
|
|
15
15
|
self
|
16
16
|
end
|
17
17
|
|
18
|
-
def add_expected(*
|
19
|
-
|
20
|
-
column, operator, value = value[0], :eq, value[1]
|
21
|
-
else
|
22
|
-
column, operator, value = value
|
23
|
-
end
|
18
|
+
def add_expected(*values)
|
19
|
+
column, operator, value = parse_condition(*values)
|
24
20
|
@query[:expected] ||= {}
|
25
21
|
@query[:expected].store(*_add_expected(column, operator, value))
|
26
22
|
self
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Dymos
|
2
|
+
module Query
|
3
|
+
module Parameter
|
4
|
+
module FilterExpression
|
5
|
+
def filter_expression(value)
|
6
|
+
@query[:filter_expression] = value
|
7
|
+
self
|
8
|
+
end
|
9
|
+
|
10
|
+
def expression_attribute_names(value)
|
11
|
+
names = value.deep_stringify_keys.map do |k, v|
|
12
|
+
k="##{k}" unless k[0] == "#"
|
13
|
+
[k, v]
|
14
|
+
end
|
15
|
+
@query[:expression_attribute_names] = Hash[*names.flatten]
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def expression_attribute_values(value)
|
20
|
+
values = value.deep_stringify_keys.map do |k, v|
|
21
|
+
k=":#{k}" unless k[0] == ":"
|
22
|
+
[k, v]
|
23
|
+
end
|
24
|
+
@query[:expression_attribute_values] = Hash[*values.flatten]
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
alias :expression :filter_expression
|
29
|
+
alias :bind_names :expression_attribute_names
|
30
|
+
alias :bind_values :expression_attribute_values
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/dymos/query/put_item.rb
CHANGED
@@ -15,12 +15,8 @@ module Dymos
|
|
15
15
|
self
|
16
16
|
end
|
17
17
|
|
18
|
-
def add_expected(*
|
19
|
-
|
20
|
-
column, operator, value = value[0], :eq, value[1]
|
21
|
-
else
|
22
|
-
column, operator, value = value
|
23
|
-
end
|
18
|
+
def add_expected(*values)
|
19
|
+
column, operator, value = parse_condition(*values)
|
24
20
|
@query[:expected] ||= {}
|
25
21
|
@query[:expected].store(*_add_expected(column, operator, value))
|
26
22
|
self
|
data/lib/dymos/query/query.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Dymos
|
2
2
|
module Query
|
3
3
|
class Query < Base
|
4
|
+
include Parameter::FilterExpression
|
4
5
|
|
5
6
|
def command
|
6
7
|
'query'
|
@@ -40,18 +41,13 @@ module Dymos
|
|
40
41
|
self
|
41
42
|
end
|
42
43
|
|
43
|
-
def add_conditions(*
|
44
|
-
|
45
|
-
column, operator, value = value[0], :eq, value[1]
|
46
|
-
else
|
47
|
-
column, operator, value = value
|
48
|
-
end
|
44
|
+
def add_conditions(*values)
|
45
|
+
column, operator, value = parse_condition(*values)
|
49
46
|
@query[:key_conditions] ||= {}
|
50
47
|
@query[:key_conditions].store(*_add_filter(column, operator, value))
|
51
48
|
self
|
52
49
|
end
|
53
50
|
|
54
|
-
|
55
51
|
def comparison_operator(value)
|
56
52
|
@query[:comparison_operator] = value.to_s.upcase
|
57
53
|
self
|
@@ -63,12 +59,8 @@ module Dymos
|
|
63
59
|
self
|
64
60
|
end
|
65
61
|
|
66
|
-
def add_filter(*
|
67
|
-
|
68
|
-
column, operator, value = value[0], :eq, value[1]
|
69
|
-
else
|
70
|
-
column, operator, value = value
|
71
|
-
end
|
62
|
+
def add_filter(*values)
|
63
|
+
column, operator, value = parse_condition(*values)
|
72
64
|
@query[:query_filter] ||= {}
|
73
65
|
@query[:query_filter].store(*_add_filter(column, operator, value))
|
74
66
|
filter_operator 'AND' if @query[:conditional_operator].blank? && @query[:query_filter].count > 1
|
@@ -113,15 +105,6 @@ module Dymos
|
|
113
105
|
self
|
114
106
|
end
|
115
107
|
|
116
|
-
def projection_expression(value)
|
117
|
-
@query[:projection_expression] = value
|
118
|
-
self
|
119
|
-
end
|
120
|
-
|
121
|
-
def expression_attribute_names(value)
|
122
|
-
@query[:expression_attribute_names] = value.deep_stringify_keys
|
123
|
-
self
|
124
|
-
end
|
125
108
|
end
|
126
109
|
end
|
127
110
|
end
|
data/lib/dymos/query/scan.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Dymos
|
2
2
|
module Query
|
3
3
|
class Scan < Base
|
4
|
+
include Parameter::FilterExpression
|
5
|
+
|
4
6
|
def command
|
5
7
|
'scan'
|
6
8
|
end
|
@@ -26,12 +28,9 @@ module Dymos
|
|
26
28
|
self
|
27
29
|
end
|
28
30
|
|
29
|
-
def add_filter(*
|
30
|
-
|
31
|
-
|
32
|
-
else
|
33
|
-
column, operator, value = value
|
34
|
-
end
|
31
|
+
def add_filter(*values)
|
32
|
+
column, operator, value = parse_condition(*values)
|
33
|
+
|
35
34
|
@query[:scan_filter] ||= {}
|
36
35
|
@query[:scan_filter].store(*_add_filter(column, operator, value))
|
37
36
|
filter_operator 'AND' if @query[:conditional_operator].blank? && @query[:scan_filter].count > 1
|
@@ -39,11 +38,11 @@ module Dymos
|
|
39
38
|
end
|
40
39
|
|
41
40
|
def _add_filter(column, operator, value)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
]
|
41
|
+
hash = {
|
42
|
+
comparison_operator: operator.to_s.upcase
|
43
|
+
}
|
44
|
+
hash[:attribute_value_list]=[*value] if value.present?
|
45
|
+
[column.to_s, hash]
|
47
46
|
end
|
48
47
|
|
49
48
|
def filter_operator(value)
|
@@ -73,26 +72,6 @@ module Dymos
|
|
73
72
|
self
|
74
73
|
end
|
75
74
|
|
76
|
-
def projection_expression(value)
|
77
|
-
@query[:projection_expression] = value
|
78
|
-
self
|
79
|
-
end
|
80
|
-
|
81
|
-
def filter_expression(value)
|
82
|
-
@query[:filter_expression] = value
|
83
|
-
self
|
84
|
-
end
|
85
|
-
|
86
|
-
def expression_attribute_names(value)
|
87
|
-
@query[:expression_attribute_names] = value.deep_stringify_keys
|
88
|
-
self
|
89
|
-
end
|
90
|
-
|
91
|
-
def expression_attribute_values(value)
|
92
|
-
@query[:expression_attribute_values] = value.deep_stringify_keys
|
93
|
-
self
|
94
|
-
end
|
95
|
-
|
96
75
|
end
|
97
76
|
end
|
98
77
|
end
|
@@ -30,12 +30,8 @@ module Dymos
|
|
30
30
|
self
|
31
31
|
end
|
32
32
|
|
33
|
-
def add_attribute_updates(*
|
34
|
-
|
35
|
-
column, operator, value = value[0], :put, value[1]
|
36
|
-
else
|
37
|
-
column, operator, value = value
|
38
|
-
end
|
33
|
+
def add_attribute_updates(*values)
|
34
|
+
column, operator, value = parse_condition(*values)
|
39
35
|
@query[:attribute_updates] ||= {}
|
40
36
|
@query[:attribute_updates].store(*_attribute_updates(column, operator, value))
|
41
37
|
self
|
@@ -54,12 +50,8 @@ module Dymos
|
|
54
50
|
self
|
55
51
|
end
|
56
52
|
|
57
|
-
def add_expected(*
|
58
|
-
|
59
|
-
column, operator, value = value[0], :eq, value[1]
|
60
|
-
else
|
61
|
-
column, operator, value = value
|
62
|
-
end
|
53
|
+
def add_expected(*values)
|
54
|
+
column, operator, value = parse_condition(*values)
|
63
55
|
@query[:expected] ||= {}
|
64
56
|
@query[:expected].store(*_add_expected(column, operator, value))
|
65
57
|
self
|
data/lib/dymos/version.rb
CHANGED
data/spec/lib/dymos/data.yml
CHANGED
@@ -103,6 +103,7 @@ Thread:
|
|
103
103
|
Replies: 0
|
104
104
|
Answered: 0
|
105
105
|
Tags: [ "index", "primarykey", "table" ]
|
106
|
+
Option:
|
106
107
|
LastPostDateTime: "2012-01-03T00:40:57.165Z"
|
107
108
|
-
|
108
109
|
ForumName: "DynamoDB"
|
@@ -113,6 +114,7 @@ Thread:
|
|
113
114
|
Replies: 0
|
114
115
|
Answered: 0
|
115
116
|
Tags: [ "index", "primarykey", "rangekey" ]
|
117
|
+
Option:
|
116
118
|
LastPostDateTime: "2012-01-03T00:40:57.165Z"
|
117
119
|
-
|
118
120
|
ForumName: "Amazon S3"
|
@@ -123,6 +125,7 @@ Thread:
|
|
123
125
|
Replies: 0
|
124
126
|
Answered: 0
|
125
127
|
Tags: [ "largeobject", "multipart upload" ]
|
128
|
+
Option: "private"
|
126
129
|
LastPostDateTime: "2012-01-03T00:40:57.165Z"
|
127
130
|
|
128
131
|
Reply:
|
@@ -7,7 +7,7 @@ describe Dymos::Model do
|
|
7
7
|
end
|
8
8
|
it "type:boolには初期値が必須" do
|
9
9
|
expect { Class.new(Dymos::Model) do
|
10
|
-
field "hoge", :
|
10
|
+
field "hoge", :boolean
|
11
11
|
end }.to raise_error
|
12
12
|
end
|
13
13
|
end
|
@@ -18,7 +18,7 @@ describe Dymos::Model do
|
|
18
18
|
field :email, :string
|
19
19
|
field :list, :string_set
|
20
20
|
field :count, :integer
|
21
|
-
field :enable, :
|
21
|
+
field :enable, :boolean, default: false
|
22
22
|
|
23
23
|
field :created_at, :time
|
24
24
|
field :updated_at, :time
|
@@ -58,8 +58,8 @@ describe Dymos::Model do
|
|
58
58
|
@client.put_item(table_name: 'dummy', item: {id: 'fuga', name: '次郎'})
|
59
59
|
@client.put_item(table_name: 'dummy', item: {id: 'piyo', name: '三郎'})
|
60
60
|
@client.put_item(table_name: 'dummy', item: {id: 'musashi', name: '巴'}) #削除用
|
61
|
-
@client.put_item(table_name: 'dummy', item: {id: 'enable_id', name: 'enable', enable:
|
62
|
-
@client.put_item(table_name: 'dummy', item: {id: 'disable_id', name: 'disable', enable:
|
61
|
+
@client.put_item(table_name: 'dummy', item: {id: 'enable_id', name: 'enable', enable: true})
|
62
|
+
@client.put_item(table_name: 'dummy', item: {id: 'disable_id', name: 'disable', enable: false})
|
63
63
|
|
64
64
|
@client.delete_table(table_name: 'post') if @client.list_tables[:table_names].include?('post')
|
65
65
|
@client.create_table(
|
@@ -32,6 +32,7 @@ describe 'query' do
|
|
32
32
|
field :Views, :integer
|
33
33
|
field :Answered, :string
|
34
34
|
field :Tags, :array
|
35
|
+
field :Option, :string
|
35
36
|
field :LastPostDateTime, :time
|
36
37
|
end
|
37
38
|
class ReplyModel < Dymos::Model
|
@@ -39,7 +40,7 @@ describe 'query' do
|
|
39
40
|
field :Id, :string
|
40
41
|
field :ReplyDateTime, :time
|
41
42
|
field :Message, :string
|
42
|
-
field :
|
43
|
+
field :PostedBy, :string
|
43
44
|
end
|
44
45
|
|
45
46
|
describe :find do
|
@@ -72,6 +73,62 @@ describe 'query' do
|
|
72
73
|
where(Id: "DynamoDB#DynamoDB Thread 1", PostedBy: "User A").all
|
73
74
|
expect(result.count).to eq(2)
|
74
75
|
end
|
76
|
+
|
77
|
+
describe :filter_expression do
|
78
|
+
it :scan do
|
79
|
+
result =ThreadModel.expression("ForumName = :name").bind_values(name: "DynamoDB").all
|
80
|
+
expect(result.count).to eq(2)
|
81
|
+
end
|
82
|
+
it :query do
|
83
|
+
result =ThreadModel.where(ForumName: "DynamoDB").filter_expression("contains(#column, :number)")
|
84
|
+
.bind_names(column: "Subject")
|
85
|
+
.bind_values(number: "Thread 1").all
|
86
|
+
expect(result.count).to eq(1)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe :conditions do
|
91
|
+
describe :time do
|
92
|
+
it :== do
|
93
|
+
time = Time.parse("2011-12-11T00:40:57.165Z")
|
94
|
+
result = ReplyModel.add_filter(:ReplyDateTime, :eq, time.iso8601(3)).all
|
95
|
+
expect(result.count).to eq(1)
|
96
|
+
end
|
97
|
+
it :> do
|
98
|
+
time = Time.parse("2011-12-11T00:40:57.165Z")
|
99
|
+
result = ReplyModel.add_filter(:ReplyDateTime, :gt, time.iso8601(3)).all
|
100
|
+
expect(result.count).to eq(4)
|
101
|
+
end
|
102
|
+
it :>= do
|
103
|
+
time = Time.parse("2011-12-11T00:40:57.165Z")
|
104
|
+
result = ReplyModel.add_filter(:ReplyDateTime, :ge, time.iso8601(3)).all
|
105
|
+
expect(result.count).to eq(5)
|
106
|
+
end
|
107
|
+
it :< do
|
108
|
+
time = Time.parse("2012-01-03T00:40:57.165Z")
|
109
|
+
result = ReplyModel.add_filter(:ReplyDateTime, :lt, time.iso8601(3)).all
|
110
|
+
expect(result.count).to eq(4)
|
111
|
+
end
|
112
|
+
it :<= do
|
113
|
+
time = Time.parse("2012-01-03T00:40:57.165Z")
|
114
|
+
result = ReplyModel.add_filter(:ReplyDateTime, :le, time.iso8601(3)).all
|
115
|
+
expect(result.count).to eq(5)
|
116
|
+
end
|
117
|
+
it :<= do
|
118
|
+
time = Time.parse("2012-01-03T00:40:57.165Z")
|
119
|
+
result = ReplyModel.add_filter(:ReplyDateTime, :le, time.iso8601(3)).all
|
120
|
+
expect(result.count).to eq(5)
|
121
|
+
end
|
122
|
+
it :null do
|
123
|
+
result = ThreadModel.add_filter(:Hoge, :null).all
|
124
|
+
expect(result.count).to eq(3)
|
125
|
+
end
|
126
|
+
it :not_null do
|
127
|
+
result = ThreadModel.add_filter(:Hoge, :not_null).all
|
128
|
+
expect(result.count).to eq(0)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
75
132
|
end
|
76
133
|
it :one do
|
77
134
|
result = ThreadModel.where(ForumName: "DynamoDB").desc.one
|
@@ -141,7 +198,7 @@ describe 'query' do
|
|
141
198
|
describe :delete do
|
142
199
|
it 'del' do
|
143
200
|
model = TestModelSaveItem.find('piyo')
|
144
|
-
expect(model.add_expected(:param1
|
201
|
+
expect(model.add_expected(:param1, :eq, 103).delete.class).to eq(TestModelSaveItem)
|
145
202
|
expect(TestModelSaveItem.find('piyo')).to eq(nil)
|
146
203
|
end
|
147
204
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dymos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hoshina85
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/dymos/query/delete_item.rb
|
149
149
|
- lib/dymos/query/describe.rb
|
150
150
|
- lib/dymos/query/get_item.rb
|
151
|
+
- lib/dymos/query/parameter/filter_expression.rb
|
151
152
|
- lib/dymos/query/put_item.rb
|
152
153
|
- lib/dymos/query/query.rb
|
153
154
|
- lib/dymos/query/scan.rb
|