ocean-dynamo 1.3.0 → 1.3.1
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/LICENSE +13 -0
- data/README.rdoc +16 -36
- data/lib/ocean-dynamo/attributes.rb +1 -1
- data/lib/ocean-dynamo/version.rb +1 -1
- metadata +4 -4
- data/MIT-LICENSE +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fb7536da67529e55053f4d69555c8da40c90caf
|
4
|
+
data.tar.gz: 05bd66e0d69782c47bdcc8f7c9dff93ee2ddcd64
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24cef1a99d5517f5ef77f93502b355e012faa1bff8b8fa1f04368e362e0c55fb849cee1db90119b4badace1497f17aaa9a0ca23f74e7e06f30c5ac04dc9f0263
|
7
|
+
data.tar.gz: ccf031cc32f7807a6a1231f6e83b816e813657e3352a4b0b302b7b458fe60457367f674d2567cfdca64841c785e11628239de370402225098ff6eb7657e3502b
|
data/LICENSE
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Copyright 2016 Peter Bengtson
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.rdoc
CHANGED
@@ -30,6 +30,8 @@ OceanDynamo is fully usable as an ActiveModel and can be used by Rails
|
|
30
30
|
controllers. Thanks to its structural similarity to ActiveRecord, OceanDynamo works
|
31
31
|
with FactoryGirl.
|
32
32
|
|
33
|
+
OceanDynamo supports optimistic record locking via a combination of DynamoDB conditional
|
34
|
+
writes and atomic updates. This is activated by default.
|
33
35
|
|
34
36
|
=== Current State
|
35
37
|
|
@@ -48,14 +50,11 @@ with FactoryGirl.
|
|
48
50
|
|
49
51
|
=== Current use
|
50
52
|
|
51
|
-
OceanDynamo is used as a central component in Ocean, a Rails framework and development
|
52
|
-
pipeline for creating massively scalable HATEOAS microservice
|
53
|
+
OceanDynamo is used as a central component in Ocean, a Rails framework and development,
|
54
|
+
testing, and production pipeline for creating massively scalable HATEOAS microservice
|
55
|
+
SOAs in the cloud.
|
53
56
|
* http://wiki.oceanframework.net
|
54
57
|
|
55
|
-
Ocean uses OceanDynamo to implement highly scalable job queues and authentication.
|
56
|
-
It will be used increasingly as features are added to OceanDynamo and will eventually
|
57
|
-
replace all ActiveRecord tables in Ocean.
|
58
|
-
|
59
58
|
However, OceanDynamo can of course also be used stand-alone.
|
60
59
|
|
61
60
|
|
@@ -139,6 +138,15 @@ value will return the empty string, <tt>""</tt>.
|
|
139
138
|
...
|
140
139
|
...
|
141
140
|
end
|
141
|
+
|
142
|
+
Tip: you might want to use the following idiom when declaring a +dynamo_schema+. It is used everywhere in Ocean:
|
143
|
+
|
144
|
+
dynamo_schema(:id, table_name_suffix: Api.basename_suffix,
|
145
|
+
create: Rails.env != "production") do
|
146
|
+
...
|
147
|
+
end
|
148
|
+
|
149
|
+
This will auto-create the DynamoDB table in all environments except production, and it will also add a suffix to the table name in order to prevent tests from colliding. Cf +Api.basename_suffix+ in the +ocean-rails+ gem for more information.
|
142
150
|
|
143
151
|
== +has_many+ and +belongs_to+
|
144
152
|
|
@@ -176,6 +184,7 @@ is required as the Topic class itself has a +belongs_to+ relation and thus has
|
|
176
184
|
a composite key. This must be declared in the child class as it needs to know
|
177
185
|
how to retrieve its parent.
|
178
186
|
|
187
|
+
|
179
188
|
=== Restrictions
|
180
189
|
|
181
190
|
Restrictions for +belongs_to+ tables:
|
@@ -190,6 +199,7 @@ Restrictions for +has_many+ tables:
|
|
190
199
|
These restrictions allow OceanDynamo to implement the +has_many+ / +belongs_to+
|
191
200
|
relation in a very efficient and massively scalable way.
|
192
201
|
|
202
|
+
|
193
203
|
=== Implementation
|
194
204
|
|
195
205
|
+belongs_to+ claims the range key and uses it to store its own id, which normally
|
@@ -358,36 +368,6 @@ With DynamoDB Local running, you should now be able to do
|
|
358
368
|
|
359
369
|
All tests should pass.
|
360
370
|
|
361
|
-
|
362
|
-
=== Cleaning up the DB
|
363
|
-
|
364
|
-
You might want to add the following to your spec_helper.rb file, before the +RSpec.configure+
|
365
|
-
block:
|
366
|
-
|
367
|
-
# DynamoDB table cleaner
|
368
|
-
CHEF_ENV = "master" unless defined?(CHEF_ENV)
|
369
|
-
regexp = Regexp.new("^.+_#{CHEF_ENV}_[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}-[0-9]{1,3}_test$")
|
370
|
-
cleaner = lambda {
|
371
|
-
c = Aws::DynamoDB::Client.new
|
372
|
-
c.list_tables.table_names.each do |t|
|
373
|
-
begin
|
374
|
-
c.delete_table({table_name: t}) if t =~ regexp
|
375
|
-
rescue Aws::DynamoDB::Errors::LimitExceededException
|
376
|
-
sleep 1
|
377
|
-
retry
|
378
|
-
end
|
379
|
-
end
|
380
|
-
}
|
381
|
-
|
382
|
-
Then, inside the +RSpec.configure+ block:
|
383
|
-
|
384
|
-
config.before(:suite) { cleaner.call }
|
385
|
-
config.after(:suite) { cleaner.call }
|
386
|
-
|
387
|
-
This will remove only those test tables created by the specs on this particular machine and
|
388
|
-
environment. This is safe even on AWS and in parallel with other machines.
|
389
|
-
|
390
|
-
|
391
371
|
== Rails console
|
392
372
|
|
393
373
|
The Rails console is available from the built-in dummy application:
|
@@ -124,7 +124,7 @@ module OceanDynamo
|
|
124
124
|
if fields.has_key?(attr_name)
|
125
125
|
@attributes[attr_name]
|
126
126
|
else
|
127
|
-
raise ActiveModel::MissingAttributeError, "can't read unknown attribute '#{
|
127
|
+
raise ActiveModel::MissingAttributeError, "can't read unknown attribute '#{attr_name}"
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
data/lib/ocean-dynamo/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocean-dynamo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Bengtson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -158,7 +158,7 @@ executables: []
|
|
158
158
|
extensions: []
|
159
159
|
extra_rdoc_files: []
|
160
160
|
files:
|
161
|
-
-
|
161
|
+
- LICENSE
|
162
162
|
- README.rdoc
|
163
163
|
- Rakefile
|
164
164
|
- config/routes.rb
|
@@ -189,7 +189,7 @@ files:
|
|
189
189
|
- lib/ocean-dynamo/version.rb
|
190
190
|
homepage: https://github.com/OceanDev/ocean-dynamo
|
191
191
|
licenses:
|
192
|
-
-
|
192
|
+
- Apache-2.0
|
193
193
|
metadata: {}
|
194
194
|
post_install_message:
|
195
195
|
rdoc_options: []
|
data/MIT-LICENSE
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Copyright 2013 Peter Bengtson
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
a copy of this software and associated documentation files (the
|
5
|
-
"Software"), to deal in the Software without restriction, including
|
6
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit persons to whom the Software is furnished to do so, subject to
|
9
|
-
the following conditions:
|
10
|
-
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
included in all copies or substantial portions of the Software.
|
13
|
-
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|