cassanity 0.3.0 → 0.4.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 (66) hide show
  1. data/Changelog.md +10 -0
  2. data/Gemfile +5 -3
  3. data/README.md +22 -15
  4. data/examples/_shared.rb +5 -1
  5. data/examples/batch.rb +17 -23
  6. data/examples/column_families.rb +12 -13
  7. data/examples/counters.rb +10 -18
  8. data/examples/keyspaces.rb +12 -17
  9. data/examples/select_range.rb +29 -19
  10. data/lib/cassanity/argument_generators/batch.rb +8 -0
  11. data/lib/cassanity/argument_generators/column_family_alter.rb +1 -1
  12. data/lib/cassanity/argument_generators/column_family_create.rb +1 -1
  13. data/lib/cassanity/argument_generators/column_family_delete.rb +2 -22
  14. data/lib/cassanity/argument_generators/column_family_drop.rb +1 -1
  15. data/lib/cassanity/argument_generators/column_family_insert.rb +2 -24
  16. data/lib/cassanity/argument_generators/column_family_select.rb +1 -1
  17. data/lib/cassanity/argument_generators/column_family_truncate.rb +1 -1
  18. data/lib/cassanity/argument_generators/column_family_update.rb +2 -24
  19. data/lib/cassanity/argument_generators/keyspace_create.rb +1 -1
  20. data/lib/cassanity/argument_generators/keyspace_drop.rb +1 -1
  21. data/lib/cassanity/argument_generators/keyspace_use.rb +1 -1
  22. data/lib/cassanity/argument_generators/where_clause.rb +1 -0
  23. data/lib/cassanity/argument_generators/with_clause.rb +12 -6
  24. data/lib/cassanity/client.rb +65 -0
  25. data/lib/cassanity/column_family.rb +70 -17
  26. data/lib/cassanity/connection.rb +8 -0
  27. data/lib/cassanity/decrement.rb +2 -15
  28. data/lib/cassanity/executors/cassandra_cql.rb +37 -11
  29. data/lib/cassanity/increment.rb +2 -15
  30. data/lib/cassanity/instrumentation/log_subscriber.rb +27 -0
  31. data/lib/cassanity/instrumenters/memory.rb +27 -0
  32. data/lib/cassanity/instrumenters/noop.rb +9 -0
  33. data/lib/cassanity/keyspace.rb +42 -6
  34. data/lib/cassanity/operator.rb +9 -0
  35. data/lib/cassanity/range.rb +4 -0
  36. data/lib/cassanity/schema.rb +21 -0
  37. data/lib/cassanity/version.rb +1 -1
  38. data/lib/cassanity.rb +16 -2
  39. data/spec/integration/cassanity/column_family_spec.rb +59 -78
  40. data/spec/integration/cassanity/connection_spec.rb +18 -34
  41. data/spec/integration/cassanity/keyspace_spec.rb +24 -34
  42. data/spec/unit/cassanity/argument_generators/batch_spec.rb +51 -3
  43. data/spec/unit/cassanity/argument_generators/column_family_alter_spec.rb +6 -6
  44. data/spec/unit/cassanity/argument_generators/column_family_create_spec.rb +6 -6
  45. data/spec/unit/cassanity/argument_generators/column_family_delete_spec.rb +5 -5
  46. data/spec/unit/cassanity/argument_generators/column_family_drop_spec.rb +2 -2
  47. data/spec/unit/cassanity/argument_generators/column_family_insert_spec.rb +5 -5
  48. data/spec/unit/cassanity/argument_generators/column_family_select_spec.rb +12 -12
  49. data/spec/unit/cassanity/argument_generators/column_family_truncate_spec.rb +2 -2
  50. data/spec/unit/cassanity/argument_generators/column_family_update_spec.rb +5 -5
  51. data/spec/unit/cassanity/argument_generators/keyspace_create_spec.rb +4 -4
  52. data/spec/unit/cassanity/argument_generators/keyspace_drop_spec.rb +1 -1
  53. data/spec/unit/cassanity/argument_generators/keyspace_use_spec.rb +1 -1
  54. data/spec/unit/cassanity/argument_generators/where_clause_spec.rb +26 -0
  55. data/spec/unit/cassanity/argument_generators/with_clause_spec.rb +26 -0
  56. data/spec/unit/cassanity/client_spec.rb +159 -0
  57. data/spec/unit/cassanity/column_family_spec.rb +64 -17
  58. data/spec/unit/cassanity/connection_spec.rb +8 -0
  59. data/spec/unit/cassanity/executors/cassandra_cql_spec.rb +35 -19
  60. data/spec/unit/cassanity/instrumentors/memory_spec.rb +26 -0
  61. data/spec/unit/cassanity/instrumentors/noop_spec.rb +22 -0
  62. data/spec/unit/cassanity/keyspace_spec.rb +25 -3
  63. data/spec/unit/cassanity/operator_spec.rb +10 -0
  64. data/spec/unit/cassanity/schema_spec.rb +6 -0
  65. data/spec/unit/cassanity_spec.rb +6 -0
  66. metadata +15 -4
