aws-record 2.0.2 → 2.1.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1183f72d5c4a9eb76cce79e3dc780651d33840a8
|
4
|
+
data.tar.gz: 9b003057c87a84aca97b35e1bbeb2c92f873cb53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 641f8d63bd27d4c77725cf09c67260e7ea46d11b1502778c180fdb356fd987ae4ded2267428f4466bcf8412aefcf57135a3ea56383fe017af076e67573af6daa
|
7
|
+
data.tar.gz: 6cd6d4756195610a012767c3f7a9b5a7818ab931a5c0b78ab47b8a895963a7378d90e38ee829f45399826e1648a7b78391b61d9be0fe70155933635625c3f0e6
|
@@ -135,6 +135,70 @@ module Aws
|
|
135
135
|
@data.dirty?
|
136
136
|
end
|
137
137
|
|
138
|
+
# Returns +true+ if the model is not new and has not been deleted, +false+ otherwise.
|
139
|
+
#
|
140
|
+
# @example
|
141
|
+
# class Model
|
142
|
+
# include Aws::Record
|
143
|
+
# integer_attr :id, hash_key: true
|
144
|
+
# string_attr :name
|
145
|
+
# end
|
146
|
+
#
|
147
|
+
# model = Model.new
|
148
|
+
# model.persisted? # => false
|
149
|
+
# model.save
|
150
|
+
# model.persisted? # => true
|
151
|
+
# model.delete!
|
152
|
+
# model.persisted? # => false
|
153
|
+
#
|
154
|
+
# @return [Boolean] +true+ if the model is not new and has not been deleted, +false+
|
155
|
+
# otherwise.
|
156
|
+
def persisted?
|
157
|
+
@data.persisted?
|
158
|
+
end
|
159
|
+
|
160
|
+
# Returns +true+ if the model is newly initialized, +false+ otherwise.
|
161
|
+
#
|
162
|
+
# @example
|
163
|
+
# class Model
|
164
|
+
# include Aws::Record
|
165
|
+
# integer_attr :id, hash_key: true
|
166
|
+
# string_attr :name
|
167
|
+
# end
|
168
|
+
#
|
169
|
+
# model = Model.new
|
170
|
+
# model.new_record? # => true
|
171
|
+
# model.save
|
172
|
+
# model.new_record? # => false
|
173
|
+
#
|
174
|
+
# @return [Boolean] +true+ if the model is newly initialized, +false+
|
175
|
+
# otherwise.
|
176
|
+
def new_record?
|
177
|
+
@data.new_record?
|
178
|
+
end
|
179
|
+
|
180
|
+
# Returns +true+ if the model has been destroyed, +false+ otherwise.
|
181
|
+
#
|
182
|
+
# @example
|
183
|
+
# class Model
|
184
|
+
# include Aws::Record
|
185
|
+
# integer_attr :id, hash_key: true
|
186
|
+
# string_attr :name
|
187
|
+
# end
|
188
|
+
#
|
189
|
+
# model = Model.new
|
190
|
+
# model.destroyed? # => false
|
191
|
+
# model.save
|
192
|
+
# model.destroyed? # => false
|
193
|
+
# model.delete!
|
194
|
+
# model.destroyed? # => true
|
195
|
+
#
|
196
|
+
# @return [Boolean] +true+ if the model has been destroyed, +false+
|
197
|
+
# otherwise.
|
198
|
+
def destroyed?
|
199
|
+
@data.destroyed?
|
200
|
+
end
|
201
|
+
|
138
202
|
# Fetches attributes for this instance of an item from Amazon DynamoDB
|
139
203
|
# using its primary key and the +find(*)+ class method.
|
140
204
|
#
|
@@ -23,8 +23,13 @@ module Aws
|
|
23
23
|
@model_attributes = model_attributes
|
24
24
|
@track_mutations = opts[:track_mutations]
|
25
25
|
@track_mutations = true if opts[:track_mutations].nil?
|
26
|
+
@new_record = true
|
27
|
+
@destroyed = false
|
28
|
+
|
26
29
|
populate_default_values
|
27
30
|
end
|
31
|
+
|
32
|
+
attr_accessor :new_record, :destroyed
|
28
33
|
|
29
34
|
def get_attribute(name)
|
30
35
|
@model_attributes.attribute_for(name).type_cast(@data[name])
|
@@ -34,6 +39,18 @@ module Aws
|
|
34
39
|
@data[name] = value
|
35
40
|
end
|
36
41
|
|
42
|
+
def new_record?
|
43
|
+
@new_record
|
44
|
+
end
|
45
|
+
|
46
|
+
def destroyed?
|
47
|
+
@destroyed
|
48
|
+
end
|
49
|
+
|
50
|
+
def persisted?
|
51
|
+
!(new_record? || destroyed?)
|
52
|
+
end
|
53
|
+
|
37
54
|
def raw_value(name)
|
38
55
|
@data[name]
|
39
56
|
end
|
@@ -81,6 +81,109 @@ module Aws
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
|
85
|
+
# Deletes the item instance that matches the key values of this item
|
86
|
+
# instance in Amazon DynamoDB.
|
87
|
+
#
|
88
|
+
# @example Usage Example
|
89
|
+
# class MyModel
|
90
|
+
# include Aws::Record
|
91
|
+
# integer_attr :uuid, hash_key: true
|
92
|
+
# string_attr :name, range_key: true
|
93
|
+
# integer_attr :age
|
94
|
+
# float_attr :height
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# model = MyModel.new(id: 4, name: "John", age: 4, height: 70.5)
|
98
|
+
# model.age # => 4
|
99
|
+
# model.height # => 70.5
|
100
|
+
# model.save
|
101
|
+
# model.dirty? # => false
|
102
|
+
#
|
103
|
+
# model.assign_attributes(age: 5, height: 150.75)
|
104
|
+
# model.age # => 5
|
105
|
+
# model.height # => 150.75
|
106
|
+
# model.dirty? # => true
|
107
|
+
#
|
108
|
+
#
|
109
|
+
# @param [Hash] opts
|
110
|
+
def assign_attributes(opts)
|
111
|
+
opts.each do |field, new_value|
|
112
|
+
field = field.to_sym
|
113
|
+
setter = "#{field}="
|
114
|
+
raise ArgumentError.new "Invalid field: #{field} for model" unless respond_to?(setter)
|
115
|
+
public_send(setter, new_value)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Mass assigns the attributes to the model and then performs a save
|
120
|
+
#
|
121
|
+
# You can use the +:force+ option to perform a simple put/overwrite
|
122
|
+
# without conditional validation or update logic.
|
123
|
+
#
|
124
|
+
# Note that aws-record allows you to change your model's key values,
|
125
|
+
# but this will be interpreted as persisting a new item to your DynamoDB
|
126
|
+
# table
|
127
|
+
#
|
128
|
+
# @example Usage Example
|
129
|
+
# class MyModel
|
130
|
+
# include Aws::Record
|
131
|
+
# integer_attr :uuid, hash_key: true
|
132
|
+
# string_attr :name, range_key: true
|
133
|
+
# integer_attr :age
|
134
|
+
# float_attr :height
|
135
|
+
# end
|
136
|
+
#
|
137
|
+
# model = MyModel.new(id: 4, name: "John", age: 4, height: 70.5)
|
138
|
+
# model.age # => 4
|
139
|
+
# model.height # => 70.5
|
140
|
+
# model.save
|
141
|
+
# model.dirty? # => false
|
142
|
+
#
|
143
|
+
# model.update(age: 5, height: 150.75)
|
144
|
+
# model.age # => 5
|
145
|
+
# model.height # => 150.75
|
146
|
+
# model.dirty? # => false
|
147
|
+
#
|
148
|
+
#
|
149
|
+
# @param [Hash] new_param, contains the new parameters for the model
|
150
|
+
#
|
151
|
+
# @param [Hash] opts
|
152
|
+
# @option opts [Boolean] :force if true, will save as a put operation and
|
153
|
+
# overwrite any existing item on the remote end. Otherwise, and by
|
154
|
+
# default, will either perform a conditional put or an update call.
|
155
|
+
# @return false if the record is invalid as defined by an attempt to call
|
156
|
+
# +valid?+ on this item, if that method exists. Otherwise, returns client
|
157
|
+
# call return value.
|
158
|
+
def update(new_params, opts = {})
|
159
|
+
assign_attributes(new_params)
|
160
|
+
save(opts)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Updates model attributes and validates new values
|
164
|
+
#
|
165
|
+
# You can use the +:force+ option to perform a simple put/overwrite
|
166
|
+
# without conditional validation or update logic.
|
167
|
+
#
|
168
|
+
# Note that aws-record allows you to change your model's key values,
|
169
|
+
# but this will be interpreted as persisting a new item to your DynamoDB
|
170
|
+
# table
|
171
|
+
#
|
172
|
+
# @param [Hash] new_param, contains the new parameters for the model
|
173
|
+
#
|
174
|
+
# @param [Hash] opts
|
175
|
+
# @option opts [Boolean] :force if true, will save as a put operation and
|
176
|
+
# overwrite any existing item on the remote end. Otherwise, and by
|
177
|
+
# default, will either perform a conditional put or an update call.
|
178
|
+
# @return The update mode if the update is successful
|
179
|
+
#
|
180
|
+
# @raise [Aws::Record::Errors::ValidationError] if any new values
|
181
|
+
# violate the models validations.
|
182
|
+
def update!(new_params, opts = {})
|
183
|
+
assign_attributes(new_params)
|
184
|
+
save!(opts)
|
185
|
+
end
|
186
|
+
|
84
187
|
# Deletes the item instance that matches the key values of this item
|
85
188
|
# instance in Amazon DynamoDB. Uses the
|
86
189
|
# {http://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#delete_item-instance_method Aws::DynamoDB::Client#delete_item}
|
@@ -90,7 +193,7 @@ module Aws
|
|
90
193
|
table_name: self.class.table_name,
|
91
194
|
key: key_values
|
92
195
|
)
|
93
|
-
true
|
196
|
+
self.instance_variable_get("@data").destroyed = true
|
94
197
|
end
|
95
198
|
|
96
199
|
private
|
@@ -151,6 +254,10 @@ module Aws
|
|
151
254
|
)
|
152
255
|
end
|
153
256
|
end
|
257
|
+
data = self.instance_variable_get("@data")
|
258
|
+
data.destroyed = false
|
259
|
+
data.new_record = false
|
260
|
+
true
|
154
261
|
end
|
155
262
|
|
156
263
|
def _build_item_for_save
|
@@ -382,6 +489,7 @@ module Aws
|
|
382
489
|
data = record.instance_variable_get("@data")
|
383
490
|
attributes.attributes.each do |name, attr|
|
384
491
|
data.set_attribute(name, attr.extract(resp.item))
|
492
|
+
data.new_record = false
|
385
493
|
end
|
386
494
|
record
|
387
495
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aws-record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amazon Web Services
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-dynamodb
|