dynamodb-api 0.6.2 → 0.7.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: d9be0f31417b188293408482f8661646b207c587e62f19b252cba0beecb9f7a7
4
- data.tar.gz: e449872d243d29819b761edf6503f5931cd838436eabb2584bd7ea238125573f
3
+ metadata.gz: dbaea71109e5f59f3371de8c33d10a26e23855e6666c6e71d4c3fe46cd6f9818
4
+ data.tar.gz: 58b5b94c50002c02605e46eb75aeec66a2f8f38339f34d074fa23d16cf13f80d
5
5
  SHA512:
6
- metadata.gz: 43976f0890badbe08057345c9576d6cb48cd623ac97b1363bab6cc9dfaa245cded0cba11dc694a6d4213e0b08ab30ac8436f86b249553859220cb03224068ffa
7
- data.tar.gz: 66be89216803aeb7644a12a5107894cc1531eb14c9ca70bae8dc304fdeffd985d1ba4ac83d8ff07eaa381138e51e4b90c8aa22f056c4e62e55ec21fce12a43fc
6
+ metadata.gz: 5ba6e2154406a24eec7aa3a806b5901c6216c2cfa3f74ea00ded9c0849b8e272933d8f4bd92d2b20417e284815273046a1eb575cab7765e7eb6523493ea204c8
7
+ data.tar.gz: a31a6a368d48914534eb50d9055a6d6b6fa1ee3ae3edb95039f189caf047b635612f798ad012b32afa6c48c26d4e21025b57eeb193c683ad43bbd1a84de2717d
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0] - 2018-12-23
10
+ ### Added
11
+ - [#34](https://github.com/walkersumida/dynamodb-api/pull/34) `scan` method
12
+
9
13
  ## [0.6.2] - 2018-12-13
10
14
  ### Added
11
15
  - [#32](https://github.com/walkersumida/dynamodb-api/pull/32) `remove_attributes` method
data/README.md CHANGED
@@ -57,6 +57,23 @@ cars table.
57
57
  |3 |3 |Model S |0.20120601e8 |0 |
58
58
  |4 |1 |S2000 |0.19980101e8 |1 |
59
59
 
60
+ ### Scan
61
+
62
+ Scan returns items in random order.
63
+
64
+ ```ruby
65
+ scan = Dynamodb::Api.scan
66
+ scan.from('cars')
67
+ items = scan.all.items
68
+ ```
69
+
70
+ | id | maker_id(Partition key) | model | release_date(Sort key) | status |
71
+ |:---|:---|:---|:---|:---|
72
+ |1 |1 |Accord |0.19760508e8 |0 |
73
+ |2 |2 |CROWN |0.19550101e8 |0 |
74
+ |3 |3 |Model S |0.20120601e8 |0 |
75
+ |4 |1 |S2000 |0.19980101e8 |1 |
76
+
60
77
  ### Query
61
78
  https://docs.aws.amazon.com/sdkforruby/api/Aws/DynamoDB/Client.html#query-instance_method
62
79
 
@@ -5,7 +5,9 @@ require 'active_support/core_ext'
5
5
  require 'dynamodb/api/version'
6
6
  require 'dynamodb/api/config'
7
7
  require 'dynamodb/api/adapter'
8
+ require 'dynamodb/api/base'
8
9
  require 'dynamodb/api/query'
10
+ require 'dynamodb/api/scan'
9
11
  require 'dynamodb/api/relation'
10
12
  require 'dynamodb/api/relation/query_methods'
11
13
  require 'dynamodb/api/relation/from_clause'
@@ -40,6 +42,10 @@ module Dynamodb
40
42
  Delete::Tables.delete_tables
41
43
  end
42
44
 
45
+ def scan
46
+ Scan.new
47
+ end
48
+
43
49
  def query
44
50
  Query.new
45
51
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dynamodb/api/relation'
4
+
5
+ module Dynamodb
6
+ module Api
7
+ class Base # :nodoc:
8
+ include Relation
9
+
10
+ def all
11
+ raise NotImplementedError, "You must implement #{self.class}##{__method__}"
12
+ end
13
+
14
+ private
15
+
16
+ def build_query
17
+ raise NotImplementedError, "You must implement #{self.class}##{__method__}"
18
+ end
19
+
20
+ def base_params
21
+ raise NotImplementedError, "You must implement #{self.class}##{__method__}"
22
+ end
23
+
24
+ def order_direct(clause)
25
+ clause&.direct ? clause.direct : OrderClause.new.direct
26
+ end
27
+
28
+ def select_name(clause)
29
+ clause&.name ? clause.name : SelectClause.new.name
30
+ end
31
+
32
+ def build_filter_clause
33
+ return {} if filter_clause&.expression.blank?
34
+ {
35
+ filter_expression: filter_clause.expression,
36
+ expression_attribute_values: filter_clause.values,
37
+ }
38
+ end
39
+
40
+ def build_expression_attribute_names(params)
41
+ if filter_clause&.reserved_words.present?
42
+ expression_attribute.add(filter_clause.reserved_words)
43
+ end
44
+ if expression_attribute.names.present?
45
+ params[:expression_attribute_names] = expression_attribute.names
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -4,9 +4,7 @@ require 'dynamodb/api/relation'
4
4
 
5
5
  module Dynamodb
6
6
  module Api
7
- class Query # :nodoc:
8
- include Relation
9
-
7
+ class Query < Base # :nodoc:
10
8
  def all
11
9
  Adapter.client.query(build_query)
12
10
  end
@@ -29,31 +27,6 @@ module Dynamodb
29
27
  key_conditions: where_clause.key_conditions,
30
28
  }
31
29
  end
32
-
33
- def order_direct(clause)
34
- clause&.direct ? clause.direct : OrderClause.new.direct
35
- end
36
-
37
- def select_name(clause)
38
- clause&.name ? clause.name : SelectClause.new.name
39
- end
40
-
41
- def build_filter_clause
42
- return {} if filter_clause&.expression.blank?
43
- {
44
- filter_expression: filter_clause.expression,
45
- expression_attribute_values: filter_clause.values,
46
- }
47
- end
48
-
49
- def build_expression_attribute_names(params)
50
- if filter_clause&.reserved_words.present?
51
- expression_attribute.add(filter_clause.reserved_words)
52
- end
53
- if expression_attribute.names.present?
54
- params[:expression_attribute_names] = expression_attribute.names
55
- end
56
- end
57
30
  end
58
31
  end
59
32
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'dynamodb/api/relation'
4
+
5
+ module Dynamodb
6
+ module Api
7
+ class Scan < Base # :nodoc:
8
+ def all
9
+ Adapter.client.scan(build_query)
10
+ end
11
+
12
+ private
13
+
14
+ def build_query
15
+ build_params = base_params.merge(build_filter_clause)
16
+ build_params[:index_name] = index_clause.name if index_clause&.name
17
+ build_params[:key_conditions] = where_clause.key_conditions if where_clause&.key_conditions
18
+ build_params[:select] = select_name(select_clause)
19
+ build_expression_attribute_names(build_params)
20
+ build_params[:limit] = limit_clause.number if limit_clause&.number
21
+ build_params
22
+ end
23
+
24
+ def base_params
25
+ {
26
+ table_name: from_clause.name,
27
+ }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,5 @@
1
1
  module Dynamodb
2
2
  module Api
3
- VERSION = '0.6.2'.freeze
3
+ VERSION = '0.7.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.6.2
4
+ version: 0.7.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-12-15 00:00:00.000000000 Z
11
+ date: 2019-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -150,6 +150,7 @@ files:
150
150
  - gemfiles/aws_sdk_3.gemfile
151
151
  - lib/dynamodb/api.rb
152
152
  - lib/dynamodb/api/adapter.rb
153
+ - lib/dynamodb/api/base.rb
153
154
  - lib/dynamodb/api/config.rb
154
155
  - lib/dynamodb/api/config/options.rb
155
156
  - lib/dynamodb/api/delete/item.rb
@@ -167,6 +168,7 @@ files:
167
168
  - lib/dynamodb/api/relation/query_methods.rb
168
169
  - lib/dynamodb/api/relation/select_clause.rb
169
170
  - lib/dynamodb/api/relation/where_clause.rb
171
+ - lib/dynamodb/api/scan.rb
170
172
  - lib/dynamodb/api/update/attributes.rb
171
173
  - lib/dynamodb/api/update/base.rb
172
174
  - lib/dynamodb/api/update/item.rb