@@ -1,49 +1,30 @@
1
1
  require 'helper'
2
2
  require 'cassanity/keyspace'
3
- require 'cassanity/executors/cassandra_cql'
4
3
 
5
4
  describe Cassanity::ColumnFamily do
6
5
  let(:keyspace_name) { 'cassanity_test' }
7
6
  let(:column_family_name) { 'apps' }
8
7
  let(:counters_column_family_name) { 'counters' }
9
8
 
10
- let(:client) {
11
- CassandraCQL::Database.new('127.0.0.1:9160', {
12
- cql_version: '3.0.0',
13
- })
14
- }
9
+ let(:client) { Cassanity::Client.new }
10
+ let(:driver) { client.driver }
15
11
 
16
- let(:keyspace) {
17
- Cassanity::Keyspace.new({
18
- name: keyspace_name,
19
- executor: executor,
20
- })
21
- }
22
-
23
- let(:executor) {
24
- Cassanity::Executors::CassandraCql.new({
25
- client: client,
26
- })
27
- }
28
-
29
- let(:schema) {
30
- Cassanity::Schema.new({
31
- primary_key: :id,
32
- columns: {
33
- id: :timeuuid,
34
- name: :text,
35
- },
36
- with: {
37
- comment: 'For storing things',
38
- }
39
- })
40
- }
12
+ let(:keyspace) { client[keyspace_name] }
41
13
 
42
14
  let(:arguments) {
43
15
  {
44
16
  keyspace: keyspace,
45
17
  name: column_family_name,
46
- schema: schema,
18
+ schema: {
19
+ primary_key: :id,
20
+ columns: {
21
+ id: :timeuuid,
22
+ name: :text,
23
+ },
24
+ with: {
25
+ comment: 'For storing things',
26
+ }
27
+ },
47
28
  }
48
29
  }
49
30
 
@@ -52,40 +33,40 @@ describe Cassanity::ColumnFamily do
52
33
  }
53
34
 
54
35
  before do
55
- client_drop_keyspace(client, keyspace_name)
56
- client_create_keyspace(client, keyspace_name)
57
- client_create_column_family(client, column_family_name, "id text PRIMARY KEY, name text")
58
- client_create_column_family(client, counters_column_family_name, "id text PRIMARY KEY, views counter")
36
+ client_drop_keyspace(driver, keyspace_name)
37
+ client_create_keyspace(driver, keyspace_name)
38
+ client_create_column_family(driver, column_family_name, "id text PRIMARY KEY, name text")
39
+ client_create_column_family(driver, counters_column_family_name, "id text PRIMARY KEY, views counter")
59
40
  end
60
41
 
61
42
  after do
62
- client_drop_keyspace(client, keyspace_name)
43
+ client_drop_keyspace(driver, keyspace_name)
63
44
  end
64
45
 
65
46
  it "knows if it exists" do
66
47
  subject.exists?.should be_true
67
- client_drop_column_family(client, column_family_name)
48
+ client_drop_column_family(driver, column_family_name)
68
49
  subject.exists?.should be_false
69
50
  end
70
51
 
71
52
  it "can recreate when not created" do
72
- client_drop_column_family(client, column_family_name)
73
- client_column_family?(client, column_family_name).should be_false
53
+ client_drop_column_family(driver, column_family_name)
54
+ client_column_family?(driver, column_family_name).should be_false
74
55
  subject.recreate
75
- client_column_family?(client, column_family_name).should be_true
56
+ client_column_family?(driver, column_family_name).should be_true
76
57
  end
77
58
 
78
59
  it "can recreate when already created" do
79
- client_column_family?(client, column_family_name).should be_true
60
+ client_column_family?(driver, column_family_name).should be_true
80
61
  subject.recreate
81
- client_column_family?(client, column_family_name).should be_true
62
+ client_column_family?(driver, column_family_name).should be_true
82
63
  end
83
64
 
84
65
  it "can create itself" do
85
66
  column_family = described_class.new(arguments.merge(name: 'people'))
86
67
  column_family.create
87
68
 
88
- apps_column_family = client.schema.column_families.fetch(column_family.name)
69
+ apps_column_family = driver.schema.column_families.fetch(column_family.name)
89
70
  apps_column_family.comment.should eq('For storing things')
90
71
 
91
72
  columns = apps_column_family.columns
@@ -96,53 +77,53 @@ describe Cassanity::ColumnFamily do
96
77
  end
97
78
 
98
79
  it "can truncate" do
99
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
100
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
101
- result = client.execute("SELECT * FROM #{column_family_name}")
80
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
81
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
82
+ result = driver.execute("SELECT * FROM #{column_family_name}")
102
83
  result.rows.should eq(2)
103
84
 
104
85
  subject.truncate
105
86
 
106
- result = client.execute("SELECT * FROM #{column_family_name}")
87
+ result = driver.execute("SELECT * FROM #{column_family_name}")
107
88
  result.rows.should eq(0)
108
89
  end
109
90
 
110
91
  it "can drop" do
111
- client_column_family?(client, column_family_name).should be_true
92
+ client_column_family?(driver, column_family_name).should be_true
112
93
  subject.drop
113
- client_column_family?(client, column_family_name).should be_false
94
+ client_column_family?(driver, column_family_name).should be_false
114
95
  end
115
96
 
116
97
  it "can drop when using a different keyspace" do
117
- client_column_family?(client, column_family_name).should be_true
118
- client.execute('USE system')
98
+ client_column_family?(driver, column_family_name).should be_true
99
+ driver.execute('USE system')
119
100
  subject.drop
120
- client_column_family?(client, column_family_name).should be_false
101
+ client_column_family?(driver, column_family_name).should be_false
121
102
  end
122
103
 
123
104
  it "can alter" do
124
105
  subject.alter(add: {created_at: :timestamp})
125
106
 
126
- apps_column_family = client.schema.column_families.fetch(column_family_name)
107
+ apps_column_family = driver.schema.column_families.fetch(column_family_name)
127
108
  columns = apps_column_family.columns
128
109
  columns.should have_key('created_at')
129
110
  columns['created_at'].should eq('org.apache.cassandra.db.marshal.DateType')
130
111
 
131
112
  subject.alter(alter: {created_at: :timeuuid})
132
113
 
133
- apps_column_family = client.schema.column_families.fetch(column_family_name)
114
+ apps_column_family = driver.schema.column_families.fetch(column_family_name)
134
115
  columns = apps_column_family.columns
135
116
  columns.should have_key('created_at')
136
117
  columns['created_at'].should eq('org.apache.cassandra.db.marshal.TimeUUIDType')
137
118
 
138
119
  subject.alter(drop: :created_at)
139
120
 
140
- apps_column_family = client.schema.column_families.fetch(column_family_name)
121
+ apps_column_family = driver.schema.column_families.fetch(column_family_name)
141
122
  columns = apps_column_family.columns
142
123
  columns.should_not have_key('created_at')
143
124
 
144
125
  subject.alter(with: {comment: 'Some new comment'})
145
- apps_column_family = client.schema.column_families.fetch(column_family_name)
126
+ apps_column_family = driver.schema.column_families.fetch(column_family_name)
146
127
  apps_column_family.comment.should eq('Some new comment')
147
128
  end
148
129
 
@@ -152,7 +133,7 @@ describe Cassanity::ColumnFamily do
152
133
  column_name: :name,
153
134
  })
154
135
 
155
- apps = client.schema.column_families['apps']
136
+ apps = driver.schema.column_families['apps']
156
137
  apps_meta = apps.column_metadata
157
138
  index = apps_meta.detect { |c| c.index_name == 'apps_name_index' }
158
139
  index.should_not be_nil
@@ -161,15 +142,15 @@ describe Cassanity::ColumnFamily do
161
142
  name: :apps_name_index,
162
143
  })
163
144
 
164
- apps = client.schema.column_families['apps']
145
+ apps = driver.schema.column_families['apps']
165
146
  apps_meta = apps.column_metadata
166
147
  index = apps_meta.detect { |c| c.index_name == 'apps_name_index' }
167
148
  index.should be_nil
168
149
  end
169
150
 
170
151
  it "can select data" do
171
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
172
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
152
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
153
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
173
154
  result = subject.select({
174
155
  select: :name,
175
156
  where: {
@@ -192,12 +173,12 @@ describe Cassanity::ColumnFamily do
192
173
  }
193
174
 
194
175
  before do
195
- client.execute("CREATE COLUMNFAMILY #{name} (id text, ts int, value counter, PRIMARY KEY(id, ts))")
176
+ driver.execute("CREATE COLUMNFAMILY #{name} (id text, ts int, value counter, PRIMARY KEY(id, ts))")
196
177
  @id = 'foo'
197
- client.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 1)
198
- client.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 2)
199
- client.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 3)
200
- client.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 4)
178
+ driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 1)
179
+ driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 2)
180
+ driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 3)
181
+ driver.execute("UPDATE #{name} SET value = value + 1 WHERE id = ? AND ts = ?", @id, 4)
201
182
  end
202
183
 
203
184
  it "works including end" do
@@ -234,7 +215,7 @@ describe Cassanity::ColumnFamily do
234
215
  },
235
216
  })
236
217
 
237
- result = client.execute("SELECT * FROM #{column_family_name}")
218
+ result = driver.execute("SELECT * FROM #{column_family_name}")
238
219
  result.rows.should eq(1)
239
220
  row = result.fetch_hash
240
221
  row['id'].should eq('1')
@@ -242,22 +223,22 @@ describe Cassanity::ColumnFamily do
242
223
  end
243
224
 
244
225
  it "can update data" do
245
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
246
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
226
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
227
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
247
228
 
248
229
  subject.update({
249
230
  set: {name: 'New Name'},
250
231
  where: {id: '1'},
251
232
  })
252
233
 
253
- result = client.execute("SELECT * FROM #{column_family_name} WHERE id = '1'")
234
+ result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '1'")
254
235
  result.rows.should eq(1)
255
236
  row = result.fetch_hash
256
237
  row['id'].should eq('1')
257
238
  row['name'].should eq('New Name')
258
239
 
259
240
  # does not update other rows
260
- result = client.execute("SELECT * FROM #{column_family_name} WHERE id = '2'")
241
+ result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '2'")
261
242
  result.rows.should eq(1)
262
243
  row = result.fetch_hash
263
244
  row['id'].should eq('2')
@@ -278,7 +259,7 @@ describe Cassanity::ColumnFamily do
278
259
  where: {id: '1'},
279
260
  })
280
261
 
281
- result = client.execute("SELECT * FROM #{counters_column_family_name} WHERE id = '1'")
262
+ result = driver.execute("SELECT * FROM #{counters_column_family_name} WHERE id = '1'")
282
263
  result.rows.should eq(1)
283
264
  row = result.fetch_hash
284
265
  row['id'].should eq('1')
@@ -300,7 +281,7 @@ describe Cassanity::ColumnFamily do
300
281
  where: {id: '1'},
301
282
  })
302
283
 
303
- result = client.execute("SELECT * FROM #{counters_column_family_name} WHERE id = '1'")
284
+ result = driver.execute("SELECT * FROM #{counters_column_family_name} WHERE id = '1'")
304
285
  result.rows.should eq(1)
305
286
  row = result.fetch_hash
306
287
  row['id'].should eq('1')
@@ -309,21 +290,21 @@ describe Cassanity::ColumnFamily do
309
290
  end
310
291
 
311
292
  it "can delete data" do
312
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
313
- client.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
293
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '1', 'github')
294
+ driver.execute("INSERT INTO #{column_family_name} (id, name) VALUES (?, ?)", '2', 'gist')
314
295
 
315
- result = client.execute("SELECT * FROM #{column_family_name}")
296
+ result = driver.execute("SELECT * FROM #{column_family_name}")
316
297
  result.rows.should eq(2)
317
298
 
318
299
  subject.delete({
319
300
  where: {id: '1'},
320
301
  })
321
302
 
322
- result = client.execute("SELECT * FROM #{column_family_name} WHERE id = '1'")
303
+ result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '1'")
323
304
  result.rows.should eq(0)
324
305
 
325
306
  # does not delete other rows
326
- result = client.execute("SELECT * FROM #{column_family_name} WHERE id = '2'")
307
+ result = driver.execute("SELECT * FROM #{column_family_name} WHERE id = '2'")
327
308
  result.rows.should eq(1)
328
309
  end
329
310
  end
@@ -6,51 +6,35 @@ describe Cassanity::Connection do
6
6
  let(:keyspace_name) { 'cassanity_test' }
7
7
  let(:column_family_name) { 'apps' }
8
8
 
9
- let(:client) {
10
- CassandraCQL::Database.new('127.0.0.1:9160', {
11
- cql_version: '3.0.0',
12
- })
13
- }
14
-
15
- let(:executor) {
16
- Cassanity::Executors::CassandraCql.new({
17
- client: client,
18
- })
19
- }
9
+ let(:client) { Cassanity::Client.new }
10
+ let(:driver) { client.driver }
20
11
 
21
- subject {
22
- described_class.new({
23
- executor: executor,
24
- })
25
- }
12
+ subject { client.connection }
26
13
 
27
14
  before do
28
- client_drop_keyspace(client, keyspace_name)
15
+ client_drop_keyspace(driver, keyspace_name)
29
16
  end
30
17
 
31
18
  after do
32
- client_drop_keyspace(client, keyspace_name)
19
+ client_drop_keyspace(driver, keyspace_name)
33
20
  end
34
21
 
35
22
  it "can batch" do
36
- client_create_keyspace(client, keyspace_name)
37
- client_create_column_family(client, column_family_name, "id text PRIMARY KEY, name text")
38
-
39
- default_arguments = {
40
- keyspace_name: keyspace_name,
41
- name: column_family_name,
42
- }
23
+ client_create_keyspace(driver, keyspace_name)
24
+ client_create_column_family(driver, column_family_name, "id text PRIMARY KEY, name text")
43
25
 
44
26
  subject.batch({
27
+ keyspace_name: keyspace_name,
28
+ column_family_name: column_family_name,
45
29
  :modifications => [
46
- [:insert, default_arguments.merge(data: {id: '1', name: 'github'})],
47
- [:insert, default_arguments.merge(data: {id: '2', name: 'gist'})],
48
- [:update, default_arguments.merge(set: {name: 'github.com'}, where: {id: '1'})],
49
- [:delete, default_arguments.merge(where: {id: '2'})],
30
+ [:insert, data: {id: '1', name: 'github'}],
31
+ [:insert, data: {id: '2', name: 'gist'}],
32
+ [:update, set: {name: 'github.com'}, where: {id: '1'}],
33
+ [:delete, where: {id: '2'}],
50
34
  ]
51
35
  })
52
36
 
53
- result = client.execute("SELECT * FROM apps")
37
+ result = driver.execute("SELECT * FROM apps")
54
38
  result.rows.should be(1)
55
39
 
56
40
  rows = []
@@ -62,8 +46,8 @@ describe Cassanity::Connection do
62
46
  end
63
47
 
64
48
  it "knows keyspaces" do
65
- client_create_keyspace(client, 'something1')
66
- client_create_keyspace(client, 'something2')
49
+ client_create_keyspace(driver, 'something1')
50
+ client_create_keyspace(driver, 'something2')
67
51
 
68
52
  result = subject.keyspaces
69
53
  result.each do |keyspace|
@@ -75,7 +59,7 @@ describe Cassanity::Connection do
75
59
  names.should include('something1')
76
60
  names.should include('something2')
77
61
 
78
- client_drop_keyspace(client, 'something1')
79
- client_drop_keyspace(client, 'something2')
62
+ client_drop_keyspace(driver, 'something1')
63
+ client_drop_keyspace(driver, 'something2')
80
64
  end
81
65
  end
@@ -1,28 +1,18 @@
1
1
  require 'helper'
2
2
  require 'cassanity/keyspace'
3
- require 'cassanity/executors/cassandra_cql'
4
3
 
5
4
  describe Cassanity::Keyspace do
6
5
  let(:keyspace_name) { 'cassanity_test' }
7
6
  let(:self_created_keyspace_name) { 'self_created' }
8
7
  let(:column_family_name) { 'apps' }
9
8
 
10
- let(:client) {
11
- CassandraCQL::Database.new('127.0.0.1:9160', {
12
- cql_version: '3.0.0',
13
- })
14
- }
15
-
16
- let(:executor) {
17
- Cassanity::Executors::CassandraCql.new({
18
- client: client,
19
- })
20
- }
9
+ let(:client) { Cassanity::Client.new }
10
+ let(:driver) { client.driver }
21
11
 
22
12
  let(:required_arguments) {
23
13
  {
24
14
  name: keyspace_name,
25
- executor: executor,
15
+ executor: client.executor,
26
16
  }
27
17
  }
28
18
 
@@ -31,59 +21,59 @@ describe Cassanity::Keyspace do
31
21
  }
32
22
 
33
23
  before do
34
- client_drop_keyspace(client, keyspace_name)
35
- client_create_keyspace(client, keyspace_name)
24
+ client_drop_keyspace(driver, keyspace_name)
25
+ client_create_keyspace(driver, keyspace_name)
36
26
  end
37
27
 
38
28
  after do
39
- client_drop_keyspace(client, keyspace_name)
40
- client_drop_keyspace(client, self_created_keyspace_name)
29
+ client_drop_keyspace(driver, keyspace_name)
30
+ client_drop_keyspace(driver, self_created_keyspace_name)
41
31
  end
42
32
 
43
33
  it "can create" do
44
- client_keyspace?(client, self_created_keyspace_name).should be_false
34
+ client_keyspace?(driver, self_created_keyspace_name).should be_false
45
35
  instance = described_class.new(required_arguments.merge({
46
36
  name: self_created_keyspace_name,
47
37
  }))
48
38
  instance.create
49
- client_keyspace?(client, self_created_keyspace_name).should be_true
39
+ client_keyspace?(driver, self_created_keyspace_name).should be_true
50
40
  end
51
41
 
52
42
  it "knows if it exists" do
53
43
  subject.exists?.should be_true
54
- client_drop_keyspace(client, keyspace_name)
44
+ client_drop_keyspace(driver, keyspace_name)
55
45
  subject.exists?.should be_false
56
46
  end
57
47
 
58
48
  it "can recreate when not created" do
59
- client_drop_keyspace(client, keyspace_name)
60
- client_keyspace?(client, keyspace_name).should be_false
49
+ client_drop_keyspace(driver, keyspace_name)
50
+ client_keyspace?(driver, keyspace_name).should be_false
61
51
  subject.recreate
62
- client_keyspace?(client, keyspace_name).should be_true
52
+ client_keyspace?(driver, keyspace_name).should be_true
63
53
  end
64
54
 
65
55
  it "can recreate when already created" do
66
- client_keyspace?(client, keyspace_name).should be_true
56
+ client_keyspace?(driver, keyspace_name).should be_true
67
57
  subject.recreate
68
- client_keyspace?(client, keyspace_name).should be_true
58
+ client_keyspace?(driver, keyspace_name).should be_true
69
59
  end
70
60
 
71
61
  it "can use" do
72
- client.execute("USE system")
73
- client.keyspace.should_not eq(keyspace_name)
62
+ driver.execute("USE system")
63
+ driver.keyspace.should_not eq(keyspace_name)
74
64
  subject.use
75
- client.keyspace.should eq(keyspace_name)
65
+ driver.keyspace.should eq(keyspace_name)
76
66
  end
77
67
 
78
68
  it "can drop" do
79
- client_keyspace?(client, keyspace_name).should be_true
69
+ client_keyspace?(driver, keyspace_name).should be_true
80
70
  subject.drop
81
- client_keyspace?(client, keyspace_name).should be_false
71
+ client_keyspace?(driver, keyspace_name).should be_false
82
72
  end
83
73
 
84
74
  it "knows column families" do
85
- client_create_column_family(client, 'something1')
86
- client_create_column_family(client, 'something2')
75
+ client_create_column_family(driver, 'something1')
76
+ client_create_column_family(driver, 'something2')
87
77
 
88
78
  result = subject.column_families
89
79
  result.each do |column_family|
@@ -95,7 +85,7 @@ describe Cassanity::Keyspace do
95
85
  names.should include('something1')
96
86
  names.should include('something2')
97
87
 
98
- client_drop_column_family(client, 'something1')
99
- client_drop_column_family(client, 'something2')
88
+ client_drop_column_family(driver, 'something1')
89
+ client_drop_column_family(driver, 'something2')
100
90
  end
101
91
  end
@@ -7,13 +7,61 @@ describe Cassanity::ArgumentGenerators::Batch do
7
7
  cql = "BEGIN BATCH INSERT INTO users (id) VALUES (?) UPDATE users SET name = ? WHERE id = ? DELETE FROM users WHERE id = ? APPLY BATCH"
