dymos 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/dymos.rb +2 -0
- data/lib/dymos/command.rb +4 -0
- data/lib/dymos/model.rb +33 -23
- data/lib/dymos/persistence.rb +61 -0
- data/lib/dymos/query/builder.rb +7 -7
- data/lib/dymos/query/delete_item.rb +47 -0
- data/lib/dymos/query/scan.rb +6 -0
- data/lib/dymos/version.rb +1 -1
- data/spec/lib/dymos/model_spec.rb +93 -11
- data/spec/lib/dymos/query/delete_item_spec.rb +76 -0
- data/spec/lib/dymos/query/get_item_spec.rb +1 -0
- data/spec/lib/dymos/query/put_item_spec.rb +1 -0
- data/spec/lib/dymos/query/query_spec.rb +1 -0
- data/spec/lib/dymos/query/scan_spec.rb +4 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e960079833a6e03ae80c5bb1374d504ccb8eb83
|
4
|
+
data.tar.gz: cf6b5b4cc3b06455ef702cde7aae8fef8694f4f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e928ff07856ca7da1a51b51bd1a27c71502fdc6f6af9d52ea0d713ba02c2d9a07e744e73d1734841eef28c79d4067ac78c5d2882e1713f0d72c97801a37c200
|
7
|
+
data.tar.gz: 65cb61ad85949b518774863d0ddf01fcb5ee94143e5808f3631d2888bde4fd585e3d27d66fa9af0eeecf6916d9103c3514334c30d9252d65ae97a84fe30478f2
|
data/lib/dymos.rb
CHANGED
@@ -3,12 +3,14 @@ require "dymos/query/expect"
|
|
3
3
|
require "dymos/query/builder"
|
4
4
|
require "dymos/query/put_item"
|
5
5
|
require "dymos/query/update_item"
|
6
|
+
require "dymos/query/delete_item"
|
6
7
|
require "dymos/query/get_item"
|
7
8
|
require "dymos/query/describe"
|
8
9
|
require "dymos/query/scan"
|
9
10
|
require "dymos/query/query"
|
10
11
|
require "dymos/attribute"
|
11
12
|
require "dymos/command"
|
13
|
+
require "dymos/persistence"
|
12
14
|
require "dymos/model"
|
13
15
|
require "dymos/version"
|
14
16
|
|
data/lib/dymos/command.rb
CHANGED
data/lib/dymos/model.rb
CHANGED
@@ -4,30 +4,43 @@ require 'active_model'
|
|
4
4
|
module Dymos
|
5
5
|
class Model
|
6
6
|
include ActiveModel::Model
|
7
|
+
include ActiveModel::Dirty
|
8
|
+
include Dymos::Persistence
|
7
9
|
extend Dymos::Command
|
8
10
|
attr_accessor :metadata
|
9
11
|
|
10
12
|
def initialize(params={})
|
11
|
-
@attributes
|
13
|
+
@attributes={}
|
14
|
+
send :attributes=, params, true
|
12
15
|
super
|
13
16
|
end
|
14
17
|
|
15
|
-
def self.field(attr, type
|
16
|
-
|
18
|
+
def self.field(attr, type, default: nil)
|
19
|
+
@fields ||= {}
|
20
|
+
@fields[attr]={
|
21
|
+
type: type,
|
22
|
+
default: default
|
23
|
+
}
|
24
|
+
define_attribute_methods attr
|
25
|
+
define_method(attr) { read_attribute(attr) || default }
|
17
26
|
define_method("#{attr}_type") { type }
|
18
27
|
define_method("#{attr}?") { !read_attribute(attr).nil? }
|
19
28
|
define_method("#{attr}=") { |value| write_attribute(attr, value) }
|
20
29
|
end
|
21
30
|
|
31
|
+
def self.fields
|
32
|
+
@fields
|
33
|
+
end
|
34
|
+
|
22
35
|
def self.table(name)
|
23
36
|
define_singleton_method('table_name') { name }
|
24
37
|
define_method('table_name') { name }
|
25
38
|
end
|
26
39
|
|
27
|
-
def attributes=(attributes = {})
|
40
|
+
def attributes=(attributes = {}, initialize = false)
|
28
41
|
if attributes
|
29
42
|
attributes.each do |attr, value|
|
30
|
-
write_attribute(attr, value)
|
43
|
+
write_attribute(attr, value, initialize)
|
31
44
|
end
|
32
45
|
end
|
33
46
|
end
|
@@ -45,34 +58,30 @@ module Dymos
|
|
45
58
|
end
|
46
59
|
|
47
60
|
def self.find(key1, key2=nil)
|
48
|
-
indexes =
|
61
|
+
indexes = key_scheme
|
49
62
|
keys={}
|
50
63
|
keys[indexes.first[:attribute_name].to_sym] = key1
|
51
64
|
keys[indexes.last[:attribute_name].to_sym] = key2 if indexes.size > 1
|
52
65
|
self.get.key(keys).execute
|
53
66
|
end
|
54
67
|
|
55
|
-
def
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
result = dynamo.put_item(
|
63
|
-
table_name: table_name,
|
64
|
-
item: items,
|
65
|
-
return_values: "ALL_OLD"
|
66
|
-
)
|
67
|
-
!result.error
|
68
|
+
def self.key_scheme
|
69
|
+
@key_scheme ||= new.describe_table[:table][:key_schema]
|
70
|
+
end
|
71
|
+
|
72
|
+
def reload!
|
73
|
+
reset_changes
|
68
74
|
end
|
69
75
|
|
70
76
|
def describe_table
|
71
|
-
|
77
|
+
self.class.send(:describe).execute
|
72
78
|
end
|
73
79
|
|
74
|
-
def
|
75
|
-
|
80
|
+
def indexes
|
81
|
+
scheme = self.class.key_scheme.map do |scheme|
|
82
|
+
[scheme[:attribute_name], send(scheme[:attribute_name])]
|
83
|
+
end
|
84
|
+
scheme.to_h
|
76
85
|
end
|
77
86
|
|
78
87
|
def dynamo
|
@@ -94,7 +103,8 @@ module Dymos
|
|
94
103
|
@attributes[name.to_sym]
|
95
104
|
end
|
96
105
|
|
97
|
-
def write_attribute(name, value)
|
106
|
+
def write_attribute(name, value, initialize=false)
|
107
|
+
self.send "#{name}_will_change!" unless (initialize or value == @attributes[name.to_sym])
|
98
108
|
@attributes[name.to_sym] = value
|
99
109
|
end
|
100
110
|
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Dymos
|
2
|
+
module Persistence
|
3
|
+
attr_accessor :new_record
|
4
|
+
|
5
|
+
def initialize(params={})
|
6
|
+
@new_record = true
|
7
|
+
@destroyed = false
|
8
|
+
end
|
9
|
+
|
10
|
+
def new_record?
|
11
|
+
@new_record
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroyed?
|
15
|
+
@destroyed
|
16
|
+
end
|
17
|
+
|
18
|
+
def persisted?
|
19
|
+
!(new_record? || destroyed?)
|
20
|
+
end
|
21
|
+
|
22
|
+
def save(*)
|
23
|
+
create_or_update
|
24
|
+
rescue
|
25
|
+
false
|
26
|
+
end
|
27
|
+
|
28
|
+
def save!(*)
|
29
|
+
create_or_update || raise(Dymos::RecordNotSaved)
|
30
|
+
end
|
31
|
+
|
32
|
+
def delete
|
33
|
+
self.class.delete.key(indexes).execute if persisted?
|
34
|
+
@destroyed = true
|
35
|
+
freeze
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def create_or_update
|
41
|
+
result = new_record? ? _create_record : _update_record
|
42
|
+
result != false
|
43
|
+
end
|
44
|
+
|
45
|
+
def _update_record()
|
46
|
+
_create_record
|
47
|
+
end
|
48
|
+
|
49
|
+
def _create_record()
|
50
|
+
result = dynamo.put_item(
|
51
|
+
table_name: table_name,
|
52
|
+
item: attributes,
|
53
|
+
return_values: "ALL_OLD"
|
54
|
+
)
|
55
|
+
changes_applied
|
56
|
+
@new_record = false
|
57
|
+
!result.error
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
data/lib/dymos/query/builder.rb
CHANGED
@@ -43,22 +43,22 @@ module Dymos
|
|
43
43
|
if res.data.respond_to? :items # scan, query
|
44
44
|
metadata = extract(res, :items)
|
45
45
|
res.data[:items].map do |datum|
|
46
|
-
obj = Object.const_get(@class_name).new
|
47
|
-
obj.attributes = datum
|
46
|
+
obj = Object.const_get(@class_name).new(datum)
|
48
47
|
obj.metadata = metadata
|
48
|
+
obj.new_record = false
|
49
49
|
obj
|
50
50
|
end
|
51
51
|
elsif res.data.respond_to? :attributes # put_item, update_item
|
52
52
|
return nil if res.attributes.nil?
|
53
|
-
obj = Object.const_get(@class_name).new
|
54
|
-
obj.attributes = res.attributes
|
53
|
+
obj = Object.const_get(@class_name).new(res.attributes)
|
55
54
|
obj.metadata = extract(res, :attributes)
|
56
55
|
obj
|
57
56
|
elsif res.respond_to? :data
|
58
|
-
if res.data.respond_to? :item # get_item
|
59
|
-
|
60
|
-
obj
|
57
|
+
if res.data.respond_to? :item # get_item, delete_item
|
58
|
+
return nil if res.data.item.nil?
|
59
|
+
obj = Object.const_get(@class_name).new(res.data.item)
|
61
60
|
obj.metadata = extract(res, :item)
|
61
|
+
obj.new_record = false
|
62
62
|
obj
|
63
63
|
else
|
64
64
|
res.data.to_hash # describe
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Dymos
|
2
|
+
module Query
|
3
|
+
class DeleteItem < ::Dymos::Query::Builder
|
4
|
+
|
5
|
+
# @param [String] name
|
6
|
+
# @return [self]
|
7
|
+
def key(name)
|
8
|
+
@key = name
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
def expected(params)
|
13
|
+
@expected = Hash[params.map do |name, expression|
|
14
|
+
operator, values = expression.split(' ', 2)
|
15
|
+
if values.nil?
|
16
|
+
[name, ::Dymos::Query::Expect.new.condition(operator, nil).data]
|
17
|
+
else
|
18
|
+
value1, value2 = values.split(' ')
|
19
|
+
if value2.present?
|
20
|
+
[name, ::Dymos::Query::Expect.new.condition(operator, values).data]
|
21
|
+
else
|
22
|
+
[name, ::Dymos::Query::Expect.new.condition(operator, value1).data]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end]
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def query
|
31
|
+
data = {
|
32
|
+
table_name: @table_name.to_s,
|
33
|
+
key: @key,
|
34
|
+
return_values: @return_values || 'ALL_OLD'
|
35
|
+
}
|
36
|
+
|
37
|
+
if @expected.present?
|
38
|
+
data[:expected] = @expected
|
39
|
+
if @expected.size > 1
|
40
|
+
data[:conditional_operator] = @conditional_operator || 'AND'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
data
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/dymos/query/scan.rb
CHANGED
@@ -7,11 +7,17 @@ module Dymos
|
|
7
7
|
self
|
8
8
|
end
|
9
9
|
|
10
|
+
def exclusive_start_key(params)
|
11
|
+
@exclusive_start_key = params
|
12
|
+
self
|
13
|
+
end
|
14
|
+
|
10
15
|
def query
|
11
16
|
data = {
|
12
17
|
table_name: @table_name.to_s,
|
13
18
|
}
|
14
19
|
data[:limit] = @limit if @limit.present?
|
20
|
+
data[:exclusive_start_key] = @exclusive_start_key if @exclusive_start_key.present?
|
15
21
|
data
|
16
22
|
end
|
17
23
|
end
|
data/lib/dymos/version.rb
CHANGED
@@ -46,6 +46,7 @@ describe Dymos::Model do
|
|
46
46
|
client.put_item(table_name: 'dummy', item: {id: 'hoge', name: '太郎', list: Set['a', 'b', 'c']})
|
47
47
|
client.put_item(table_name: 'dummy', item: {id: 'fuga', name: '次郎'})
|
48
48
|
client.put_item(table_name: 'dummy', item: {id: 'piyo', name: '三郎'})
|
49
|
+
client.put_item(table_name: 'dummy', item: {id: 'musashi', name: '巴'}) #削除用
|
49
50
|
|
50
51
|
client.delete_table(table_name: 'post') if client.list_tables[:table_names].include?('post')
|
51
52
|
client.create_table(
|
@@ -66,6 +67,36 @@ describe Dymos::Model do
|
|
66
67
|
|
67
68
|
# let(:model) { Dummy.new }
|
68
69
|
|
70
|
+
describe :fields do
|
71
|
+
it do
|
72
|
+
expect(DummyUser.fields.keys).to eq([:id, :name, :email, :list])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
describe "クラスマクロのデフォルト値" do
|
76
|
+
it "設定されていなければnilを返す" do
|
77
|
+
expect(DummyPost.new.id).to eq(nil)
|
78
|
+
end
|
79
|
+
|
80
|
+
class DummyModel < Dymos::Model
|
81
|
+
field :id, :number, default: 0
|
82
|
+
field :body, :string, default: "none"
|
83
|
+
end
|
84
|
+
|
85
|
+
it "idは0を返す" do
|
86
|
+
expect(DummyModel.new.id).to eq(0)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "bodyは'none'を返す" do
|
90
|
+
expect(DummyModel.new.body).to eq('none')
|
91
|
+
end
|
92
|
+
|
93
|
+
it "上書きすることができる" do
|
94
|
+
model = DummyModel.new
|
95
|
+
model.id=1
|
96
|
+
expect(model.id).to eq(1)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
69
100
|
describe :new do
|
70
101
|
|
71
102
|
describe :field do
|
@@ -138,23 +169,21 @@ describe Dymos::Model do
|
|
138
169
|
end
|
139
170
|
end
|
140
171
|
|
141
|
-
describe :
|
172
|
+
describe :key_scheme do
|
142
173
|
it "キー情報" do
|
143
|
-
|
144
|
-
expect(
|
145
|
-
expect(model.global_indexes.first[:key_type]).to eq('HASH')
|
174
|
+
expect(DummyUser.key_scheme.first[:attribute_name]).to eq('id')
|
175
|
+
expect(DummyUser.key_scheme.first[:key_type]).to eq('HASH')
|
146
176
|
|
147
|
-
|
148
|
-
expect(
|
149
|
-
expect(
|
150
|
-
expect(
|
151
|
-
expect(model.global_indexes.last[:key_type]).to eq('RANGE')
|
177
|
+
expect(DummyPost.key_scheme.first[:attribute_name]).to eq('id')
|
178
|
+
expect(DummyPost.key_scheme.first[:key_type]).to eq('HASH')
|
179
|
+
expect(DummyPost.key_scheme.last[:attribute_name]).to eq('timestamp')
|
180
|
+
expect(DummyPost.key_scheme.last[:key_type]).to eq('RANGE')
|
152
181
|
end
|
153
182
|
end
|
154
183
|
|
155
184
|
describe :find do
|
156
185
|
it "ユーザを抽出" do
|
157
|
-
user = DummyUser.get.key(id:'hoge').execute
|
186
|
+
user = DummyUser.get.key(id: 'hoge').execute
|
158
187
|
expect(user.id).to eq('hoge')
|
159
188
|
expect(user.name).to eq('太郎')
|
160
189
|
end
|
@@ -173,7 +202,7 @@ describe Dymos::Model do
|
|
173
202
|
describe :all do
|
174
203
|
it "すべてのユーザを抽出" do
|
175
204
|
users = DummyUser.all
|
176
|
-
expect(users.size).to eq(
|
205
|
+
expect(users.size).to eq(5)
|
177
206
|
end
|
178
207
|
end
|
179
208
|
|
@@ -185,5 +214,58 @@ describe Dymos::Model do
|
|
185
214
|
end
|
186
215
|
end
|
187
216
|
end
|
217
|
+
|
218
|
+
describe "変更検知" do
|
219
|
+
class DummyModel < Dymos::Model
|
220
|
+
field :id, :number, default: 0
|
221
|
+
field :body, :string, default: "none"
|
222
|
+
end
|
223
|
+
|
224
|
+
it "新規モデル" do
|
225
|
+
user = DummyModel.new
|
226
|
+
expect(user.changes).to eq({})
|
227
|
+
expect(user.changed?).to eq(false)
|
228
|
+
user.id = 1
|
229
|
+
expect(user.changed?).to eq(true)
|
230
|
+
expect(user.changes).to eq({"id" => [0, 1]})
|
231
|
+
user.body = "hoge"
|
232
|
+
expect(user.changes).to eq({"id" => [0, 1], "body" => ['none', 'hoge']})
|
233
|
+
end
|
234
|
+
|
235
|
+
describe "DBから引いたモデル" do
|
236
|
+
it "" do
|
237
|
+
user = DummyUser.get.key(id: 'hoge').execute
|
238
|
+
expect(user.changes).to eq({})
|
239
|
+
expect(user.changed?).to eq(false)
|
240
|
+
user.id = 1
|
241
|
+
expect(user.changed?).to eq(true)
|
242
|
+
expect(user.id_changed?).to eq(true)
|
243
|
+
expect(user.changes).to eq({"id" => ["hoge", 1]})
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
describe :persistence do
|
249
|
+
describe "新規モデル" do
|
250
|
+
it do
|
251
|
+
user = DummyUser.new
|
252
|
+
expect(user.new_record?).to eq(true)
|
253
|
+
expect(user.destroyed?).to eq(false)
|
254
|
+
expect(user.persisted?).to eq(false)
|
255
|
+
end
|
256
|
+
|
257
|
+
describe "DBから引いたモデル" do
|
258
|
+
it do
|
259
|
+
user = DummyUser.get.key(id: 'musashi').execute
|
260
|
+
expect(user.new_record?).to eq(false)
|
261
|
+
expect(user.destroyed?).to eq(false)
|
262
|
+
expect(user.persisted?).to eq(true)
|
263
|
+
user.delete
|
264
|
+
expect(user.destroyed?).to eq(true)
|
265
|
+
expect(DummyUser.get.key(id: 'musashi').execute).to eq(nil)
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
188
270
|
end
|
189
271
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
describe Dymos::Query::DeleteItem do
|
2
|
+
before :all do
|
3
|
+
Aws.config[:region] = 'us-west-1'
|
4
|
+
Aws.config[:endpoint] = 'http://localhost:4567'
|
5
|
+
Aws.config[:access_key_id] = 'XXX'
|
6
|
+
Aws.config[:secret_access_key] = 'XXX'
|
7
|
+
|
8
|
+
client = Aws::DynamoDB::Client.new
|
9
|
+
client.delete_table(table_name: 'test_delete_item') if client.list_tables[:table_names].include?('test_delete_item')
|
10
|
+
client.create_table(
|
11
|
+
table_name: 'test_delete_item',
|
12
|
+
attribute_definitions: [
|
13
|
+
{attribute_name: 'id', attribute_type: 'S'},
|
14
|
+
],
|
15
|
+
key_schema: [
|
16
|
+
{attribute_name: 'id', key_type: 'HASH'}
|
17
|
+
],
|
18
|
+
provisioned_throughput: {
|
19
|
+
read_capacity_units: 1,
|
20
|
+
write_capacity_units: 1,
|
21
|
+
})
|
22
|
+
client.put_item(table_name: 'test_delete_item', item: {id: 'hoge', name: '太郎'})
|
23
|
+
client.put_item(table_name: 'test_delete_item', item: {id: 'fuga', count: 0})
|
24
|
+
client.put_item(table_name: 'test_delete_item', item: {id: 'poyo', name: '可奈'})
|
25
|
+
client.put_item(table_name: 'test_delete_item', item: {id: 'piyo', name: '杏奈', count: 10})
|
26
|
+
|
27
|
+
class TestItem < Dymos::Model
|
28
|
+
table :test_delete_item
|
29
|
+
field :id, :string
|
30
|
+
field :name, :string
|
31
|
+
field :count, :string
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
let(:client) { Aws::DynamoDB::Client.new }
|
36
|
+
describe :put_item do
|
37
|
+
describe "クエリ生成" do
|
38
|
+
let(:query) { TestItem.delete.key(id: "hoge") }
|
39
|
+
it :query do
|
40
|
+
expect(query.query).to eq({
|
41
|
+
table_name: "test_delete_item",
|
42
|
+
key: {id: "hoge"},
|
43
|
+
return_values: "ALL_OLD",
|
44
|
+
})
|
45
|
+
end
|
46
|
+
it "成功すると削除したアイテムを返す" do
|
47
|
+
res = query.execute client
|
48
|
+
expect(res.id).to eq("hoge")
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "既存のアイテムを削除" do
|
52
|
+
describe "return_values :ALL_OLD" do
|
53
|
+
it "条件なし" do
|
54
|
+
query = TestItem.delete.key(id: "poyo")
|
55
|
+
res = query.execute client
|
56
|
+
expect(res.id).to eq("poyo")
|
57
|
+
expect(TestItem.get.key(id: "poyo").execute).to eq(nil)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "条件付き" do
|
61
|
+
query = TestItem.delete.key(id: "fuga").expected(count: "== 0")
|
62
|
+
res = query.execute
|
63
|
+
expect(res.id).to eq("fuga")
|
64
|
+
expect(TestItem.get.key(id: "fuga").execute).to eq(nil)
|
65
|
+
end
|
66
|
+
it "条件付き失敗" do
|
67
|
+
query = TestItem.delete.key(id: "piyo").expected(count: "== 1")
|
68
|
+
res = query.execute
|
69
|
+
expect(res).to eq(false)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
@@ -46,6 +46,10 @@ describe Dymos::Query::Scan do
|
|
46
46
|
expect(res.first.metadata).to eq(count: 5, scanned_count: 5, last_evaluated_key: nil, consumed_capacity: nil)
|
47
47
|
end
|
48
48
|
|
49
|
+
|
50
|
+
it :query do
|
51
|
+
expect(TestItem.scan.limit(100).exclusive_start_key('hoge').query).to eq(table_name: "test_get_item", exclusive_start_key:"hoge", limit: 100)
|
52
|
+
end
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dymos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hoshina85
|
@@ -127,8 +127,10 @@ files:
|
|
127
127
|
- lib/dymos/attribute.rb
|
128
128
|
- lib/dymos/command.rb
|
129
129
|
- lib/dymos/model.rb
|
130
|
+
- lib/dymos/persistence.rb
|
130
131
|
- lib/dymos/query/attribute.rb
|
131
132
|
- lib/dymos/query/builder.rb
|
133
|
+
- lib/dymos/query/delete_item.rb
|
132
134
|
- lib/dymos/query/describe.rb
|
133
135
|
- lib/dymos/query/expect.rb
|
134
136
|
- lib/dymos/query/get_item.rb
|
@@ -140,6 +142,7 @@ files:
|
|
140
142
|
- spec/lib/dymos/model_spec.rb
|
141
143
|
- spec/lib/dymos/query/attribute_spec.rb
|
142
144
|
- spec/lib/dymos/query/builder_spec.rb
|
145
|
+
- spec/lib/dymos/query/delete_item_spec.rb
|
143
146
|
- spec/lib/dymos/query/describe_spec.rb
|
144
147
|
- spec/lib/dymos/query/expect_spec.rb
|
145
148
|
- spec/lib/dymos/query/get_item_spec.rb
|
@@ -176,6 +179,7 @@ test_files:
|
|
176
179
|
- spec/lib/dymos/model_spec.rb
|
177
180
|
- spec/lib/dymos/query/attribute_spec.rb
|
178
181
|
- spec/lib/dymos/query/builder_spec.rb
|
182
|
+
- spec/lib/dymos/query/delete_item_spec.rb
|
179
183
|
- spec/lib/dymos/query/describe_spec.rb
|
180
184
|
- spec/lib/dymos/query/expect_spec.rb
|
181
185
|
- spec/lib/dymos/query/get_item_spec.rb
|