eurydice 1.0.3-java → 1.1.0.b2-java

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  /ext
2
+ /pkg
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
1
  source :rubygems
2
2
 
3
+ gem 'pelops-jars', '1.3.0.b3'
4
+
3
5
  gemspec
4
6
 
5
7
  group :development do
data/Gemfile.lock CHANGED
@@ -1,19 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- eurydice (1.0.0-java)
5
- pelops-jars (= 1.2)
4
+ eurydice (1.1.0.b2-java)
5
+ pelops-jars (>= 1.2.9)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  bouncy-castle-java (1.5.0146.1)
11
- cassandra-jars (0.8.0-java)
11
+ cassandra-jars (1.0.0-java)
12
12
  diff-lcs (1.1.2)
13
13
  jruby-openssl (0.7.4)
14
14
  bouncy-castle-java
15
- pelops-jars (1.2-java)
16
- cassandra-jars (~> 0.8.0)
15
+ pelops-jars (1.3.0.b3-java)
16
+ cassandra-jars (~> 1.0.0)
17
17
  rake (0.9.2)
18
18
  rspec (2.6.0)
19
19
  rspec-core (~> 2.6.0)
@@ -30,5 +30,6 @@ PLATFORMS
30
30
  DEPENDENCIES
31
31
  eurydice!
32
32
  jruby-openssl
33
+ pelops-jars (= 1.3.0.b3)
33
34
  rake
34
35
  rspec
data/eurydice.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
 
18
18
  s.rubyforge_project = 'eurydice'
19
19
 
20
- s.add_dependency 'pelops-jars', '= 1.2'
20
+ s.add_dependency 'pelops-jars', '>= 1.2.9'
21
21
 
22
22
  s.files = `git ls-files`.split("\n")
23
23
  s.require_paths = %w(lib)
data/lib/cassandra.rb CHANGED
@@ -24,12 +24,14 @@ module Cassandra
24
24
  }.freeze
25
25
 
26
26
  MARSHAL_TYPES = {
27
- :bytes => 'org.apache.cassandra.db.marshal.BytesType'.freeze,
28
- :ascii => 'org.apache.cassandra.db.marshal.AsciiType'.freeze,
29
- :utf8 => 'org.apache.cassandra.db.marshal.UTF8Type'.freeze,
30
- :long => 'org.apache.cassandra.db.marshal.LongType'.freeze,
31
- :lexical_uuid => 'org.apache.cassandra.db.marshal.LexicalUUIDType'.freeze,
32
- :time_uuid => 'org.apache.cassandra.db.marshal.TimeUUIDType'.freeze
27
+ :bytes => 'org.apache.cassandra.db.marshal.BytesType'.freeze,
28
+ :ascii => 'org.apache.cassandra.db.marshal.AsciiType'.freeze,
29
+ :utf8 => 'org.apache.cassandra.db.marshal.UTF8Type'.freeze,
30
+ :long => 'org.apache.cassandra.db.marshal.LongType'.freeze,
31
+ :lexical_uuid => 'org.apache.cassandra.db.marshal.LexicalUUIDType'.freeze,
32
+ :time_uuid => 'org.apache.cassandra.db.marshal.TimeUUIDType'.freeze,
33
+ :counter => 'org.apache.cassandra.db.marshal.CounterColumnType'.freeze,
34
+ :counter_column => 'org.apache.cassandra.db.marshal.CounterColumnType'.freeze
33
35
  }.freeze
34
36
 
35
37
  INDEX_OPERATORS = {
@@ -79,6 +79,17 @@ module Eurydice
79
79
  end
80
80
  alias_method :insert, :update
81
81
 
82
+ def increment(row_key, column_key, amount=1, options={})
83
+ thrift_exception_handler do
84
+ mutator = @keyspace.create_mutator
85
+ mutator.write_counter_column(@name, to_pelops_bytes(row_key), to_pelops_bytes(column_key), amount)
86
+ mutator.execute(get_cl(options))
87
+ end
88
+ end
89
+ alias_method :inc, :increment
90
+ alias_method :incr, :increment
91
+ alias_method :increment_column, :increment
92
+
82
93
  def key?(row_key, options={})
83
94
  thrift_exception_handler do
84
95
  selector = @keyspace.create_selector
@@ -101,8 +112,13 @@ module Eurydice
101
112
  def get_column(row_key, column_key, options={})
102
113
  thrift_exception_handler do
103
114
  selector = @keyspace.create_selector
104
- column = selector.get_column_from_row(@name, row_key, column_key, get_cl(options))
105
- byte_array_to_s(column.get_value)
115
+ if counter_columns?
116
+ column = selector.get_counter_column_from_row(@name, to_pelops_bytes(row_key), to_pelops_bytes(column_key), get_cl(options))
117
+ column.get_value
118
+ else
119
+ column =selector.get_column_from_row(@name, to_pelops_bytes(row_key), to_pelops_bytes(column_key), get_cl(options))
120
+ byte_array_to_s(column.get_value)
121
+ end
106
122
  end
107
123
  rescue NotFoundError => e
108
124
  nil
@@ -158,11 +174,19 @@ module Eurydice
158
174
 
159
175
  EMPTY_STRING = ''.freeze
160
176
 
177
+ def counter_columns?
178
+ @is_counter_cf ||= definition[:default_validation_class] == Cassandra::MARSHAL_TYPES[:counter]
179
+ end
180
+
161
181
  def get_single(row_key, options={})
162
182
  thrift_exception_handler do
163
183
  selector = @keyspace.create_selector
164
184
  column_predicate = create_column_predicate(options)
165
- columns = selector.get_columns_from_row(@name, to_pelops_bytes(row_key), column_predicate, get_cl(options))
185
+ if counter_columns?
186
+ columns = selector.get_counter_columns_from_row(@name, to_pelops_bytes(row_key), column_predicate, get_cl(options))
187
+ else
188
+ columns = selector.get_columns_from_row(@name, to_pelops_bytes(row_key), column_predicate, get_cl(options))
189
+ end
166
190
  columns_to_h(columns, options)
167
191
  end
168
192
  end
@@ -172,7 +196,11 @@ module Eurydice
172
196
  selector = @keyspace.create_selector
173
197
  column_predicate = create_column_predicate(options)
174
198
  byte_row_keys = row_keys.map { |rk| to_pelops_bytes(rk) }
175
- rows = selector.get_columns_from_rows(@name, byte_row_keys, column_predicate, get_cl(options))
199
+ if counter_columns?
200
+ rows = selector.get_counter_columns_from_rows(@name, byte_row_keys, column_predicate, get_cl(options))
201
+ else
202
+ rows = selector.get_columns_from_rows(@name, byte_row_keys, column_predicate, get_cl(options))
203
+ end
176
204
  rows_to_h(rows, options)
177
205
  end
178
206
  end
@@ -218,7 +246,10 @@ module Eurydice
218
246
  types = options[:validations] || {}
219
247
  key_type = options[:comparator]
220
248
  key = byte_array_to_s(column.get_name, key_type)
221
- value = byte_array_to_s(column.get_value, types[key])
249
+ value = if counter_columns?
250
+ then column.get_value
251
+ else byte_array_to_s(column.get_value, types[key])
252
+ end
222
253
  return key, value
223
254
  end
224
255
 
@@ -16,8 +16,8 @@ module Pelops
16
16
  end
17
17
 
18
18
  module Eurydice
19
- def self.connect
20
- Pelops.connect
19
+ def self.connect(*args)
20
+ Pelops.connect(*args)
21
21
  end
22
22
 
23
23
  def self.disconnect!
@@ -29,7 +29,8 @@ module Eurydice
29
29
  host = options.fetch(:host, 'localhost')
30
30
  port = options.fetch(:port, 9160)
31
31
  pool_name = options.fetch(:pool_name, 'eurydice')
32
- Cluster.new(::Pelops::Cluster.new(host, port))
32
+ dynamic_node_discovery = options.fetch(:dynamic_node_discovery, false)
33
+ Cluster.new(::Pelops::Cluster.new(host, port, dynamic_node_discovery))
33
34
  end
34
35
 
35
36
  def self.keyspace(keyspace_name, host='localhost', port=9160, pool_name='eurydice')
@@ -2,5 +2,5 @@
2
2
 
3
3
 
4
4
  module Eurydice
5
- VERSION = '1.0.3'
5
+ VERSION = '1.1.0.b2'
6
6
  end
@@ -181,6 +181,12 @@ module Eurydice
181
181
  @cf = @keyspace.column_family('test_family')
182
182
  @cf.truncate!
183
183
  end
184
+
185
+ before do
186
+ @counter_cf = @keyspace.column_family('counter_family', :create => false)
187
+ @counter_cf.create!(:default_validation_class => :counter) unless @counter_cf.exists?
188
+ @counter_cf.truncate!
189
+ end
184
190
 
185
191
  describe '#update/#insert' do
186
192
  it 'writes a column' do
@@ -230,6 +236,26 @@ module Eurydice
230
236
  end
231
237
  end
232
238
  end
239
+
240
+ describe '#increment' do
241
+ it 'can increment a counter column' do
242
+ @cf.increment('ABC', 'count')
243
+ @cf.get_column('ABC', 'count').should == 1
244
+ end
245
+
246
+ it 'can increment a counter column by the specified amount' do
247
+ @cf.increment('ABC', 'count', 3)
248
+ @cf.increment('ABC', 'count', 2)
249
+ @cf.get_column('ABC', 'count').should == 5
250
+ end
251
+
252
+ [:inc, :incr, :increment_column].each do |name|
253
+ it "is aliased as #{name}" do
254
+ @cf.send(name, 'ABC', 'count')
255
+ @cf.get_column('ABC', 'count').should == 1
256
+ end
257
+ end
258
+ end
233
259
 
234
260
  describe '#get' do
235
261
  context 'with a single row key' do
@@ -275,6 +301,14 @@ module Eurydice
275
301
  it 'returns nil if no row was found' do
276
302
  @cf.get('XYZ').should be_nil
277
303
  end
304
+
305
+ it 'loads the value of counter columns' do
306
+ @counter_cf.increment('ABC', 'a', 1)
307
+ @counter_cf.increment('ABC', 'b', 2)
308
+ @counter_cf.increment('ABC', 'c', 4)
309
+ @counter_cf.increment('ABC', 'd', 8)
310
+ @counter_cf.get('ABC', :columns => %w(a b c d)).should == {'a' => 1, 'b' => 2, 'c' => 4, 'd' => 8}
311
+ end
278
312
  end
279
313
 
280
314
  context 'with multiple row keys' do
@@ -331,6 +365,17 @@ module Eurydice
331
365
  it 'returns an empty hash if no rows exist' do
332
366
  @cf.get(%w(ABC GHI)).should == {}
333
367
  end
368
+
369
+ it 'loads the value of counter columns' do
370
+ @counter_cf.increment('ABC', 'a', 1)
371
+ @counter_cf.increment('ABC', 'b', 2)
372
+ @counter_cf.increment('DEF', 'c', 4)
373
+ @counter_cf.increment('DEF', 'd', 8)
374
+ @counter_cf.get(%w(ABC DEF), :columns => %w(a b c d)).should == {
375
+ 'ABC' => {'a' => 1, 'b' => 2},
376
+ 'DEF' => {'c' => 4, 'd' => 8}
377
+ }
378
+ end
334
379
  end
335
380
 
336
381
  context 'with options' do
@@ -372,11 +417,16 @@ module Eurydice
372
417
  @cf.insert('ABC', 'xyz' => 'abc', 'hello' => 'world', 'foo' => 'bar')
373
418
  @cf.get_column('XYZ', 'abc').should be_nil
374
419
  end
420
+
421
+ it 'returns the value of a counter column' do
422
+ @counter_cf.increment('ABC', 'x', 8)
423
+ @counter_cf.get_column('ABC', 'x').should == 8
424
+ end
375
425
  end
376
426
 
377
427
  describe '#get_column_count' do
378
428
  it 'returns the number of columns in the specified row' do
379
- @cf.insert('ABC', Hash[('a'..'z').zip(0..9 * 10)])
429
+ @cf.insert('ABC', Hash[('a'..'z').zip(0..100)])
380
430
  @cf.get_column_count('ABC').should == 26
381
431
  end
382
432
 
@@ -385,12 +435,12 @@ module Eurydice
385
435
  end
386
436
 
387
437
  it 'returns the number of columns in the specified range' do
388
- @cf.insert('ABC', Hash[('a'..'z').zip(0..9 * 10)])
438
+ @cf.insert('ABC', Hash[('a'..'z').zip(0..100)])
389
439
  @cf.get_column_count('ABC', :columns => 'm'..'q').should == 5
390
440
  end
391
441
 
392
442
  it 'returns the number of columns after the specified column' do
393
- @cf.insert('ABC', Hash[('a'..'z').zip(0..9 * 10)])
443
+ @cf.insert('ABC', Hash[('a'..'z').zip(0..100)])
394
444
  @cf.get_column_count('ABC', :from_column => 's').should == 8
395
445
  end
396
446
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eurydice
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 1.0.3
4
+ prerelease: 6
5
+ version: 1.1.0.b2
6
6
  platform: java
7
7
  authors:
8
8
  - Theo Hultberg
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-11-08 00:00:00 Z
13
+ date: 2011-11-28 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: pelops-jars
@@ -18,9 +18,9 @@ dependencies:
18
18
  requirement: &id001 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
- - - "="
21
+ - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "1.2"
23
+ version: 1.2.9
24
24
  type: :runtime
25
25
  version_requirements: *id001
26
26
  description: ""
@@ -76,9 +76,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
76
  required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  none: false
78
78
  requirements:
79
- - - ">="
79
+ - - ">"
80
80
  - !ruby/object:Gem::Version
81
- version: "0"
81
+ version: 1.3.1
82
82
  requirements: []
83
83
 
84
84
  rubyforge_project: eurydice