8
8
  subject.call({
9
9
  modifications: [
10
- [:insert, name: :users, data: {id: '1'}],
11
- [:update, name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
12
- [:delete, name: :users, where: {id: '1'}],
10
+ [:insert, column_family_name: :users, data: {id: '1'}],
11
+ [:update, column_family_name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
12
+ [:delete, column_family_name: :users, where: {id: '1'}],
13
13
  ],
14
14
  }).should eq([cql, '1', 'GitHub', '1', '1'])
15
15
  end
16
16
 
17
+ context "with :column_family_name" do
18
+ it "merges column_family_name with each set of modifications" do
19
+ cql = "BEGIN BATCH INSERT INTO users (id) VALUES (?) UPDATE users SET name = ? WHERE id = ? APPLY BATCH"
20
+ subject.call({
21
+ column_family_name: :users,
22
+ modifications: [
23
+ [:insert, data: {id: '1'}],
24
+ [:update, set: {name: 'GitHub'}, where: {id: '1'}],
25
+ ],
26
+ }).should eq([cql, '1', 'GitHub', '1'])
27
+ end
28
+
29
+ it "does not override command argument name" do
30
+ cql = "BEGIN BATCH INSERT INTO users (id) VALUES (?) UPDATE other_column_family SET name = ? WHERE id = ? APPLY BATCH"
31
+ subject.call({
32
+ column_family_name: :users,
33
+ modifications: [
34
+ [:insert, data: {id: '1'}],
35
+ [:update, column_family_name: :other_column_family, set: {name: 'GitHub'}, where: {id: '1'}],
36
+ ],
37
+ }).should eq([cql, '1', 'GitHub', '1'])
38
+ end
39
+ end
40
+
41
+ context "with :keyspace_name" do
42
+ it "merges column_family_name with each set of modifications" do
43
+ cql = "BEGIN BATCH INSERT INTO analytics.users (id) VALUES (?) UPDATE analytics.users SET name = ? WHERE id = ? APPLY BATCH"
44
+ subject.call({
45
+ keyspace_name: :analytics,
46
+ modifications: [
47
+ [:insert, column_family_name: :users, data: {id: '1'}],
48
+ [:update, column_family_name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
49
+ ],
50
+ }).should eq([cql, '1', 'GitHub', '1'])
51
+ end
52
+
53
+ it "does not override command argument keyspace_name" do
54
+ cql = "BEGIN BATCH INSERT INTO other_keyspace_name.users (id) VALUES (?) UPDATE analytics.users SET name = ? WHERE id = ? APPLY BATCH"
55
+ subject.call({
56
+ keyspace_name: :analytics,
57
+ modifications: [
58
+ [:insert, keyspace_name: :other_keyspace_name, column_family_name: :users, data: {id: '1'}],
59
+ [:update, column_family_name: :users, set: {name: 'GitHub'}, where: {id: '1'}],
60
+ ],
61
+ }).should eq([cql, '1', 'GitHub', '1'])
62
+ end
63
+ end
64
+
17
65
  context "with :using key" do
18
66
  subject {
19
67
  described_class.new({
@@ -7,7 +7,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
7
7
  cql = "ALTER COLUMNFAMILY apps"
8
8
  expected = [cql]
9
9
  subject.call({
10
- name: :apps,
10
+ column_family_name: :apps,
11
11
  }).should eq(expected)
12
12
  end
13
13
 
@@ -16,7 +16,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
16
16
  cql = "ALTER COLUMNFAMILY foo.apps"
17
17
  expected = [cql]
18
18
  subject.call({
19
- name: :apps,
19
+ column_family_name: :apps,
20
20
  keyspace_name: 'foo',
21
21
  }).should eq(expected)
22
22
  end
@@ -27,7 +27,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
27
27
  cql = "ALTER COLUMNFAMILY apps ALTER created_at TYPE timestamp"
28
28
  expected = [cql]
29
29
  subject.call({
30
- name: :apps,
30
+ column_family_name: :apps,
31
31
  alter: {
32
32
  created_at: :timestamp,
33
33
  },
@@ -40,7 +40,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
40
40
  cql = "ALTER COLUMNFAMILY apps ADD created_at timestamp"
41
41
  expected = [cql]
42
42
  subject.call({
43
- name: :apps,
43
+ column_family_name: :apps,
44
44
  add: {
45
45
  created_at: :timestamp,
46
46
  },
@@ -53,7 +53,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
53
53
  cql = "ALTER COLUMNFAMILY apps DROP created_at"
54
54
  expected = [cql]
55
55
  subject.call({
56
- name: :apps,
56
+ column_family_name: :apps,
57
57
  drop: :created_at,
58
58
  }).should eq(expected)
59
59
  end
@@ -74,7 +74,7 @@ describe Cassanity::ArgumentGenerators::ColumnFamilyAlter do
74
74
  cql = "ALTER COLUMNFAMILY apps WITH comment = ?"
75
75
  expected = [cql, 'Testing']
76
76
  subject.call({
77
- name: :apps,
77
+ column_family_name: :apps,
78
78
  with: {
79
79
  comment: 'Testing',
80
80
  }