dynamodb_framework 1.4.1 → 1.5.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
  SHA1:
3
- metadata.gz: ca8decdb6f99c0cce8c288170de0e355e9ff0e9f
4
- data.tar.gz: a0ac595cb6283e231397e027b861b610a374705b
3
+ metadata.gz: a14cd99712936bca38b2833324d48e653aefbca3
4
+ data.tar.gz: a72d99378e3fd88e4c34acf7c1a6113340c2891f
5
5
  SHA512:
6
- metadata.gz: 4d422839049b5021e5a4203c1a50c1d3707201972ce2cd71beeeabbd70c31b19f0238fe471d4d01fb66107d5ea0ed4c5a628eac2c886e7d2ec328ba1bdb52e05
7
- data.tar.gz: 46bdbcf9396bfbc4e64fd8354f8d246b9eebfd5a97493bce09b36689efe707cacf75183257bf476bd9fc55d827a9f1bdcc5c4a77e7ffc43279f52939722be837
6
+ metadata.gz: ce4164b5df1be839b74fb3fd686c33b155c05eadd0d953ab39c8944cb00f344087e417e3eebf2ba8668d80c29fb14bcffc6d6b9e0c65fc5c8b560b8c3073b0ce
7
+ data.tar.gz: e2bf4eeda87c3e6b7d698838fb67228cd21663c08dd493d40f8662af781c81753d83b2d1a89ccdf52ad4b1bafac3e4f9420bbf6c1da05d80d162aa44a9517061
@@ -1,6 +1,12 @@
1
1
  module DynamoDbFramework
2
2
  class Query
3
3
 
4
+ class InvalidQueryError < StandardError
5
+ def initialize(message)
6
+ super(message)
7
+ end
8
+ end
9
+
4
10
  def initialize(table_name:, partition_key:, partition_value:, index_name: nil)
5
11
  @table_name = table_name
6
12
  @partition_key = partition_key
@@ -44,6 +50,26 @@ module DynamoDbFramework
44
50
  self
45
51
  end
46
52
 
53
+ def contains(value)
54
+ field = @parts.last
55
+ unless field[:type] == :field
56
+ raise ::InvalidQueryError.new('The contains query part can only be chained to a field.')
57
+ end
58
+ @parts.pop
59
+ @parts << { type: :contains, field: field[:value], value: value }
60
+ self
61
+ end
62
+
63
+ def exists?
64
+ field = @parts.last
65
+ unless field[:type] == :field
66
+ raise ::InvalidQueryError.new('The exists? query part can only be chained to a field.')
67
+ end
68
+ @parts.pop
69
+ @parts << { type: :exists, field: field[:value] }
70
+ self
71
+ end
72
+
47
73
  def and
48
74
  @parts << { type: :and }
49
75
  self
@@ -77,6 +103,17 @@ module DynamoDbFramework
77
103
  counter = counter + 1
78
104
  @expression_string += ' ' + p[:expression].to_s + ' ' + param_name
79
105
  @expression_params[param_name] = clean_value(p[:value])
106
+ when :contains
107
+ param_name = ':p' + counter.to_s
108
+ counter = counter + 1
109
+ field_param = '#' + p[:field].to_s
110
+ @expression_string += ' contains(' + field_param + ', ' + param_name + ')'
111
+ @expression_params[field_param] = p[:field].to_s
112
+ @expression_params[param_name] = clean_value(p[:value])
113
+ when :exists
114
+ field_param = '#' + p[:field].to_s
115
+ @expression_string += ' attribute_exists(' + field_param + ')'
116
+ @expression_params[field_param] = p[:field].to_s
80
117
  when :and
81
118
  @expression_string += ' and'
82
119
  when :or
@@ -1,3 +1,3 @@
1
1
  module DynamoDbFramework
2
- VERSION = '1.4.1'
2
+ VERSION = '1.5.0'
3
3
  end
@@ -45,11 +45,17 @@ RSpec.describe DynamoDbFramework::Query do
45
45
  .number.gt_eq(1)
46
46
  .and
47
47
  .number.lt_eq(5)
48
+ .and
49
+ .number.exists?
50
+ .and
51
+ .name.contains('name')
48
52
  .build
49
- expect(string).to eq '#number >= :p0 and #number <= :p1'
53
+ expect(string).to eq '#number >= :p0 and #number <= :p1 and attribute_exists(#number) and contains(#name, :p2)'
50
54
  expect(params['#number']).to eq 'number'
51
55
  expect(params[':p0']).to eq 1
52
56
  expect(params[':p1']).to eq 5
57
+ expect(params['#name']).to eq 'name'
58
+ expect(params[':p2']).to eq 'name'
53
59
  end
54
60
  end
55
61
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamodb_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vaughanbrittonsage
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-27 00:00:00.000000000 Z
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler