gotime-cassandra_object 4.10.4 → 4.10.5
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.
- checksums.yaml +4 -4
- data/gotime-cassandra_object.gemspec +1 -1
- data/lib/cassandra_object/base.rb +1 -35
- data/lib/cassandra_object/counter_base.rb +73 -0
- data/lib/cassandra_object/model.rb +37 -0
- data/lib/gotime-cassandra_object.rb +2 -0
- data/test/unit/counter_base_test.rb +43 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7065981f0726fd662b2d6a42d8b2c8938e56b974
|
4
|
+
data.tar.gz: cbd7d2ba31303203624b2bce28c5fc3b61737d38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32474823df1bbb7ffe2b750896c88174b28310fe1f26212d848fabbb29a267215e41c2367cde0f0706fb748362730a1d806d3ae5d9cb76f227f9aebca1c28b62
|
7
|
+
data.tar.gz: 735e41f64fc8e187f047ab3ceef93fb607a1db4b4e4fd1bccd0bd11e1b2c0db487a1b413f82bbf146a7be1dcc6e63a40c6eb05f3ddf543142c59f43aa43c431f
|
@@ -5,41 +5,6 @@ require 'cassandra_object/types'
|
|
5
5
|
|
6
6
|
module CassandraObject
|
7
7
|
class Base
|
8
|
-
class << self
|
9
|
-
def column_family=(column_family)
|
10
|
-
@column_family = column_family
|
11
|
-
end
|
12
|
-
|
13
|
-
def column_family
|
14
|
-
@column_family ||= base_class.name.pluralize
|
15
|
-
end
|
16
|
-
|
17
|
-
def base_class
|
18
|
-
class_of_active_record_descendant(self)
|
19
|
-
end
|
20
|
-
|
21
|
-
def config=(config)
|
22
|
-
@@config = config.is_a?(Hash) ? CassandraObject::Config.new(config) : config
|
23
|
-
end
|
24
|
-
|
25
|
-
def config
|
26
|
-
@@config
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
# Returns the class descending directly from ActiveRecord::Base or an
|
32
|
-
# abstract class, if any, in the inheritance hierarchy.
|
33
|
-
def class_of_active_record_descendant(klass)
|
34
|
-
if klass == Base || klass.superclass == Base
|
35
|
-
klass
|
36
|
-
elsif klass.superclass.nil?
|
37
|
-
raise "#{name} doesn't belong in a hierarchy descending from CassandraObject"
|
38
|
-
else
|
39
|
-
class_of_active_record_descendant(klass.superclass)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
8
|
|
44
9
|
extend ActiveModel::Naming
|
45
10
|
include ActiveModel::Conversion
|
@@ -61,6 +26,7 @@ module CassandraObject
|
|
61
26
|
include Savepoints
|
62
27
|
include Scoping
|
63
28
|
include Core
|
29
|
+
extend Model
|
64
30
|
|
65
31
|
include Serialization
|
66
32
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module CassandraObject
|
2
|
+
class CounterBase
|
3
|
+
class << self
|
4
|
+
def base_class
|
5
|
+
self
|
6
|
+
end
|
7
|
+
|
8
|
+
def config
|
9
|
+
Base.config
|
10
|
+
end
|
11
|
+
|
12
|
+
def get(group, counter=nil)
|
13
|
+
cql_string = "SELECT #{select_counter(counter)} FROM #{column_family} WHERE KEY = ?" # Multiple keys at once doesn't result right
|
14
|
+
|
15
|
+
results = []
|
16
|
+
attributes = execute_cql(cql_string, group).fetch_hash
|
17
|
+
attributes.delete("KEY")
|
18
|
+
results << attributes
|
19
|
+
|
20
|
+
if !group.is_a?(Array) && results.size <= 1
|
21
|
+
results = results.first
|
22
|
+
if counter && !counter.is_a?(Array) && results.size <= 1
|
23
|
+
results = results.values.first
|
24
|
+
end
|
25
|
+
end
|
26
|
+
results
|
27
|
+
end
|
28
|
+
|
29
|
+
def update(group, counter, count=nil)
|
30
|
+
execute_cql "UPDATE #{column_family} SET #{counter_updates(counter, count)} WHERE KEY = '#{group}'"
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def counter_updates(counter, count=nil)
|
36
|
+
if !count.nil?
|
37
|
+
counters = if counter.is_a?(Array); counter else [counter] end
|
38
|
+
counters.map do |c| "'#{c}' = '#{c}' #{incr_decr(count)}" end.join ', '
|
39
|
+
else
|
40
|
+
counter.map do |c, count| "'#{c}' = '#{c}' #{incr_decr(count)}" end.join ', '
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def incr_decr(count)
|
45
|
+
if count >= 0
|
46
|
+
"+ #{count}"
|
47
|
+
else
|
48
|
+
"- #{count * -1}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def select_counter(counter)
|
53
|
+
if counter.nil?
|
54
|
+
"*"
|
55
|
+
else
|
56
|
+
counter.is_a?(Array) ? counter.map do |c| "'#{c}'" end.join(",") : "'#{counter}'"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
extend ActiveModel::Naming
|
63
|
+
include ActiveModel::Conversion
|
64
|
+
extend ActiveSupport::DescendantsTracker
|
65
|
+
|
66
|
+
include Connection
|
67
|
+
include Consistency
|
68
|
+
include Identity
|
69
|
+
include Inspect
|
70
|
+
extend Model
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module CassandraObject
|
2
|
+
module Model
|
3
|
+
def column_family=(column_family)
|
4
|
+
@column_family = column_family
|
5
|
+
end
|
6
|
+
|
7
|
+
def column_family
|
8
|
+
@column_family ||= base_class.name.pluralize
|
9
|
+
end
|
10
|
+
|
11
|
+
def base_class
|
12
|
+
class_of_active_record_descendant(self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def config=(config)
|
16
|
+
@@config = config.is_a?(Hash) ? CassandraObject::Config.new(config) : config
|
17
|
+
end
|
18
|
+
|
19
|
+
def config
|
20
|
+
@@config
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Returns the class descending directly from ActiveRecord::Base or an
|
26
|
+
# abstract class, if any, in the inheritance hierarchy.
|
27
|
+
def class_of_active_record_descendant(klass)
|
28
|
+
if klass == Base || klass.superclass == Base
|
29
|
+
klass
|
30
|
+
elsif klass.superclass.nil?
|
31
|
+
raise "#{name} doesn't belong in a hierarchy descending from CassandraObject"
|
32
|
+
else
|
33
|
+
class_of_active_record_descendant(klass.superclass)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CassandraObject::CounterBaseTest < CassandraObject::TestCase
|
4
|
+
class AppCounts < CassandraObject::CounterBase
|
5
|
+
self.column_family = 'AppCounts'
|
6
|
+
end
|
7
|
+
|
8
|
+
def setup
|
9
|
+
CassandraObject::Schema.create_column_family 'AppCounts', 'default_validation' => 'CounterColumnType', 'replicate_on_write' => 'true'
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
CassandraObject::Schema.drop_column_family 'AppCounts'
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'class_loading' do
|
17
|
+
assert_equal CassandraObject::CounterBase, CassandraObject::CounterBase
|
18
|
+
end
|
19
|
+
|
20
|
+
test 'single update' do
|
21
|
+
|
22
|
+
AppCounts.update('poop', 'smells', 0)
|
23
|
+
|
24
|
+
assert_equal 0, AppCounts.get("poop", "smells")
|
25
|
+
|
26
|
+
AppCounts.update('poop', 'smells', 60)
|
27
|
+
|
28
|
+
assert_equal 60, AppCounts.get("poop", "smells")
|
29
|
+
|
30
|
+
assert_equal Hash['smells' => 60], AppCounts.get("poop")
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
test 'multiple update' do
|
35
|
+
|
36
|
+
AppCounts.update('poop', {'hankey_sightings' => 3, 'christmas_days' => 5})
|
37
|
+
|
38
|
+
assert_equal Hash['hankey_sightings' => 3, 'christmas_days' => 5], AppCounts.get("poop")
|
39
|
+
|
40
|
+
assert_equal 5, AppCounts.get("poop", "christmas_days")
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gotime-cassandra_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.10.
|
4
|
+
version: 4.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Koziarski
|
@@ -98,10 +98,12 @@ files:
|
|
98
98
|
- lib/cassandra_object/connection.rb
|
99
99
|
- lib/cassandra_object/consistency.rb
|
100
100
|
- lib/cassandra_object/core.rb
|
101
|
+
- lib/cassandra_object/counter_base.rb
|
101
102
|
- lib/cassandra_object/errors.rb
|
102
103
|
- lib/cassandra_object/identity.rb
|
103
104
|
- lib/cassandra_object/inspect.rb
|
104
105
|
- lib/cassandra_object/log_subscriber.rb
|
106
|
+
- lib/cassandra_object/model.rb
|
105
107
|
- lib/cassandra_object/persistence.rb
|
106
108
|
- lib/cassandra_object/railtie.rb
|
107
109
|
- lib/cassandra_object/savepoints.rb
|
@@ -147,6 +149,7 @@ files:
|
|
147
149
|
- test/unit/connection_test.rb
|
148
150
|
- test/unit/consistency_test.rb
|
149
151
|
- test/unit/core_test.rb
|
152
|
+
- test/unit/counter_base_test.rb
|
150
153
|
- test/unit/identity_test.rb
|
151
154
|
- test/unit/inspect_test.rb
|
152
155
|
- test/unit/log_subscriber_test.rb
|