dynamodb_model 1.0.0 → 1.0.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/CHANGELOG.md +3 -0
- data/README.md +22 -2
- data/lib/dynamodb_model/db_config.rb +30 -1
- data/lib/dynamodb_model/item.rb +1 -1
- data/lib/dynamodb_model/migration/dsl.rb +1 -1
- data/lib/dynamodb_model/migration/generator.rb +1 -1
- data/lib/dynamodb_model/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 695afa2fc15607d068003af7eab703194659ea0f
|
4
|
+
data.tar.gz: 4a0375284bf1565b781cd5fac752730e4fe7ddb4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d26a55e6f07ae80457927212586ecd0fe1e3a5e7529e29c70db8b948d63c63bef07b75977dcdea0f52dbe3998bbd6eb1396758b58c84f0b3d3d152368a40fdbe
|
7
|
+
data.tar.gz: e10afd1105fce09364cdd41bfaa8bba11b43e489eaf63b082bd8c199726e87da56cc6e2fb29c12f969f2e7f4bf45e9d5215430f423505cde4cc97abf199eafd7
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,9 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [1.0.1]
|
7
|
+
- Check dynamodb local is running when configured
|
8
|
+
|
6
9
|
## [1.0.0]
|
7
10
|
- LSI support
|
8
11
|
- automatically infer table_name
|
data/README.md
CHANGED
@@ -69,6 +69,26 @@ posts = Post.scan(options)
|
|
69
69
|
posts # Array of Post items. [Post.new, Post.new, ...]
|
70
70
|
```
|
71
71
|
|
72
|
+
### Query
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
posts = Post.query(
|
76
|
+
index_name: 'category-index',
|
77
|
+
expression_attribute_names: { "#category_name" => "category" },
|
78
|
+
expression_attribute_values: { ":category_value" => "Entertainment" },
|
79
|
+
key_condition_expression: "#category_name = :category_value",
|
80
|
+
)
|
81
|
+
posts # Array of Post items. [Post.new, Post.new, ...]
|
82
|
+
```
|
83
|
+
|
84
|
+
### Where
|
85
|
+
|
86
|
+
The where could be prettied up. Appreciate any pull requests.
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
Post.where({category: "Drama"}, {index_name: "category-index"})
|
90
|
+
```
|
91
|
+
|
72
92
|
Examples are also in [item_spec.rb](spec/lib/dynamodb_model/item_spec.rb).
|
73
93
|
|
74
94
|
## Migration Support
|
@@ -115,7 +135,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
115
135
|
|
116
136
|
Bug reports and pull requests are welcome on GitHub at https://github.com/tongueroo/dynamodb_model.
|
117
137
|
|
118
|
-
TODO
|
138
|
+
### TODO
|
119
139
|
|
120
|
-
*
|
140
|
+
* improve Post.where. Something like `Post.index_name("user_id").where(category_name: "Entertainment")` would be nice.
|
121
141
|
* implement `post.update` with `db.update_item` in a Ruby-ish way
|
@@ -24,11 +24,40 @@ module DynamodbModel::DbConfig
|
|
24
24
|
|
25
25
|
config = db_config
|
26
26
|
endpoint = ENV['DYNAMODB_ENDPOINT'] || config['endpoint']
|
27
|
-
|
27
|
+
check_dynamodb_local!(endpoint)
|
28
28
|
|
29
|
+
Aws.config.update(endpoint: endpoint) if endpoint
|
29
30
|
@@db ||= Aws::DynamoDB::Client.new
|
30
31
|
end
|
31
32
|
|
33
|
+
# When endoint has been configured to point at dynamodb local: localhost:8000
|
34
|
+
# check if port 8000 is listening and timeout quickly. Or else it takes a
|
35
|
+
# for DynamoDB local to time out, about 10 seconds...
|
36
|
+
# This wastes less of the users time.
|
37
|
+
def check_dynamodb_local!(endpoint)
|
38
|
+
return unless endpoint && endpoint.include?("8000")
|
39
|
+
|
40
|
+
open = port_open?("127.0.0.1", 8000, 0.2)
|
41
|
+
unless open
|
42
|
+
raise "You have configured your app to use DynamoDB local, but it is not running. Please start DynamoDB local. Example: brew cask install dynamodb-local && dynamodb-local"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Thanks: https://gist.github.com/ashrithr/5305786
|
47
|
+
def port_open?(ip, port, seconds=1)
|
48
|
+
# => checks if a port is open or not
|
49
|
+
Timeout::timeout(seconds) do
|
50
|
+
begin
|
51
|
+
TCPSocket.new(ip, port).close
|
52
|
+
true
|
53
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, SocketError
|
54
|
+
false
|
55
|
+
end
|
56
|
+
end
|
57
|
+
rescue Timeout::Error
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
32
61
|
# useful for specs
|
33
62
|
def db=(db)
|
34
63
|
@@db = db
|
data/lib/dynamodb_model/item.rb
CHANGED
@@ -156,7 +156,7 @@ module DynamodbModel
|
|
156
156
|
# translates to
|
157
157
|
#
|
158
158
|
# resp = db.query(
|
159
|
-
# table_name: "
|
159
|
+
# table_name: "demo-dev-post",
|
160
160
|
# index_name: 'category-index',
|
161
161
|
# expression_attribute_names: { "#category_name" => "category" },
|
162
162
|
# expression_attribute_values: { ":category_value" => category },
|
@@ -159,7 +159,7 @@ class DynamodbModel::Migration
|
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
# >> resp = Post.db.describe_table(table_name: "
|
162
|
+
# >> resp = Post.db.describe_table(table_name: "demo-dev-posts")
|
163
163
|
# >> resp.table.attribute_definitions.map(&:to_h)
|
164
164
|
# => [{:attribute_name=>"id", :attribute_type=>"S"}]
|
165
165
|
def gsi_attribute_definitions
|