toy-dynamo 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -11
- data/lib/toy/dynamo/schema.rb +7 -3
- data/lib/toy/dynamo/version.rb +1 -1
- data/toy-dynamo.gemspec +2 -2
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6531d75a60cddac48bf7a08e651e992173ff8d6b
|
4
|
+
data.tar.gz: d232e86af63d1ebb1fd96b64f5c0e7f94862c751
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 572df43d197d7882c53f726b92e9235c8b8746111582698248ac8610bba044ae21e1285e29ec4ef7ec324d8a5717c314cabc7b5c709e74e7a70a603fcad6afe0
|
7
|
+
data.tar.gz: 9d9bdc14bbef5779f473a5add745214282508f309a794d6b5d6d411faa51c275e3da66b279733b5f0a7dad3e8b0640ef0c8a1fe05370e7be19e0553db32cbe5e
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
## Overview
|
2
|
-
toy-dynamo is an ORM for AWS DynamoDB. It is an extension to [toystore](https://github.com/jnunemaker/toystore) that provides an ActiveModel based ORM for schema-less
|
2
|
+
toy-dynamo is an ORM for AWS DynamoDB. It is an extension to [toystore](https://github.com/jnunemaker/toystore) that provides an ActiveModel based ORM for schema-less data stores.
|
3
3
|
|
4
4
|
> **Toy::Object** comes with all the goods you need for plain old ruby objects -- attributes, dirty attribute tracking, equality, inheritance, serialization, cloning, logging and pretty inspecting.
|
5
5
|
|
@@ -21,13 +21,13 @@ class Comment
|
|
21
21
|
|
22
22
|
adapter :dynamo, Toy::Dynamo::Adapter.default_client, {:model => self}
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
dynamo_table do
|
25
|
+
hash_key :thread_guid
|
26
|
+
range_key :comment_guid
|
27
|
+
local_secondary_index :posted_by
|
28
|
+
read_provision 50
|
29
29
|
write_provision 10
|
30
|
-
|
30
|
+
end
|
31
31
|
|
32
32
|
attribute :thread_guid, String
|
33
33
|
attribute :comment_guid, String, :default => lambda { SimpleUUID::UUID.new.to_guid }
|
@@ -90,10 +90,10 @@ end
|
|
90
90
|
* **Init a UUID value**
|
91
91
|
* attribute :user_guid, String, :default => lambda { SimpleUUID::UUID.new.to_guid }
|
92
92
|
* **Use with fake_dynamo**
|
93
|
-
* adapter :dynamo,
|
93
|
+
* adapter :dynamo, Toy::Dynamo::Adapter.default_client({
|
94
94
|
:use_ssl => false,
|
95
|
-
:
|
96
|
-
:
|
95
|
+
:endpoint => 'localhost',
|
96
|
+
:port => 4567
|
97
97
|
}), {:model => self}
|
98
98
|
* **Create table**
|
99
99
|
* rake ddb:create CLASS=User
|
@@ -112,7 +112,10 @@ end
|
|
112
112
|
|
113
113
|
## TODO
|
114
114
|
* raise error if trying to use an attribute that wasn't 'select'ed (defaulting to selecting all attributes which loads everything with an extra read)
|
115
|
-
* lambdas for table_name (for dynamic table names)
|
116
115
|
* string and number sets (mostly for scans)
|
117
116
|
* use MAX_ITEM_SIZE (64kb)
|
117
|
+
* fix binary data storage support
|
118
|
+
* add compression (gzip/lzo) => binary
|
119
|
+
* support some sort of rolling tables (for time series type tables)
|
120
|
+
* cross table range queries
|
118
121
|
|
data/lib/toy/dynamo/schema.rb
CHANGED
@@ -162,15 +162,19 @@ module Toy
|
|
162
162
|
end
|
163
163
|
|
164
164
|
def validate_key_schema
|
165
|
-
if
|
165
|
+
if @dynamo_table.schema_loaded_from_dynamo[:table][:key_schema].sort_by { |k| k[:key_type] } != table_schema[:key_schema].sort_by { |k| k[:key_type] })
|
166
166
|
raise ArgumentError, "It appears your key schema (Hash Key/Range Key) have changed from the table definition. Rebuilding the table is necessary."
|
167
167
|
end
|
168
168
|
|
169
|
-
if
|
169
|
+
if @dynamo_table.schema_loaded_from_dynamo[:table][:attribute_definitions].sort_by { |k| k[:attribute_name] } != table_schema[:attribute_definitions].sort_by { |k| k[:attribute_name] }
|
170
170
|
raise ArgumentError, "It appears your attribute definition (types?) have changed from the table definition. Rebuilding the table is necessary."
|
171
171
|
end
|
172
|
+
|
173
|
+
if @dynamo_table.schema_loaded_from_dynamo[:table][:local_secondary_indexes].blank? != table_schema[:local_secondary_indexes].blank?
|
174
|
+
raise ArgumentError, "It appears your local secondary indexes have changed from the table definition. Rebuilding the table is necessary."
|
175
|
+
end
|
172
176
|
|
173
|
-
if (@dynamo_table.schema_loaded_from_dynamo[:table][:local_secondary_indexes].dup.collect {|i| i.delete_if{|k, v| [:index_size_bytes, :item_count].include?(k) }; i }.sort_by { |lsi| lsi[:index_name] } != table_schema[:local_secondary_indexes].sort_by { |lsi| lsi[:index_name] })
|
177
|
+
if @dynamo_table.schema_loaded_from_dynamo[:table][:local_secondary_indexes] && (@dynamo_table.schema_loaded_from_dynamo[:table][:local_secondary_indexes].dup.collect {|i| i.delete_if{|k, v| [:index_size_bytes, :item_count].include?(k) }; i }.sort_by { |lsi| lsi[:index_name] } != table_schema[:local_secondary_indexes].sort_by { |lsi| lsi[:index_name] })
|
174
178
|
raise ArgumentError, "It appears your local secondary indexes have changed from the table definition. Rebuilding the table is necessary."
|
175
179
|
end
|
176
180
|
|
data/lib/toy/dynamo/version.rb
CHANGED
data/toy-dynamo.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Toy::Dynamo::VERSION
|
9
9
|
spec.authors = ["Cary Dunn"]
|
10
10
|
spec.email = ["cary.dunn@gmail.com"]
|
11
|
-
spec.description = %q{DynamoDB
|
12
|
-
spec.summary = %q{DynamoDB ORM - extension to toystore}
|
11
|
+
spec.description = %q{DynamoDB extension to toystore. Provides an ActiveModel based ORM for AWS DynamoDB.}
|
12
|
+
spec.summary = %q{ActiveModel based DynamoDB ORM - extension to toystore}
|
13
13
|
spec.homepage = "https://github.com/cdunn/toy-dynamo"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toy-dynamo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cary Dunn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,7 +66,8 @@ dependencies:
|
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.9'
|
69
|
-
description: DynamoDB
|
69
|
+
description: DynamoDB extension to toystore. Provides an ActiveModel based ORM for
|
70
|
+
AWS DynamoDB.
|
70
71
|
email:
|
71
72
|
- cary.dunn@gmail.com
|
72
73
|
executables: []
|
@@ -121,5 +122,5 @@ rubyforge_project:
|
|
121
122
|
rubygems_version: 2.0.0
|
122
123
|
signing_key:
|
123
124
|
specification_version: 4
|
124
|
-
summary: DynamoDB ORM - extension to toystore
|
125
|
+
summary: ActiveModel based DynamoDB ORM - extension to toystore
|
125
126
|
test_files: []
|