dynamodb-api 0.5.0 → 0.6.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
  SHA256:
3
- metadata.gz: 1176f23f9b8202950b14fb9f093a89a0e8a71408b07d1eee64e1cfa2f4771f68
4
- data.tar.gz: '018fe530f3c0df9d3f025154569dd1958b476e1d84051b01091c4dd7f5337c9b'
3
+ metadata.gz: 34f7a13fc8d01e4e3fd6126b892e5bd71484bb19ef77a838a5a02307be3e4530
4
+ data.tar.gz: f1beedbb696099688379ebc381144b601273d0614ddff89fa5466450f4fe56d1
5
5
  SHA512:
6
- metadata.gz: c4da7e234eeff907f7382187281794ae788c57312b3e5d35c2ee9f7b4c2c686153d7111fa8b3633012c5dc6248c7cd41abb5e93ebf094e9d23dfd71a7cd5f270
7
- data.tar.gz: 2a3e960e5d73b46d989ae006f18ecf8c4d5837b1e52d478f0b64c55ea608a04a5e7e3ccb9857e3839525629c9a6b906dc070f9ddcbb307638c5a64a421cd8aa3
6
+ metadata.gz: 589539eca0a48f767afeefecb2eed852f8095c8082bca32d973aa3608327eeb95b6a31c58c1d438a2ff96bac044096960d604799123bd63fc2eec5d6609f3b42
7
+ data.tar.gz: c157d7759fd9d9328f305bebb5ab7800f8d55b083e2686dac1ea07863507dff4e9402ee6bd2936ad17b64d11f94203881f211b4c1dbbdef8327af81094c15fbd
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [0.6.0] - 2018-11-03
8
+ ### Added
9
+ - [#25](https://github.com/walkersumida/dynamodb-api/pull/25) `update` method
10
+ - [#24](https://github.com/walkersumida/dynamodb-api/pull/24) `delete` method
11
+ - [#23](https://github.com/walkersumida/dynamodb-api/pull/23) `query` method
12
+
7
13
  ## [0.5.0] - 2018-09-30
8
14
  ### Added
9
15
  - [#21](https://github.com/walkersumida/dynamodb-api/pull/21) Automatically add Expression Attribute Names
data/README.md CHANGED
@@ -50,12 +50,12 @@ e.g.
50
50
 
51
51
  cars table.
52
52
 
53
- | maker_id(Partition key) | model | release_date(Sort key) | status |
54
- |:---|:---|:---|:---|
55
- |1 |Accord |0.19760508e8 |0 |
56
- |2 |CROWN |0.19550101e8 |0 |
57
- |3 |Model S |0.20120601e8 |0 |
58
- |1 |S2000 |0.19980101e8 |1 |
53
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
54
+ |:---|:---|:---|:---|:---|
55
+ |1 |1 |Accord |0.19760508e8 |0 |
56
+ |2 |2 |CROWN |0.19550101e8 |0 |
57
+ |3 |3 |Model S |0.20120601e8 |0 |
58
+ |4 |1 |S2000 |0.19980101e8 |1 |
59
59
 
60
60
  ### Query
61
61
  https://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#query-instance_method
@@ -63,63 +63,63 @@ https://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#query-instan
63
63
  #### Partition(Hash) key
64
64
 
65
65
  ```ruby
66
- query = Dynamodb::Api::Query.new
66
+ query = Dynamodb::Api.query
67
67
  query.from('cars').index('index_maker_id_release_date').
68
68
  where(['maker_id', '=', 1])
69
69
  items = query.all.items
70
70
  ```
71
71
 
72
- | maker_id(Partition key) | model | release_date(Sort key) | status |
73
- |:---|:---|:---|:---|
74
- |1 |S2000 |0.19980101e8 |1 |
75
- |1 |Accord |0.19760508e8 |0 |
72
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
73
+ |:---|:---|:---|:---|:---|
74
+ |4 |1 |S2000 |0.19980101e8 |1 |
75
+ |1 |1 |Accord |0.19760508e8 |0 |
76
76
 
77
77
  #### Partition key and Sort(Range) key
78
78
 
79
79
  ```ruby
80
- query = Dynamodb::Api::Query.new
80
+ query = Dynamodb::Api.query
81
81
  query.from('cars').index('index_maker_id_release_date').
82
82
  where([['maker_id', '=', 1], ['release_date', '>=', 19_980_101]])
83
83
  items = query.all.items
84
84
  ```
85
85
 
86
- | maker_id(Partition key) | model | release_date(Sort key) | status |
87
- |:---|:---|:---|:---|
88
- |1 |S2000 |0.19980101e8 |1 |
86
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
87
+ |:---|:---|:---|:---|:---|
88
+ |4 |1 |S2000 |0.19980101e8 |1 |
89
89
 
90
90
  #### Sorting
91
91
 
92
92
  ```ruby
93
- query = Dynamodb::Api::Query.new
93
+ query = Dynamodb::Api.query
94
94
  query.from('cars').index('index_maker_id_release_date').
95
95
  where(['maker_id', '=', 1]).
96
96
  order('asc') # default: 'desc'
97
97
  items = query.all.items
98
98
  ```
99
99
 
100
- | maker_id(Partition key) | model | release_date(Sort key) | status |
101
- |:---|:---|:---|:---|
102
- |1 |Accord |0.19760508e8 |0 |
103
- |1 |S2000 |0.19980101e8 |1 |
100
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
101
+ |:---|:---|:---|:---|:---|
102
+ |1 |1 |Accord |0.19760508e8 |0 |
103
+ |4 |1 |S2000 |0.19980101e8 |1 |
104
104
 
105
105
  #### Filter
106
106
 
107
107
  ```ruby
108
- query = Dynamodb::Api::Query.new
108
+ query = Dynamodb::Api.query
109
109
  query.from('cars').index('index_maker_id_release_date').
110
110
  where(['maker_id', '=', 1]).
111
111
  filter('model = :model', ':model': 'S2000')
112
112
  items = query.all.items
113
113
  ```
114
114
 
115
- | maker_id(Partition key) | model | release_date(Sort key) | status |
116
- |:---|:---|:---|:---|
117
- |1 |S2000 |0.19980101e8 |1 |
115
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
116
+ |:---|:---|:---|:---|:---|
117
+ |4 |1 |S2000 |0.19980101e8 |1 |
118
118
 
119
119
  #### Limit
120
120
 
121
121
  ```ruby
122
- query = Dynamodb::Api::Query.new
122
+ query = Dynamodb::Api.query
123
123
  query.from('cars').index('index_maker_id_release_date').
124
124
  where(['maker_id', '=', 1]).
125
125
  order('asc'). # default: 'desc'
@@ -127,9 +127,9 @@ query.from('cars').index('index_maker_id_release_date').
127
127
  items = query.all.items
128
128
  ```
129
129
 
130
- | maker_id(Partition key) | model | release_date(Sort key) | status |
131
- |:---|:---|:---|:---|
132
- |1 |Accord |0.19760508e8 |0 |
130
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
131
+ |:---|:---|:---|:---|:---|
132
+ |1 |1 |Accord |0.19760508e8 |0 |
133
133
 
134
134
  #### Expression Attribute Names
135
135
 
@@ -138,22 +138,59 @@ In `dynamodb-api` , you can omit the special processing by putting `#` at the be
138
138
  Refer to the list of reserved words from [here](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html).
139
139
 
140
140
  ```ruby
141
- query = Dynamodb::Api::Query.new
141
+ query = Dynamodb::Api.query
142
142
  query.from('cars').index('index_maker_id_release_date').
143
143
  where(['maker_id', '=', 1]).
144
144
  filter('#status = :status', ':status': 1)
145
145
  items = query.all.items
146
146
  ```
147
147
 
148
- | maker_id | model | release_date | status |
149
- |:---|:---|:---|:---|
150
- |1 |S2000 |0.19980101e8 |1 |
148
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
149
+ |:---|:---|:---|:---|:---|
150
+ |4 |1 |S2000 |0.19980101e8 |1 |
151
151
 
152
152
  If you don't add `#` to a reserved word, the following error will occur:
153
153
 
154
154
  Aws::DynamoDB::Errors::ValidationException:
155
155
  Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: [reserved word]
156
156
 
157
+ ### Insert
158
+
159
+ ```ruby
160
+ item = { id: '5', maker_id: 1, maker: 'Honda', model: 'NSX', release_date: 19900914 }
161
+ Dynamodb::Api.insert('cars', item)
162
+ ```
163
+
164
+ ### Update
165
+
166
+ ```ruby
167
+ key = { id: '5' }
168
+ value = { new_col: 'new' }
169
+ Dynamodb::Api.update('cars', key, value)
170
+ ```
171
+
172
+ ### Delete
173
+
174
+ ```ruby
175
+ key = { id: '5' }
176
+ Dynamodb::Api.delete('cars', key)
177
+ ```
178
+
179
+ ### Other API operations
180
+
181
+ `client` returns the `<Aws::DynamoDB::Client>` .
182
+ So, you can use all [API operations](https://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html).
183
+
184
+ ```ruby
185
+ client = Dynamodb::Api::Adapter.client # <Aws::DynamoDB::Client>
186
+
187
+ # e.g.
188
+ client.create_backup(
189
+ table_name: 'TableName', # required
190
+ backup_name: 'BackupName', # required
191
+ )
192
+ ```
193
+
157
194
  ## Development
158
195
 
159
196
  - Run `docker-compose up` to run the dynamodb_local.
data/bin/console CHANGED
@@ -11,4 +11,17 @@ require "dynamodb/api"
11
11
  # Pry.start
12
12
 
13
13
  require "irb"
14
+
15
+ ENV['ACCESS_KEY'] ||= 'abcd'
16
+ ENV['SECRET_KEY'] ||= '1234'
17
+
18
+ Aws.config.update(
19
+ region: 'ap-northeast-1',
20
+ credentials: Aws::Credentials.new(ENV['ACCESS_KEY'], ENV['SECRET_KEY'])
21
+ )
22
+
23
+ Dynamodb::Api.config do |config|
24
+ config.endpoint = 'http://0.0.0.0:8000'
25
+ end
26
+
14
27
  IRB.start(__FILE__)
data/lib/dynamodb/api.rb CHANGED
@@ -18,7 +18,9 @@ require 'dynamodb/api/relation/expression_attribute_names'
18
18
  require 'dynamodb/api/relation/limit_clause'
19
19
  require 'dynamodb/api/put/item'
20
20
  require 'dynamodb/api/delete/tables'
21
+ require 'dynamodb/api/delete/item'
21
22
  require 'dynamodb/api/map/operator'
23
+ require 'dynamodb/api/update/item'
22
24
 
23
25
  module Dynamodb
24
26
  module Api # :nodoc:
@@ -36,9 +38,21 @@ module Dynamodb
36
38
  Delete::Tables.delete_tables
37
39
  end
38
40
 
41
+ def query
42
+ Query.new
43
+ end
44
+
39
45
  def insert(table_name, value)
40
46
  # TODO: BatchWriteItem
41
47
  Put::Item.put_item(value, table_name)
42
48
  end
49
+
50
+ def update(table_name, key, value)
51
+ Update::Item.new.update_item(key, value, table_name)
52
+ end
53
+
54
+ def delete(table_name, key)
55
+ Delete::Item.delete_item(key, table_name)
56
+ end
43
57
  end
44
58
  end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ module Delete
6
+ class Item # :nodoc:
7
+ def self.delete_item(key, table_name)
8
+ client = Adapter.client
9
+ client.delete_item(key: key, table_name: table_name)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ module Update
6
+ class Item # :nodoc:
7
+ def update_item(key, cols, table_name)
8
+ @key = key
9
+ @cols = cols
10
+ @table_name = table_name
11
+
12
+ client = Adapter.client
13
+ client.update_item(build_update_clause)
14
+ end
15
+
16
+ private
17
+
18
+ def build_update_expression
19
+ str = @cols.each_with_object([]) do |(k, _v), ary|
20
+ ary << "##{k} = :#{k}"
21
+ end.join(', ')
22
+ "SET #{str}"
23
+ end
24
+
25
+ def build_expression_attribute_names
26
+ @cols.each_with_object({}) do |(k, _v), h|
27
+ h["##{k}"] = k
28
+ end
29
+ end
30
+
31
+ def build_expression_attribute_values
32
+ @cols.each_with_object({}) do |(k, v), h|
33
+ h[":#{k}"] = v
34
+ end
35
+ end
36
+
37
+ def build_update_clause
38
+ {
39
+ key: @key, table_name: @table_name,
40
+ update_expression: build_update_expression,
41
+ expression_attribute_names: build_expression_attribute_names,
42
+ expression_attribute_values: build_expression_attribute_values,
43
+ }
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  module Dynamodb
2
2
  module Api
3
- VERSION = '0.5.0'.freeze
3
+ VERSION = '0.6.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamodb-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - WalkerSumida
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-30 00:00:00.000000000 Z
11
+ date: 2018-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -152,6 +152,7 @@ files:
152
152
  - lib/dynamodb/api/adapter.rb
153
153
  - lib/dynamodb/api/config.rb
154
154
  - lib/dynamodb/api/config/options.rb
155
+ - lib/dynamodb/api/delete/item.rb
155
156
  - lib/dynamodb/api/delete/tables.rb
156
157
  - lib/dynamodb/api/map/operator.rb
157
158
  - lib/dynamodb/api/put/item.rb
@@ -166,6 +167,7 @@ files:
166
167
  - lib/dynamodb/api/relation/query_methods.rb
167
168
  - lib/dynamodb/api/relation/select_clause.rb
168
169
  - lib/dynamodb/api/relation/where_clause.rb
170
+ - lib/dynamodb/api/update/item.rb
169
171
  - lib/dynamodb/api/version.rb
170
172
  homepage: https://github.com/walkersumida/dynamodb-api
171
173
  licenses: