dynamodb-api 0.4.0 → 0.4.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/.travis.yml +6 -0
- data/Gemfile.lock +1 -1
- data/README.md +8 -3
- data/docker-compose.yml +6 -0
- data/lib/dynamodb/api.rb +11 -0
- data/lib/dynamodb/api/adapter.rb +10 -15
- data/lib/dynamodb/api/config.rb +4 -2
- data/lib/dynamodb/api/delete/tables.rb +17 -0
- data/lib/dynamodb/api/put/item.rb +14 -0
- data/lib/dynamodb/api/query.rb +12 -8
- data/lib/dynamodb/api/relation/where_clause.rb +13 -2
- data/lib/dynamodb/api/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4061c168a73225d611dccc1a6e22aefcc7db228c0ea943f9a043f1a55113dad0
|
4
|
+
data.tar.gz: c01601e30d038fdd7454ba554c517470cb229fab94576de46986e0fe5ff92dba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b393488340105ee19749dc58c6f15c6e90fbb83c42b16f7f115be3ef6dd8422f2b688b852d76ae933e05c64762f0ad595b9b1b39b77e80c67529659ef40f0b55
|
7
|
+
data.tar.gz: 18f26f3209871a606ec1193c85d8f8a8b30b3875858b7090fbb5488aa6f15dae96ceead389bd52807dccb768895e8f4965a3debad010150c8297319417952713
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Dynamodb::Api
|
2
2
|
|
3
|
+
[](https://travis-ci.org/walkersumida/dynamodb-api)
|
4
|
+
|
3
5
|
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/dynamodb/api`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
6
|
|
5
7
|
TODO: Delete this and the text above, and describe your gem
|
@@ -26,8 +28,8 @@ Or install it yourself as:
|
|
26
28
|
|
27
29
|
```
|
28
30
|
Dynamodb::Api.config do |config|
|
29
|
-
config.
|
30
|
-
config.
|
31
|
+
config.access_key_id = ''
|
32
|
+
config.secret_access_key = ''
|
31
33
|
config.region = ''
|
32
34
|
config.table_name_prefix = ''
|
33
35
|
config.index_name_prefix = ''
|
@@ -36,7 +38,10 @@ end
|
|
36
38
|
|
37
39
|
## Development
|
38
40
|
|
39
|
-
|
41
|
+
- Run `docker-compose up` to run the dynamodb_local.
|
42
|
+
- After checking out the repo, run `bin/setup` to install dependencies.
|
43
|
+
- Run `rake spec` to run the tests.
|
44
|
+
- You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
40
45
|
|
41
46
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
42
47
|
|
data/docker-compose.yml
ADDED
data/lib/dynamodb/api.rb
CHANGED
@@ -14,6 +14,8 @@ require 'dynamodb/api/relation/where_clause'
|
|
14
14
|
require 'dynamodb/api/relation/filter_clause'
|
15
15
|
require 'dynamodb/api/relation/global_secondary_index'
|
16
16
|
require 'dynamodb/api/relation/expression_attribute_names'
|
17
|
+
require 'dynamodb/api/put/item'
|
18
|
+
require 'dynamodb/api/delete/tables'
|
17
19
|
|
18
20
|
module Dynamodb
|
19
21
|
module Api # :nodoc:
|
@@ -26,5 +28,14 @@ module Dynamodb
|
|
26
28
|
def adapter
|
27
29
|
@adapter ||= Dynamodb::Api::Adapter.new
|
28
30
|
end
|
31
|
+
|
32
|
+
def drop_tables
|
33
|
+
Delete::Tables.delete_tables
|
34
|
+
end
|
35
|
+
|
36
|
+
def insert(table_name, value)
|
37
|
+
# TODO: BatchWriteItem
|
38
|
+
Put::Item.put_item(value, table_name)
|
39
|
+
end
|
29
40
|
end
|
30
41
|
end
|
data/lib/dynamodb/api/adapter.rb
CHANGED
@@ -1,26 +1,21 @@
|
|
1
1
|
module Dynamodb
|
2
2
|
module Api
|
3
3
|
class Adapter # :nodoc:
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :_client
|
5
5
|
|
6
|
-
def
|
7
|
-
@
|
6
|
+
def self.client
|
7
|
+
@_client ||= Aws::DynamoDB::Client.new(connect_config)
|
8
8
|
end
|
9
9
|
|
10
|
-
def connect_config
|
10
|
+
def self.connect_config
|
11
|
+
config_keys = %w[endpoint access_key_id secret_access_key region]
|
11
12
|
@connect_hash = {}
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
end
|
19
|
-
if Dynamodb::Api::Config.secret_key?
|
20
|
-
@connect_hash[:secret_access_key] = Dynamodb::Api::Config.secret_key
|
21
|
-
end
|
22
|
-
if Dynamodb::Api::Config.region?
|
23
|
-
@connect_hash[:region] = Dynamodb::Api::Config.region
|
14
|
+
config_keys.each do |config_key|
|
15
|
+
if Dynamodb::Api::Config.send("#{config_key}?")
|
16
|
+
@connect_hash[config_key.to_sym] =
|
17
|
+
Dynamodb::Api::Config.send(config_key)
|
18
|
+
end
|
24
19
|
end
|
25
20
|
|
26
21
|
@connect_hash
|
data/lib/dynamodb/api/config.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'dynamodb/api/config/options'
|
2
4
|
|
3
5
|
module Dynamodb
|
@@ -6,8 +8,8 @@ module Dynamodb
|
|
6
8
|
extend self
|
7
9
|
extend Options
|
8
10
|
|
9
|
-
option :
|
10
|
-
option :
|
11
|
+
option :access_key_id, default: nil
|
12
|
+
option :secret_access_key, default: nil
|
11
13
|
option :region, default: nil
|
12
14
|
option :endpoint, default: nil
|
13
15
|
option :table_name_prefix, default: ''
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Dynamodb
|
4
|
+
module Api
|
5
|
+
module Delete
|
6
|
+
class Tables # :nodoc:
|
7
|
+
def self.delete_tables
|
8
|
+
client = Adapter.client
|
9
|
+
table_names = client.list_tables[:table_names]
|
10
|
+
table_names.each do |table_name|
|
11
|
+
client.delete_table(table_name: table_name)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/dynamodb/api/query.rb
CHANGED
@@ -6,14 +6,9 @@ module Dynamodb
|
|
6
6
|
module Api
|
7
7
|
class Query # :nodoc:
|
8
8
|
include Relation
|
9
|
-
attr_reader :client
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
@client = Adapter.new.client
|
13
|
-
end
|
14
9
|
|
15
10
|
def all
|
16
|
-
|
11
|
+
Adapter.client.query(build_query)
|
17
12
|
end
|
18
13
|
|
19
14
|
private
|
@@ -22,17 +17,26 @@ module Dynamodb
|
|
22
17
|
build_params = {
|
23
18
|
table_name: from_clause.name,
|
24
19
|
index_name: index_clause.name,
|
25
|
-
select: select_clause.name,
|
26
|
-
scan_index_forward: order_clause.direct,
|
27
20
|
key_conditions: where_clause.key_conditions
|
28
21
|
}.merge(build_filter_clause)
|
22
|
+
build_params[:scan_index_forward] = order_direct(order_clause)
|
23
|
+
build_params[:select] = select_name(select_clause)
|
29
24
|
if expression_attribute&.names
|
30
25
|
build_params[:expression_attribute_names] = expression_attribute.names
|
31
26
|
end
|
32
27
|
build_params
|
33
28
|
end
|
34
29
|
|
30
|
+
def order_direct(clause)
|
31
|
+
clause&.direct ? clause.direct : OrderClause.new.direct
|
32
|
+
end
|
33
|
+
|
34
|
+
def select_name(clause)
|
35
|
+
clause&.name ? clause.name : SelectClause.new.name
|
36
|
+
end
|
37
|
+
|
35
38
|
def build_filter_clause
|
39
|
+
return {} unless filter_clause&.expression
|
36
40
|
{
|
37
41
|
filter_expression: filter_clause.expression,
|
38
42
|
expression_attribute_values: filter_clause.values
|
@@ -17,13 +17,24 @@ module Dynamodb
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def build(key_conditions)
|
20
|
-
key_conditions
|
20
|
+
conditions = format_conditions(key_conditions)
|
21
|
+
conditions.each_with_object({}) do |c, h|
|
21
22
|
h[c[KEY]] = {
|
22
|
-
attribute_value_list: c[VALUE],
|
23
|
+
attribute_value_list: format_value(c[VALUE]),
|
23
24
|
comparison_operator: c[OPERATOR]
|
24
25
|
}
|
25
26
|
end
|
26
27
|
end
|
28
|
+
|
29
|
+
def format_conditions(conditions)
|
30
|
+
return [conditions] unless conditions[0].is_a?(Array)
|
31
|
+
conditions
|
32
|
+
end
|
33
|
+
|
34
|
+
def format_value(value)
|
35
|
+
return [value] unless value.is_a?(Array)
|
36
|
+
value
|
37
|
+
end
|
27
38
|
end
|
28
39
|
end
|
29
40
|
end
|
data/lib/dynamodb/api/version.rb
CHANGED
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.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WalkerSumida
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -113,11 +113,14 @@ files:
|
|
113
113
|
- Rakefile
|
114
114
|
- bin/console
|
115
115
|
- bin/setup
|
116
|
+
- docker-compose.yml
|
116
117
|
- dynamodb-api.gemspec
|
117
118
|
- lib/dynamodb/api.rb
|
118
119
|
- lib/dynamodb/api/adapter.rb
|
119
120
|
- lib/dynamodb/api/config.rb
|
120
121
|
- lib/dynamodb/api/config/options.rb
|
122
|
+
- lib/dynamodb/api/delete/tables.rb
|
123
|
+
- lib/dynamodb/api/put/item.rb
|
121
124
|
- lib/dynamodb/api/query.rb
|
122
125
|
- lib/dynamodb/api/relation.rb
|
123
126
|
- lib/dynamodb/api/relation/expression_attribute_names.rb
|