cequel 1.4.2 → 1.4.3

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile.lock +19 -12
  4. data/Rakefile +5 -1
  5. data/lib/cequel/record/data_set_builder.rb +9 -2
  6. data/lib/cequel/record/record_set.rb +16 -2
  7. data/lib/cequel/record/tasks.rb +6 -2
  8. data/lib/cequel/version.rb +1 -1
  9. data/spec/examples/metal/data_set_spec.rb +113 -106
  10. data/spec/examples/metal/keyspace_spec.rb +7 -15
  11. data/spec/examples/record/associations_spec.rb +30 -30
  12. data/spec/examples/record/callbacks_spec.rb +25 -25
  13. data/spec/examples/record/dirty_spec.rb +11 -10
  14. data/spec/examples/record/list_spec.rb +33 -33
  15. data/spec/examples/record/map_spec.rb +57 -41
  16. data/spec/examples/record/mass_assignment_spec.rb +5 -5
  17. data/spec/examples/record/naming_spec.rb +2 -2
  18. data/spec/examples/record/persistence_spec.rb +23 -23
  19. data/spec/examples/record/properties_spec.rb +19 -19
  20. data/spec/examples/record/record_set_spec.rb +155 -151
  21. data/spec/examples/record/schema_spec.rb +7 -7
  22. data/spec/examples/record/scoped_spec.rb +2 -2
  23. data/spec/examples/record/serialization_spec.rb +2 -2
  24. data/spec/examples/record/set_spec.rb +27 -23
  25. data/spec/examples/record/validations_spec.rb +13 -13
  26. data/spec/examples/schema/table_reader_spec.rb +85 -79
  27. data/spec/examples/schema/table_synchronizer_spec.rb +9 -9
  28. data/spec/examples/schema/table_updater_spec.rb +17 -17
  29. data/spec/examples/schema/table_writer_spec.rb +33 -33
  30. data/spec/examples/type_spec.rb +55 -55
  31. data/spec/support/helpers.rb +18 -10
  32. metadata +18 -5
  33. data/spec/shared/readable_dictionary.rb +0 -192
@@ -65,7 +65,7 @@ module Cequel
65
65
  end
66
66
 
67
67
  def self.host
68
- '127.0.0.1'
68
+ ENV['CEQUEL_TEST_HOST'] || '127.0.0.1'
69
69
  end
70
70
 
71
71
  def self.port
@@ -77,7 +77,14 @@ module Cequel
77
77
  end
78
78
 
79
79
  def self.keyspace_name
80
- ENV['CEQUEL_TEST_KEYSPACE'] || 'cequel_test'
80
+ ENV.fetch('CEQUEL_TEST_KEYSPACE') do
81
+ test_env_number = ENV['TEST_ENV_NUMBER']
82
+ if test_env_number.present?
83
+ "cequel_test_#{test_env_number}"
84
+ else
85
+ 'cequel_test'
86
+ end
87
+ end
81
88
  end
82
89
 
83
90
  def self.legacy_connection
@@ -106,28 +113,29 @@ module Cequel
106
113
  Helpers.legacy_connection
107
114
  end
108
115
 
109
- def max_statements!(number)
110
- cequel.client.should_receive(:execute).at_most(number).times.and_call_original
116
+ def expect_statement_count(number)
117
+ allow(cequel.client).to receive(:execute).and_call_original
118
+ yield
119
+ expect(cequel.client).to have_received(:execute).exactly(number).times
111
120
  end
112
121
 
113
122
  def disallow_queries!
114
- cequel.client.should_not_receive(:execute)
123
+ expect(cequel.client).to_not receive(:execute)
115
124
  end
116
125
 
117
126
  def with_client_error(error)
118
- cequel.client.stub(:execute).and_raise(error)
127
+ allow(cequel.client).to receive(:execute).once.and_raise(error)
119
128
  begin
120
129
  yield
121
130
  ensure
122
- cequel.client.unstub(:execute)
131
+ allow(cequel.client).to receive(:execute).and_call_original
123
132
  end
124
133
  end
125
134
 
126
135
  def expect_query_with_consistency(matcher, consistency)
127
- expect(cequel.client).to receive(:execute).with(matcher, consistency)
128
- .and_call_original
136
+ allow(cequel.client).to receive(:execute).and_call_original
129
137
  yield
130
- RSpec::Mocks.proxy_for(cequel.client).reset
138
+ expect(cequel.client).to have_received(:execute).with(matcher, consistency)
131
139
  end
132
140
  end
133
141
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mat Brown
@@ -20,7 +20,7 @@ authors:
20
20
  autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
- date: 2014-09-25 00:00:00.000000000 Z
23
+ date: 2014-10-05 00:00:00.000000000 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activemodel
@@ -110,14 +110,28 @@ dependencies:
110
110
  requirements:
111
111
  - - "~>"
112
112
  - !ruby/object:Gem::Version
113
- version: '2.0'
113
+ version: '3.1'
114
114
  type: :development
115
115
  prerelease: false
116
116
  version_requirements: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - "~>"
119
119
  - !ruby/object:Gem::Version
120
- version: '2.0'
120
+ version: '3.1'
121
+ - !ruby/object:Gem::Dependency
122
+ name: rspec-its
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '1.0'
128
+ type: :development
129
+ prerelease: false
130
+ version_requirements: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - "~>"
133
+ - !ruby/object:Gem::Version
134
+ version: '1.0'
121
135
  - !ruby/object:Gem::Dependency
122
136
  name: rubocop
123
137
  requirement: !ruby/object:Gem::Requirement
@@ -273,7 +287,6 @@ files:
273
287
  - spec/examples/spec_support/preparation_spec.rb
274
288
  - spec/examples/type_spec.rb
275
289
  - spec/examples/uuids_spec.rb
276
- - spec/shared/readable_dictionary.rb
277
290
  - spec/support/helpers.rb
278
291
  - spec/support/result_stub.rb
279
292
  - templates/config/cequel.yml
@@ -1,192 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- shared_examples 'readable dictionary' do
3
- let(:uuid1) { uuid }
4
- let(:uuid2) { uuid }
5
- let(:uuid3) { uuid }
6
- let(:cf) { dictionary.class.column_family.column_family }
7
-
8
- context 'without row in memory' do
9
-
10
- describe '#each_pair' do
11
-
12
- it 'should load columns in batches and yield them' do
13
- connection.should_receive(:execute).
14
- with("SELECT FIRST 2 * FROM #{cf} WHERE ? = ? LIMIT 1", :blog_id, 1).
15
- and_return result_stub('blog_id' => 1, uuid1 => 1, uuid2 => 2)
16
- connection.should_receive(:execute).
17
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid2, '', :blog_id, 1).
18
- and_return result_stub('blog_id' => 1, uuid2 => 2, uuid3 => 3)
19
- connection.should_receive(:execute).
20
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid3, '', :blog_id, 1).
21
- and_return result_stub({'blog_id' => 1})
22
- hash = {}
23
- dictionary.each_pair do |key, value|
24
- hash[key] = value
25
- end
26
- hash.should == {uuid1 => 1, uuid2 => 2, uuid3 => 3}
27
- end
28
-
29
- end
30
-
31
- describe '#[]' do
32
-
33
- it 'should load column from cassandra' do
34
- connection.stub(:execute).
35
- with("SELECT ? FROM #{cf} WHERE ? = ? LIMIT 1", [uuid1], :blog_id, 1).
36
- and_return result_stub(uuid1 => 1)
37
- dictionary[uuid1].should == 1
38
- end
39
-
40
- end
41
-
42
- describe '#slice' do
43
- it 'should load columns from data store' do
44
- connection.stub(:execute).
45
- with("SELECT ? FROM #{cf} WHERE ? = ? LIMIT 1", [uuid1,uuid2], :blog_id, 1).
46
- and_return result_stub(uuid1 => 1, uuid2 => 2)
47
- dictionary.slice(uuid1, uuid2).should == {uuid1 => 1, uuid2 => 2}
48
- end
49
- end
50
-
51
- describe '#keys' do
52
- it 'should load keys from data store' do
53
- connection.should_receive(:execute).
54
- with("SELECT FIRST 2 * FROM #{cf} WHERE ? = ? LIMIT 1", :blog_id, 1).
55
- and_return result_stub('blog_id' => 1, uuid1 => 1, uuid2 => 2)
56
- connection.should_receive(:execute).
57
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid2, '', :blog_id, 1).
58
- and_return result_stub('blog_id' => 1, uuid2 => 2, uuid3 => 3)
59
- connection.should_receive(:execute).
60
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid3, '', :blog_id, 1).
61
- and_return result_stub({'blog_id' => 1})
62
- dictionary.keys.should == [uuid1, uuid2, uuid3]
63
- end
64
- end
65
-
66
- describe '#values' do
67
- it 'should load values from data store' do
68
- connection.should_receive(:execute).
69
- with("SELECT FIRST 2 * FROM #{cf} WHERE ? = ? LIMIT 1", :blog_id, 1).
70
- and_return result_stub('blog_id' => 1, uuid1 => 1, uuid2 => 2)
71
- connection.should_receive(:execute).
72
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid2, '', :blog_id, 1).
73
- and_return result_stub('blog_id' => 1, uuid2 => 2, uuid3 => 3)
74
- connection.should_receive(:execute).
75
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid3, '', :blog_id, 1).
76
- and_return result_stub({'blog_id' => 1})
77
- dictionary.values.should == [1, 2, 3]
78
- end
79
- end
80
-
81
- describe '#first' do
82
- it 'should load value from data store' do
83
- connection.should_receive(:execute).
84
- with("SELECT FIRST 1 * FROM #{cf} WHERE ? = ? LIMIT 1", :blog_id, 1).
85
- and_return result_stub('blog_id' => 1, uuid1 => 1)
86
- dictionary.first.should == [uuid1, 1]
87
- end
88
- end
89
-
90
- describe '#last' do
91
- it 'should load value from data store' do
92
- connection.should_receive(:execute).
93
- with("SELECT FIRST 1 REVERSED * FROM #{cf} WHERE ? = ? LIMIT 1", :blog_id, 1).
94
- and_return result_stub('blog_id' => 1, uuid3 => 3)
95
- dictionary.last.should == [uuid3, 3]
96
- end
97
- end
98
-
99
- end
100
-
101
- context 'with data loaded in memory' do
102
- before do
103
- connection.stub(:execute).
104
- with("SELECT FIRST 2 * FROM #{cf} WHERE ? = ? LIMIT 1", :blog_id, 1).
105
- and_return result_stub('blog_id' => 1, uuid1 => 1, uuid2 => 2)
106
- connection.stub(:execute).
107
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid2, '', :blog_id, 1).
108
- and_return result_stub('blog_id' => 1, uuid2 => 2, uuid3 => 3)
109
- connection.stub(:execute).
110
- with("SELECT FIRST 2 ?..? FROM #{cf} WHERE ? = ? LIMIT 1", uuid3, '', :blog_id, 1).
111
- and_return result_stub({'blog_id' => 1})
112
- dictionary.load
113
- connection.should_not_receive(:execute)
114
- end
115
-
116
- describe '#each_pair' do
117
- it 'should yield data from memory' do
118
- hash = {}
119
- dictionary.each_pair do |key, value|
120
- hash[key] = value
121
- end
122
- hash.should == {uuid1 => 1, uuid2 => 2, uuid3 => 3}
123
- end
124
- end
125
-
126
- describe '#[]' do
127
- it 'should return value from memory' do
128
- dictionary[uuid1].should == 1
129
- end
130
- end
131
-
132
- describe '#slice' do
133
- it 'should return slice of data in memory' do
134
- dictionary.slice(uuid1, uuid2).should == {uuid1 => 1, uuid2 => 2}
135
- end
136
- end
137
-
138
- describe '#first' do
139
- it 'should return first element in memory' do
140
- dictionary.first.should == [uuid1, 1]
141
- end
142
- end
143
-
144
- describe '#last' do
145
- it 'should return first element in memory' do
146
- dictionary.last.should == [uuid3, 3]
147
- end
148
- end
149
-
150
- describe '#keys' do
151
- it 'should return keys from memory' do
152
- dictionary.keys.should == [uuid1, uuid2, uuid3]
153
- end
154
- end
155
-
156
- describe '#values' do
157
- it 'should return values from memory' do
158
- dictionary.values.should == [1, 2, 3]
159
- end
160
- end
161
- end
162
-
163
- describe '::load' do
164
- let :comments do
165
- [
166
- {'user' => 'Cequel User', 'comment' => 'How do I load multiple rows?'},
167
- {'user' => 'Mat Brown', 'comment' => 'Just use the ::load class method'}
168
- ]
169
- end
170
-
171
- it 'should load all rows in one query' do
172
- connection.stub(:execute).
173
- with(
174
- 'SELECT * FROM post_comments WHERE ? IN (?)',
175
- 'post_id', [1, 2]
176
- ).and_return result_stub(
177
- *comments.each_with_index.
178
- map { |comment, i| {'post_id' => i+1, i+4 => comment.to_json} }
179
- )
180
- rows = PostComments.load(1, 2)
181
- rows.map { |row| row.post_id }.should == [1, 2]
182
- rows.map { |row| row.values.first }.should == comments
183
- end
184
- end
185
-
186
- private
187
-
188
- def uuid
189
- SimpleUUID::UUID.new.to_guid
190
- end
191
- end
192
-