dynamodb-api 0.2.2 → 0.3.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: 3e3ff263b1475dc2d4e484d5aeff4c492dd564d2bbd0c4db33683ce38d01dd03
4
- data.tar.gz: ac5685812af5e4c8ed18793c28aeab50b3efd2272c534b75a4f50792e9856b57
3
+ metadata.gz: b0e493a4832d1843b505d76d08b9830d2e919e123b2ccf02407ebeff1da90880
4
+ data.tar.gz: cec7bb6630629e0384e9195583e9e4ecf375d07df609ce7abe0da8fda63c8085
5
5
  SHA512:
6
- metadata.gz: 4d80aebbefab510937b801be84e29db6a271bad936051b30d4a412d968899badc9fa52e3dd13eb2dae14e28160bdc0497b97065b9685e904e14c62cbbe8ecc86
7
- data.tar.gz: 121b15233bcad0db09e3d295bf6e7b66f2de2967af4975874c677bd58272085f21cb344a62a6139aa38511f80c7bf7889c1cb08842c8fc826bb3a5fc87e2dfd6
6
+ metadata.gz: 9b7e74a28b06b41b5bcc394028c812b2d979e411b09e7140a14bd0abcbeccea9af0db69ea9281d00a82ab4dde46fb4909b76d858484e229e3856766557f90f0c
7
+ data.tar.gz: 7cac1cd51d923ccf69d72718cd1cd8a684327c16c718d37d7dcace0aefa56ef982ca28160b79ea76782f4ac04c3ca2ea344b5e636dd8dc6ed919367975f6dec6
data/Gemfile.lock CHANGED
@@ -1,25 +1,35 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- dynamodb-api (0.2.2)
4
+ dynamodb-api (0.3.0)
5
+ activesupport (>= 4)
5
6
  aws-sdk (~> 2)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- aws-sdk (2.11.92)
11
- aws-sdk-resources (= 2.11.92)
12
- aws-sdk-core (2.11.92)
11
+ activesupport (5.2.0)
12
+ concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ i18n (>= 0.7, < 2)
14
+ minitest (~> 5.1)
15
+ tzinfo (~> 1.1)
16
+ aws-sdk (2.11.93)
17
+ aws-sdk-resources (= 2.11.93)
18
+ aws-sdk-core (2.11.93)
13
19
  aws-sigv4 (~> 1.0)
14
20
  jmespath (~> 1.0)
15
- aws-sdk-resources (2.11.92)
16
- aws-sdk-core (= 2.11.92)
21
+ aws-sdk-resources (2.11.93)
22
+ aws-sdk-core (= 2.11.93)
17
23
  aws-sigv4 (1.0.3)
18
24
  byebug (10.0.2)
19
25
  coderay (1.1.2)
26
+ concurrent-ruby (1.0.5)
20
27
  diff-lcs (1.3)
28
+ i18n (1.0.1)
29
+ concurrent-ruby (~> 1.0)
21
30
  jmespath (1.4.0)
22
31
  method_source (0.9.0)
32
+ minitest (5.11.3)
23
33
  pry (0.11.3)
24
34
  coderay (~> 1.1.0)
25
35
  method_source (~> 0.9.0)
@@ -40,6 +50,9 @@ GEM
40
50
  diff-lcs (>= 1.2.0, < 2.0)
41
51
  rspec-support (~> 3.7.0)
42
52
  rspec-support (3.7.1)
53
+ thread_safe (0.3.6)
54
+ tzinfo (1.2.5)
55
+ thread_safe (~> 0.1)
43
56
 
44
57
  PLATFORMS
45
58
  ruby
data/README.md CHANGED
@@ -20,9 +20,17 @@ Or install it yourself as:
20
20
 
21
21
  $ gem install dynamodb-api
22
22
 
23
- ## Usage
23
+ ## Configuration
24
24
 
25
- TODO: Write usage instructions here
25
+ `config/initializers/dynamodb_api.rb`
26
+
27
+ ```
28
+ Dynamodb::Api.config do |config|
29
+ config.access_key = ''
30
+ config.secret_key = ''
31
+ config.region = ''
32
+ end
33
+ ```
26
34
 
27
35
  ## Development
28
36
 
data/dynamodb-api.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ['lib']
24
24
 
25
25
  spec.add_runtime_dependency 'aws-sdk', '~> 2'
26
+ spec.add_runtime_dependency('activesupport', '>= 4')
26
27
 
27
28
  spec.add_development_dependency 'bundler', '~> 1.16'
28
29
  spec.add_development_dependency 'rake', '~> 10.0'
data/lib/dynamodb/api.rb CHANGED
@@ -1,8 +1,18 @@
1
1
  require 'aws-sdk'
2
+ require 'active_support'
2
3
 
3
4
  require 'dynamodb/api/version'
4
5
  require 'dynamodb/api/config'
5
6
  require 'dynamodb/api/adapter'
7
+ require 'dynamodb/api/query'
8
+ require 'dynamodb/api/relation'
9
+ require 'dynamodb/api/relation/query_methods'
10
+ require 'dynamodb/api/relation/from_clause'
11
+ require 'dynamodb/api/relation/select_clause'
12
+ require 'dynamodb/api/relation/order_clause'
13
+ require 'dynamodb/api/relation/where_clause'
14
+ require 'dynamodb/api/relation/filter_clause'
15
+ require 'dynamodb/api/relation/global_secondary_index'
6
16
 
7
17
  module Dynamodb
8
18
  module Api
@@ -1,7 +1,9 @@
1
1
  module Dynamodb
2
2
  module Api
3
3
  class Adapter
