cassanity 0.6.0.beta5 → 0.6.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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/doc/Migrations.md +4 -15
  4. data/examples/collections.rb +82 -0
  5. data/lib/cassanity.rb +54 -0
  6. data/lib/cassanity/addition.rb +15 -0
  7. data/lib/cassanity/argument_generators/batch.rb +8 -1
  8. data/lib/cassanity/argument_generators/column_family_create.rb +11 -1
  9. data/lib/cassanity/argument_generators/column_family_delete.rb +19 -4
  10. data/lib/cassanity/argument_generators/keyspace_create.rb +5 -1
  11. data/lib/cassanity/argument_generators/set_clause.rb +4 -1
  12. data/lib/cassanity/collection_item.rb +39 -0
  13. data/lib/cassanity/removal.rb +15 -0
  14. data/lib/cassanity/schema.rb +5 -2
  15. data/lib/cassanity/set_addition.rb +16 -0
  16. data/lib/cassanity/set_removal.rb +16 -0
  17. data/lib/cassanity/statement.rb +4 -1
  18. data/lib/cassanity/version.rb +1 -1
  19. data/spec/unit/cassanity/addition_spec.rb +80 -0
  20. data/spec/unit/cassanity/argument_generators/batch_spec.rb +45 -0
  21. data/spec/unit/cassanity/argument_generators/column_family_create_spec.rb +20 -0
  22. data/spec/unit/cassanity/argument_generators/column_family_delete_spec.rb +42 -0
  23. data/spec/unit/cassanity/argument_generators/keyspace_create_spec.rb +11 -0
  24. data/spec/unit/cassanity/argument_generators/set_clause_spec.rb +35 -0
  25. data/spec/unit/cassanity/collection_item_spec.rb +84 -0
  26. data/spec/unit/cassanity/removal_spec.rb +80 -0
  27. data/spec/unit/cassanity/schema_spec.rb +49 -0
  28. data/spec/unit/cassanity/set_addition_spec.rb +80 -0
  29. data/spec/unit/cassanity/set_removal_spec.rb +80 -0
  30. data/spec/unit/cassanity/statement_spec.rb +9 -2
  31. data/spec/unit/cassanity_spec.rb +42 -0
  32. metadata +31 -15
@@ -23,8 +23,21 @@ describe Cassanity::Schema do
23
23
  }
24
24
  }
25
25
 
26
+ let(:composite_partition_required_arguments) {
27
+ {
28
+ primary_key: [[:bucket, :version], :id],
29
+ columns: {
30
+ bucket: :text,
31
+ version: :text,
32
+ id: :text,
33
+ name: :text,
34
+ }
35
+ }
36
+ }
37
+
26
38
  let(:schema) { described_class.new(required_arguments) }
27
39
  let(:composite_schema) { described_class.new(composite_required_arguments) }
40
+ let(:composite_partition_schema) { described_class.new(composite_partition_required_arguments) }
28
41
 
29
42
  subject { schema }
30
43
 
@@ -48,6 +61,18 @@ describe Cassanity::Schema do
48
61
  described_class.new(args)
49
62
  }.to raise_error(ArgumentError, "Not all primary keys ([:foo, :bar]) were defined as columns ([:id])")
50
63
  end
64
+
65
+ it "works regardless colums definition order" do
66
+ args = composite_required_arguments.merge({
67
+ columns: {
68
+ id: :text,
69
+ bucket: :text,
70
+ name: :text,
71
+ }
72
+ })
73
+
74
+ described_class.new(args).should be_a described_class
75
+ end
51
76
  end
52
77
 
53
78
  describe "#column_names" do
@@ -78,6 +103,14 @@ describe Cassanity::Schema do
78
103
  subject.primary_keys.should eq([:bucket, :id])
79
104
  end
80
105
  end
106
+
107
+ context "with composite partition key" do
108
+ subject { composite_partition_schema }
109
+
110
+ it "returns array of primary keys with array of partition" do
111
+ subject.primary_keys.should eq([[:bucket, :version], :id])
112
+ end
113
+ end
81
114
  end
82
115
 
83
116
  describe "#primary_key" do
@@ -96,6 +129,14 @@ describe Cassanity::Schema do
96
129
  subject.primary_key.should eq([:bucket, :id])
97
130
  end
98
131
  end
132
+
133
+ context "with composite partition key" do
134
+ subject { composite_partition_schema }
135
+
136
+ it "returns array of primary keys with array of partition" do
137
+ subject.primary_keys.should eq([[:bucket, :version], :id])
138
+ end
139
+ end
99
140
  end
100
141
 
101
142
  describe "#composite_primary_key?" do
@@ -114,6 +155,14 @@ describe Cassanity::Schema do
114
155
  subject.composite_primary_key?.should be_true
115
156
  end
116
157
  end
158
+
159
+ context "with composite partition key" do
160
+ subject { composite_partition_schema }
161
+
162
+ it "returns true" do
163
+ subject.composite_primary_key?.should be_true
164
+ end
165
+ end
117
166
  end
118
167
 
119
168
  describe "#inspect" do
@@ -0,0 +1,80 @@
1
+ require 'helper'
2
+ require 'cassanity/set_addition'
3
+
4
+ describe Cassanity::SetAddition do
5
+ describe "self named helper method" do
6
+ it "returns instance" do
7
+ Cassanity::SetAddition('foo').should eq(described_class.new('foo'))
8
+ end
9
+ end
10
+
11
+ describe "#initialize" do
12
+ context "with value" do
13
+ before do
14
+ @instance = described_class.new('foo')
15
+ end
16
+
17
+ it "sets value" do
18
+ @instance.value.should eq(Set['foo'])
19
+ end
20
+
21
+ it "sets symbol" do
22
+ @instance.symbol.should be(:+)
23
+ end
24
+ end
25
+
26
+ context "with multiples values" do
27
+ before do
28
+ @instance = described_class.new('foo', 'bar')
29
+ end
30
+
31
+ it "sets values" do
32
+ @instance.value.should eq(Set['foo', 'bar'])
33
+ end
34
+ end
35
+
36
+ context "without value" do
37
+ it "raises error" do
38
+ expect {
39
+ subject.value
40
+ }.to raise_error(ArgumentError, "value cannot be nil")
41
+ end
42
+ end
43
+
44
+ context "with nil" do
45
+ it "raises error" do
46
+ expect {
47
+ described_class.new(nil)
48
+ }.to raise_error(ArgumentError, "value cannot be nil")
49
+ end
50
+ end
51
+ end
52
+
53
+ shared_examples_for "set_addition equality" do |method_name|
54
+ it "returns true for same class and value" do
55
+ instance = described_class.new('foo')
56
+ other = described_class.new('foo')
57
+ instance.send(method_name, other).should be_true
58
+ end
59
+
60
+ it "returns false for same class and different value" do
61
+ instance = described_class.new('foo')
62
+ other = described_class.new('bar')
63
+ instance.send(method_name, other).should be_false
64
+ end
65
+
66
+ it "returns false for different class" do
67
+ instance = described_class.new('foo')
68
+ other = Object.new
69
+ instance.send(method_name, other).should be_false
70
+ end
71
+ end
72
+
73
+ describe "#eql?" do
74
+ include_examples "set_addition equality", :eql?
75
+ end
76
+
77
+ describe "#==" do
78
+ include_examples "set_addition equality", :==
79
+ end
80
+ end
@@ -0,0 +1,80 @@
1
+ require 'helper'
2
+ require 'cassanity/set_removal'
3
+
4
+ describe Cassanity::SetRemoval do
5
+ describe "self named helper method" do
6
+ it "returns instance" do
7
+ Cassanity::SetRemoval('foo').should eq(described_class.new('foo'))
8
+ end
9
+ end
10
+
11
+ describe "#initialize" do
12
+ context "with value" do
13
+ before do
14
+ @instance = described_class.new('foo')
15
+ end
16
+
17
+ it "sets value" do
18
+ @instance.value.should eq(Set['foo'])
19
+ end
20
+
21
+ it "sets symbol" do
22
+ @instance.symbol.should be(:-)
23
+ end
24
+ end
25
+
26
+ context "with multiples values" do
27
+ before do
28
+ @instance = described_class.new('foo', 'bar')
29
+ end
30
+
31
+ it "sets values" do
32
+ @instance.value.should eq(Set['foo', 'bar'])
33
+ end
34
+ end
35
+
36
+ context "without value" do
37
+ it "raises error" do
38
+ expect {
39
+ subject.value
40
+ }.to raise_error(ArgumentError, "value cannot be nil")
41
+ end
42
+ end
43
+
44
+ context "with nil" do
45
+ it "raises error" do
46
+ expect {
47
+ described_class.new(nil)
48
+ }.to raise_error(ArgumentError, "value cannot be nil")
49
+ end
50
+ end
51
+ end
52
+
53
+ shared_examples_for "set_removal equality" do |method_name|
54
+ it "returns true for same class and value" do
55
+ instance = described_class.new('foo')
56
+ other = described_class.new('foo')
57
+ instance.send(method_name, other).should be_true
58
+ end
59
+
60
+ it "returns false for same class and different value" do
61
+ instance = described_class.new('foo')
62
+ other = described_class.new('bar')
63
+ instance.send(method_name, other).should be_false
64
+ end
65
+
66
+ it "returns false for different class" do
67
+ instance = described_class.new('foo')
68
+ other = Object.new
69
+ instance.send(method_name, other).should be_false
70
+ end
71
+ end
72
+
73
+ describe "#eql?" do
74
+ include_examples "set_removal equality", :eql?
75
+ end
76
+
77
+ describe "#==" do
78
+ include_examples "set_removal equality", :==
79
+ end
80
+ end
@@ -58,8 +58,15 @@ describe Cassanity::Statement do
58
58
 
59
59
  it 'interpolates arrays, recursively escaping each value' do
60
60
  stmt = Cassanity::Statement.new('INSERT INTO foo VALUES (?)')
61
- expect(stmt.interpolate([["str", 123]])).to eq(
62
- "INSERT INTO foo VALUES ('str',123)"
61
+ expect(stmt.interpolate([["abc", "def"]])).to eq(
62
+ "INSERT INTO foo VALUES (['abc','def'])"
63
+ )
64
+ end
65
+
66
+ it 'interpolates sets, recursively escaping each value' do
67
+ stmt = Cassanity::Statement.new('INSERT INTO foo VALUES (?)')
68
+ expect(stmt.interpolate([Set.new(["abc","def"])])).to eq(
69
+ "INSERT INTO foo VALUES ({'abc','def'})"
63
70
  )
64
71
  end
65
72
 
@@ -126,4 +126,46 @@ describe Cassanity do
126
126
  Cassanity.range(1, 5).should eq(Cassanity::Range.new(1, 5))
127
127
  end
128
128
  end
129
+
130
+ describe ".add" do
131
+ it "returns addition instance" do
132
+ Cassanity.add("value").should eq(Cassanity::Addition.new("value"))
133
+ end
134
+ end
135
+
136
+ describe ".remove" do
137
+ it "returns removal instance" do
138
+ Cassanity.remove("value").should eq(Cassanity::Removal.new("value"))
139
+ end
140
+ end
141
+
142
+ describe ".set_add" do
143
+ it "returns set_addition instance" do
144
+ Cassanity.set_add("value").should eq(Cassanity::SetAddition.new("value"))
145
+ end
146
+ end
147
+
148
+ describe ".set_remove" do
149
+ it "returns set_removal instance" do
150
+ Cassanity.set_remove("value").should eq(Cassanity::SetRemoval.new("value"))
151
+ end
152
+ end
153
+
154
+ describe ".sadd" do
155
+ it "returns set_addition instance" do
156
+ Cassanity.sadd("value").should eq(Cassanity::SetAddition.new("value"))
157
+ end
158
+ end
159
+
160
+ describe ".sremove" do
161
+ it "returns set_removal instance" do
162
+ Cassanity.sremove("value").should eq(Cassanity::SetRemoval.new("value"))
163
+ end
164
+ end
165
+
166
+ describe ".item" do
167
+ it "returns collection item instance" do
168
+ Cassanity.item(1,"value").should eq(Cassanity::CollectionItem.new(1,"value"))
169
+ end
170
+ end
129
171
  end
metadata CHANGED
@@ -1,47 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cassanity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0.beta5
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Nunemaker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-02 00:00:00.000000000 Z
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cql-rb
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.1'
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.1.1
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.1'
30
- - - '>='
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.1.1
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: simple_uuid
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ~>
37
+ - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0.4'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ~>
44
+ - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0.4'
47
47
  description: Layer of goodness on top of cassandra-cql so you do not have to write
@@ -52,9 +52,9 @@ executables: []
52
52
  extensions: []
53
53
  extra_rdoc_files: []
54
54
  files:
55
- - .gitignore
56
- - .rspec
57
- - .travis.yml
55
+ - ".gitignore"
56
+ - ".rspec"
57
+ - ".travis.yml"
58
58
  - Changelog.md
59
59
  - Gemfile
60
60
  - Guardfile
@@ -66,11 +66,13 @@ files:
66
66
  - doc/Migrations.md
67
67
  - examples/_shared.rb
68
68
  - examples/batch.rb
69
+ - examples/collections.rb
69
70
  - examples/column_families.rb
70
71
  - examples/counters.rb
71
72
  - examples/keyspaces.rb
72
73
  - examples/select_range.rb
73
74
  - lib/cassanity.rb
75
+ - lib/cassanity/addition.rb
74
76
  - lib/cassanity/argument_generators/batch.rb
75
77
  - lib/cassanity/argument_generators/column_families.rb
76
78
  - lib/cassanity/argument_generators/column_family_alter.rb
@@ -95,6 +97,7 @@ files:
95
97
  - lib/cassanity/argument_generators/where_clause.rb
96
98
  - lib/cassanity/argument_generators/with_clause.rb
97
99
  - lib/cassanity/client.rb
100
+ - lib/cassanity/collection_item.rb
98
101
  - lib/cassanity/column.rb
99
102
  - lib/cassanity/column_family.rb
100
103
  - lib/cassanity/connection.rb
@@ -122,6 +125,7 @@ files:
122
125
  - lib/cassanity/operators/lt.rb
123
126
  - lib/cassanity/operators/lte.rb
124
127
  - lib/cassanity/range.rb
128
+ - lib/cassanity/removal.rb
125
129
  - lib/cassanity/result_transformers/column_families.rb
126
130
  - lib/cassanity/result_transformers/columns.rb
127
131
  - lib/cassanity/result_transformers/keyspaces.rb
@@ -131,6 +135,8 @@ files:
131
135
  - lib/cassanity/retry_strategies/retry_n_times.rb
132
136
  - lib/cassanity/retry_strategies/retry_strategy.rb
133
137
  - lib/cassanity/schema.rb
138
+ - lib/cassanity/set_addition.rb
139
+ - lib/cassanity/set_removal.rb
134
140
  - lib/cassanity/statement.rb
135
141
  - lib/cassanity/version.rb
136
142
  - spec/helper.rb
@@ -147,6 +153,7 @@ files:
147
153
  - spec/integration/cassanity/migrator_spec.rb
148
154
  - spec/support/cassanity_helpers.rb
149
155
  - spec/support/fake_udp_socket.rb
156
+ - spec/unit/cassanity/addition_spec.rb
150
157
  - spec/unit/cassanity/argument_generators/batch_spec.rb
151
158
  - spec/unit/cassanity/argument_generators/column_families_spec.rb
152
159
  - spec/unit/cassanity/argument_generators/column_family_alter_spec.rb
@@ -171,6 +178,7 @@ files:
171
178
  - spec/unit/cassanity/argument_generators/where_clause_spec.rb
172
179
  - spec/unit/cassanity/argument_generators/with_clause_spec.rb
173
180
  - spec/unit/cassanity/client_spec.rb
181
+ - spec/unit/cassanity/collection_item_spec.rb
174
182
  - spec/unit/cassanity/column_family_spec.rb
175
183
  - spec/unit/cassanity/column_spec.rb
176
184
  - spec/unit/cassanity/connection_spec.rb
@@ -190,12 +198,15 @@ files:
190
198
  - spec/unit/cassanity/operators/gte_spec.rb
191
199
  - spec/unit/cassanity/operators/lt_spec.rb
192
200
  - spec/unit/cassanity/operators/lte_spec.rb
201
+ - spec/unit/cassanity/removal_spec.rb
193
202
  - spec/unit/cassanity/result_transformers/mirror_spec.rb
194
203
  - spec/unit/cassanity/result_transformers/result_to_array_spec.rb
195
204
  - spec/unit/cassanity/retry_strategies/exponential_backoff_spec.rb
196
205
  - spec/unit/cassanity/retry_strategies/retry_n_times_spec.rb
197
206
  - spec/unit/cassanity/retry_strategies/retry_strategy_spec.rb
198
207
  - spec/unit/cassanity/schema_spec.rb
208
+ - spec/unit/cassanity/set_addition_spec.rb
209
+ - spec/unit/cassanity/set_removal_spec.rb
199
210
  - spec/unit/cassanity/statement_spec.rb
200
211
  - spec/unit/cassanity_spec.rb
201
212
  homepage: http://johnnunemaker.com/cassanity/
@@ -207,17 +218,17 @@ require_paths:
207
218
  - lib
208
219
  required_ruby_version: !ruby/object:Gem::Requirement
209
220
  requirements:
210
- - - '>='
221
+ - - ">="
211
222
  - !ruby/object:Gem::Version
212
223
  version: '0'
213
224
  required_rubygems_version: !ruby/object:Gem::Requirement
214
225
  requirements:
215
- - - '>'
226
+ - - ">="
216
227
  - !ruby/object:Gem::Version
217
- version: 1.3.1
228
+ version: '0'
218
229
  requirements: []
219
230
  rubyforge_project:
220
- rubygems_version: 2.0.14
231
+ rubygems_version: 2.2.2
221
232
  signing_key:
222
233
  specification_version: 4
223
234
  summary: Layer of goodness on top of cassandra-cql so you do not have to write CQL
@@ -237,6 +248,7 @@ test_files:
237
248
  - spec/integration/cassanity/migrator_spec.rb
238
249
  - spec/support/cassanity_helpers.rb
239
250
  - spec/support/fake_udp_socket.rb
251
+ - spec/unit/cassanity/addition_spec.rb
240
252
  - spec/unit/cassanity/argument_generators/batch_spec.rb
241
253
  - spec/unit/cassanity/argument_generators/column_families_spec.rb
242
254
  - spec/unit/cassanity/argument_generators/column_family_alter_spec.rb
@@ -261,6 +273,7 @@ test_files:
261
273
  - spec/unit/cassanity/argument_generators/where_clause_spec.rb
262
274
  - spec/unit/cassanity/argument_generators/with_clause_spec.rb
263
275
  - spec/unit/cassanity/client_spec.rb
276
+ - spec/unit/cassanity/collection_item_spec.rb
264
277
  - spec/unit/cassanity/column_family_spec.rb
265
278
  - spec/unit/cassanity/column_spec.rb
266
279
  - spec/unit/cassanity/connection_spec.rb
@@ -280,11 +293,14 @@ test_files:
280
293
  - spec/unit/cassanity/operators/gte_spec.rb
281
294
  - spec/unit/cassanity/operators/lt_spec.rb
282
295
  - spec/unit/cassanity/operators/lte_spec.rb
296
+ - spec/unit/cassanity/removal_spec.rb
283
297
  - spec/unit/cassanity/result_transformers/mirror_spec.rb
284
298
  - spec/unit/cassanity/result_transformers/result_to_array_spec.rb
285
299
  - spec/unit/cassanity/retry_strategies/exponential_backoff_spec.rb
286
300
  - spec/unit/cassanity/retry_strategies/retry_n_times_spec.rb
287
301
  - spec/unit/cassanity/retry_strategies/retry_strategy_spec.rb
288
302
  - spec/unit/cassanity/schema_spec.rb
303
+ - spec/unit/cassanity/set_addition_spec.rb
304
+ - spec/unit/cassanity/set_removal_spec.rb
289
305
  - spec/unit/cassanity/statement_spec.rb
290
306
  - spec/unit/cassanity_spec.rb