dynamodb_framework 1.4.1 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
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