4
- def connect!
4
+ attr_reader :client
5
+
6
+ def initialize
5
7
  @client = Aws::DynamoDB::Client.new(connect_config)
6
8
  end
7
9
 
@@ -23,10 +25,6 @@ module Dynamodb
23
25
 
24
26
  @connect_hash
25
27
  end
26
-
27
- def client
28
- @client
29
- end
30
28
  end
31
29
  end
32
30
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Query # :nodoc:
6
+ attr_reader :client
7
+ attr_reader :relation
8
+
9
+ def initialize
10
+ @relation = Relation.new
11
+ @client = Adapter.new.client
12
+ end
13
+
14
+ def all
15
+ @client.query(build_query)
16
+ end
17
+
18
+ private
19
+
20
+ def build_query
21
+ {
22
+ table_name: @relation.from_clause.name,
23
+ index_name: @relation.index_clause.name,
24
+ select: @relation.select_clause.name,
25
+ scan_index_forward: @relation.order_clause.direct,
26
+ key_conditions: build_where_clause
27
+ }.merge(build_filter_clause)
28
+ end
29
+
30
+ def build_where_clause
31
+ {
32
+ @relation.where_clause.key => {
33
+ attribute_value_list: [@relation.where_clause.value],
34
+ comparison_operator: @relation.where_clause.operator
35
+ }
36
+ }
37
+ end
38
+
39
+ def build_filter_clause
40
+ {
41
+ filter_expression: @relation.filter_clause.expression,
42
+ expression_attribute_values: @relation.filter_clause.values
43
+ }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dynamodb/api/relation/query_methods'
4
+
5
+ module Dynamodb
6
+ module Api
7
+ class Relation # :nodoc:
8
+ include QueryMethods
9
+ attr_accessor :index_clause
10
+ attr_accessor :from_clause
11
+ attr_accessor :select_clause
12
+ attr_accessor :order_clause
13
+ attr_accessor :where_clause
14
+ attr_accessor :filter_clause
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Relation
6
+ class FilterClause # :nodoc:
7
+ attr_reader :expression
8
+ attr_reader :values
9
+
10
+ def initialize(expression, values)
11
+ @expression = expression
12
+ @values = values
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Relation
6
+ class FromClause # :nodoc:
7
+ attr_reader :name
8
+
9
+ def initialize(name)
10
+ @name = name
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Relation
6
+ class GlobalSecondaryIndex
7
+ attr_reader :name
8
+
9
+ def initialize(name)
10
+ @name = name
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Relation
6
+ class OrderClause # :nodoc:
7
+ attr_reader :direct
8
+
9
+ def initialize(direct = nil)
10
+ @direct = key_map(direct)
11
+ end
12
+
13
+ private
14
+
15
+ def key_map(direct)
16
+ case direct
17
+ when nil
18
+ false
19
+ when 'desc'
20
+ false
21
+ when 'asc'
22
+ true
23
+ else
24
+ false
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dynamodb/api/relation/from_clause'
4
+
5
+ module Dynamodb
6
+ module Api
7
+ module QueryMethods # :nodoc:
8
+ def from(value)
9
+ self.from_clause = Relation::FromClause.new(value)
10
+ self
11
+ end
12
+
13
+ def index(value)
14
+ self.index_clause = Relation::GlobalSecondaryIndex.new(value)
15
+ self
16
+ end
17
+
18
+ def select(value = nil)
19
+ self.select_clause = Relation::SelectClause.new(value)
20
+ self
21
+ end
22
+
23
+ def order(value = nil)
24
+ self.order_clause = Relation::OrderClause.new(value)
25
+ self
26
+ end
27
+
28
+ def where(key, value, operator)
29
+ self.where_clause = Relation::WhereClause.new(key, value, operator)
30
+ self
31
+ end
32
+
33
+ def filter(expression, values)
34
+ self.filter_clause = Relation::FilterClause.new(expression, values)
35
+ self
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Relation
6
+ class SelectClause # :nodoc:
7
+ attr_reader :name
8
+
9
+ def initialize(name = nil)
10
+ @name = name || 'ALL_ATTRIBUTES'
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dynamodb
4
+ module Api
5
+ class Relation
6
+ class WhereClause # :nodoc:
7
+ attr_reader :key
8
+ attr_reader :value
9
+ attr_reader :operator
10
+
11
+ def initialize(key, value, operator)
12
+ @key = key
13
+ @value = value
14
+ @operator = operator
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
1
  module Dynamodb
2
2
  module Api
3
- VERSION = "0.2.2"
3
+ VERSION = '0.3.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.2.2
4
+ version: 0.3.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-07-20 00:00:00.000000000 Z
11
+ date: 2018-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -103,6 +117,15 @@ files:
103
117
  - lib/dynamodb/api/adapter.rb
104
118
  - lib/dynamodb/api/config.rb
105
119
  - lib/dynamodb/api/config/options.rb
120
+ - lib/dynamodb/api/query.rb
121
+ - lib/dynamodb/api/relation.rb
122
+ - lib/dynamodb/api/relation/filter_clause.rb
123
+ - lib/dynamodb/api/relation/from_clause.rb
124
+ - lib/dynamodb/api/relation/global_secondary_index.rb
125
+ - lib/dynamodb/api/relation/order_clause.rb
126
+ - lib/dynamodb/api/relation/query_methods.rb
127
+ - lib/dynamodb/api/relation/select_clause.rb
128
+ - lib/dynamodb/api/relation/where_clause.rb
106
129
  - lib/dynamodb/api/version.rb
107
130
  homepage: https://github.com/walkersumida/dynamodb-api
108
131
  licenses: