cassanity 0.6.0.beta5 → 0.6.0

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