cassanity 0.3.0 → 0.4.0

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