gotime-cassandra_object 4.12.1 → 4.12.2
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/adapters/cassandra_adapter.rb +8 -1
- data/lib/cassandra_object/adapters/hstore_adapter.rb +9 -1
- data/lib/cassandra_object/attribute_methods/typecasting.rb +2 -2
- data/lib/cassandra_object/connection.rb +11 -3
- data/lib/cassandra_object/counter_base.rb +1 -1
- data/lib/cassandra_object/model.rb +1 -1
- data/lib/cassandra_object/schema.rb +9 -7
- data/lib/cassandra_object/schema/tasks.rb +2 -2
- data/lib/cassandra_object/tasks/ks.rake +5 -13
- data/lib/cassandra_object/types.rb +0 -1
- data/lib/gotime-cassandra_object.rb +0 -2
- metadata +2 -6
- data/lib/cassandra_object/config.rb +0 -15
- data/lib/cassandra_object/types/hash_type.rb +0 -52
- data/test/unit/config_test.rb +0 -23
- data/test/unit/types/hash_type_test.rb +0 -77
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bc6183624ab74d725fd7e3987ccf1e94692b18d
|
4
|
+
data.tar.gz: 3f566d83342e4ee9732a7ac48edcf37ab753f3bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 685060d649e8529db79557cdc23397adf1bb50bde0b22e5dc262d95f223f133470df90ea0b0f2999e9fd0acaa68db2c916b8d55cb43d1f17629d88cab1026843
|
7
|
+
data.tar.gz: e8f7b4a16e6b51391d6cb82b56ad5dda6446de2f04201b71ff6cd8e01b532221a986355b8ecbaf01b1977e2ae6f4dfb4a3c122edb9d2fcdbc90fb818ed3cd94e
|
@@ -49,7 +49,14 @@ module CassandraObject
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def connection
|
52
|
-
@connection ||=
|
52
|
+
@connection ||= begin
|
53
|
+
thrift_options = (config[:thrift] || {})
|
54
|
+
CassandraCQL::Database.new(servers, {keyspace: config[:keyspace]}, thrift_options)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def servers
|
59
|
+
Array.wrap(config[:servers] || "127.0.0.1:9160")
|
53
60
|
end
|
54
61
|
|
55
62
|
def execute(statement)
|
@@ -57,7 +57,6 @@ module CassandraObject
|
|
57
57
|
# conf = {:adapter=>"postgresql", :encoding=>"unicode", :database=>"axle_place_test", :pool=>5, :username=>"postgres"}
|
58
58
|
# @connection ||= ActiveRecord::Base.postgresql_connection(conf)
|
59
59
|
ActiveRecord::Base.connection
|
60
|
-
# @connection ||= ActiveRecord::Base.postgresql_connection(config)
|
61
60
|
end
|
62
61
|
|
63
62
|
def execute(statement)
|
@@ -114,6 +113,15 @@ module CassandraObject
|
|
114
113
|
execute stmt
|
115
114
|
end
|
116
115
|
|
116
|
+
def create_table(table_name, options = {})
|
117
|
+
connection.execute 'CREATE EXTENSION IF NOT EXISTS hstore'
|
118
|
+
ActiveRecord::Migration.create_table table_name, id: false do |t|
|
119
|
+
t.string :id, null: false
|
120
|
+
t.hstore :attribute_store, null: false
|
121
|
+
end
|
122
|
+
connection.execute "ALTER TABLE #{table_name} ADD CONSTRAINT #{table_name}_pkey PRIMARY KEY (id)"
|
123
|
+
end
|
124
|
+
|
117
125
|
def create_ids_where_clause(ids)
|
118
126
|
ids = ids.first if ids.is_a?(Array) && ids.one?
|
119
127
|
|
@@ -7,12 +7,12 @@ module CassandraObject
|
|
7
7
|
class_attribute :attribute_definitions
|
8
8
|
self.attribute_definitions = {}
|
9
9
|
|
10
|
-
%w(array boolean date float
|
10
|
+
%w(array boolean date float integer json string time).each do |type|
|
11
11
|
instance_eval <<-EOV, __FILE__, __LINE__ + 1
|
12
12
|
def #{type}(*args)
|
13
13
|
options = args.extract_options!
|
14
14
|
args.each do |name|
|
15
|
-
attribute(name, options.merge(:type => :#{type
|
15
|
+
attribute(name, options.merge(:type => :#{type}))
|
16
16
|
end
|
17
17
|
end
|
18
18
|
EOV
|
@@ -21,9 +21,17 @@ module CassandraObject
|
|
21
21
|
|
22
22
|
module ClassMethods
|
23
23
|
def adapter
|
24
|
-
@@adapter ||=
|
25
|
-
|
26
|
-
|
24
|
+
@@adapter ||= adapter_class.new(config)
|
25
|
+
end
|
26
|
+
|
27
|
+
def adapter_class
|
28
|
+
case config[:adapter]
|
29
|
+
when 'hstore'
|
30
|
+
CassandraObject::Adapters::HstoreAdapter
|
31
|
+
when nil, 'cassandra'
|
32
|
+
CassandraObject::Adapters::CassandraAdapter
|
33
|
+
else
|
34
|
+
raise "Unknown adapter #{config[:adapter]}"
|
27
35
|
end
|
28
36
|
end
|
29
37
|
end
|
@@ -10,12 +10,10 @@ module CassandraObject
|
|
10
10
|
'strategy_options:replication_factor' => 1
|
11
11
|
}
|
12
12
|
|
13
|
-
def create_keyspace(keyspace, options =
|
13
|
+
def create_keyspace(keyspace, options = nil)
|
14
14
|
stmt = "CREATE KEYSPACE #{keyspace}"
|
15
15
|
|
16
|
-
|
17
|
-
options = DEFAULT_CREATE_KEYSPACE
|
18
|
-
end
|
16
|
+
options ||= DEFAULT_CREATE_KEYSPACE
|
19
17
|
|
20
18
|
system_execute statement_with_options(stmt, options)
|
21
19
|
end
|
@@ -25,7 +23,11 @@ module CassandraObject
|
|
25
23
|
end
|
26
24
|
|
27
25
|
def create_column_family(column_family, options = {})
|
28
|
-
|
26
|
+
create_table column_family, options
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_table(table_name, options = {})
|
30
|
+
stmt = "CREATE COLUMNFAMILY #{table_name} " +
|
29
31
|
"(KEY varchar PRIMARY KEY)"
|
30
32
|
|
31
33
|
keyspace_execute statement_with_options(stmt, options)
|
@@ -64,11 +66,11 @@ module CassandraObject
|
|
64
66
|
end
|
65
67
|
|
66
68
|
def db
|
67
|
-
@db ||= CassandraCQL::Database.new(CassandraObject::Base.
|
69
|
+
@db ||= CassandraCQL::Database.new(CassandraObject::Base.adapter.servers, {keyspace: 'system'}, {connect_timeout: 30, timeout: 30})
|
68
70
|
end
|
69
71
|
|
70
72
|
def keyspace_execute(cql)
|
71
|
-
db.execute "USE #{CassandraObject::Base.config
|
73
|
+
db.execute "USE #{CassandraObject::Base.config[:keyspace]}"
|
72
74
|
db.execute cql
|
73
75
|
end
|
74
76
|
|
@@ -37,11 +37,11 @@ module CassandraObject
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def keyspace
|
40
|
-
CassandraObject::Base.config
|
40
|
+
CassandraObject::Base.config[:keyspace]
|
41
41
|
end
|
42
42
|
|
43
43
|
def server
|
44
|
-
CassandraObject::Base.
|
44
|
+
CassandraObject::Base.adapter.servers.first.gsub(/:.*/, '')
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
ks_namespace = namespace :ks do
|
2
|
-
desc 'Create the keyspace in
|
2
|
+
desc 'Create the keyspace in config/cassandra.yml for the current environment'
|
3
3
|
task create: :environment do
|
4
4
|
begin
|
5
|
-
CassandraObject::Schema.create_keyspace
|
5
|
+
CassandraObject::Schema.create_keyspace CassandraObject::Base.config[:keyspace], CassandraObject::Base.config[:keyspace_options]
|
6
6
|
rescue Exception => e
|
7
7
|
if e.message =~ /conflicts/
|
8
|
-
p "Keyspace #{
|
8
|
+
p "Keyspace #{CassandraObject::Base.config[:keyspace]} already exists"
|
9
9
|
else
|
10
10
|
raise e
|
11
11
|
end
|
@@ -14,10 +14,10 @@ ks_namespace = namespace :ks do
|
|
14
14
|
|
15
15
|
task drop: :environment do
|
16
16
|
begin
|
17
|
-
CassandraObject::Schema.drop_keyspace
|
17
|
+
CassandraObject::Schema.drop_keyspace CassandraObject::Base.config[:keyspace]
|
18
18
|
rescue Exception => e
|
19
19
|
if e.message =~ /non existing keyspace/
|
20
|
-
p "Keyspace #{
|
20
|
+
p "Keyspace #{CassandraObject::Base.config[:keyspace]} does not exist"
|
21
21
|
else
|
22
22
|
raise e
|
23
23
|
end
|
@@ -51,12 +51,4 @@ ks_namespace = namespace :ks do
|
|
51
51
|
task :_load do
|
52
52
|
ks_namespace["structure:load"].invoke
|
53
53
|
end
|
54
|
-
|
55
|
-
private
|
56
|
-
def cassandra_config
|
57
|
-
@cassandra_config ||= begin
|
58
|
-
cassandra_configs = YAML.load_file(Rails.root.join('config', 'cassandra.yml'))
|
59
|
-
CassandraObject::Config.new cassandra_configs[Rails.env || 'development']
|
60
|
-
end
|
61
|
-
end
|
62
54
|
end
|
@@ -2,7 +2,6 @@ CassandraObject::Type.register(:array, CassandraObject::Types::ArrayTyp
|
|
2
2
|
CassandraObject::Type.register(:boolean, CassandraObject::Types::BooleanType)
|
3
3
|
CassandraObject::Type.register(:date, CassandraObject::Types::DateType)
|
4
4
|
CassandraObject::Type.register(:float, CassandraObject::Types::FloatType)
|
5
|
-
CassandraObject::Type.register(:hash, CassandraObject::Types::HashType)
|
6
5
|
CassandraObject::Type.register(:integer, CassandraObject::Types::IntegerType)
|
7
6
|
CassandraObject::Type.register(:json, CassandraObject::Types::JsonType)
|
8
7
|
CassandraObject::Type.register(:time, CassandraObject::Types::TimeType)
|
@@ -10,7 +10,6 @@ module CassandraObject
|
|
10
10
|
autoload :Base
|
11
11
|
autoload :BelongsTo
|
12
12
|
autoload :Callbacks
|
13
|
-
autoload :Config
|
14
13
|
autoload :Connection
|
15
14
|
autoload :Core
|
16
15
|
autoload :CounterBase
|
@@ -61,7 +60,6 @@ module CassandraObject
|
|
61
60
|
autoload :BooleanType
|
62
61
|
autoload :DateType
|
63
62
|
autoload :FloatType
|
64
|
-
autoload :HashType
|
65
63
|
autoload :IntegerType
|
66
64
|
autoload :JsonType
|
67
65
|
autoload :StringType
|
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.12.
|
4
|
+
version: 4.12.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Koziarski
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -97,7 +97,6 @@ files:
|
|
97
97
|
- lib/cassandra_object/belongs_to/builder.rb
|
98
98
|
- lib/cassandra_object/belongs_to/reflection.rb
|
99
99
|
- lib/cassandra_object/callbacks.rb
|
100
|
-
- lib/cassandra_object/config.rb
|
101
100
|
- lib/cassandra_object/connection.rb
|
102
101
|
- lib/cassandra_object/core.rb
|
103
102
|
- lib/cassandra_object/counter_base.rb
|
@@ -126,7 +125,6 @@ files:
|
|
126
125
|
- lib/cassandra_object/types/boolean_type.rb
|
127
126
|
- lib/cassandra_object/types/date_type.rb
|
128
127
|
- lib/cassandra_object/types/float_type.rb
|
129
|
-
- lib/cassandra_object/types/hash_type.rb
|
130
128
|
- lib/cassandra_object/types/integer_type.rb
|
131
129
|
- lib/cassandra_object/types/json_type.rb
|
132
130
|
- lib/cassandra_object/types/string_type.rb
|
@@ -147,7 +145,6 @@ files:
|
|
147
145
|
- test/unit/belongs_to/reflection_test.rb
|
148
146
|
- test/unit/belongs_to_test.rb
|
149
147
|
- test/unit/callbacks_test.rb
|
150
|
-
- test/unit/config_test.rb
|
151
148
|
- test/unit/connection_test.rb
|
152
149
|
- test/unit/core_test.rb
|
153
150
|
- test/unit/counter_base_test.rb
|
@@ -168,7 +165,6 @@ files:
|
|
168
165
|
- test/unit/types/boolean_type_test.rb
|
169
166
|
- test/unit/types/date_type_test.rb
|
170
167
|
- test/unit/types/float_type_test.rb
|
171
|
-
- test/unit/types/hash_type_test.rb
|
172
168
|
- test/unit/types/integer_type_test.rb
|
173
169
|
- test/unit/types/json_type_test.rb
|
174
170
|
- test/unit/types/string_type_test.rb
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/hash/keys'
|
2
|
-
|
3
|
-
module CassandraObject
|
4
|
-
class Config
|
5
|
-
attr_accessor :servers, :keyspace, :thrift_options, :keyspace_options
|
6
|
-
|
7
|
-
def initialize(options)
|
8
|
-
options = options.symbolize_keys
|
9
|
-
self.servers = Array.wrap(options[:servers] || "127.0.0.1:9160")
|
10
|
-
self.keyspace = options[:keyspace]
|
11
|
-
self.thrift_options = (options[:thrift] || {}).symbolize_keys
|
12
|
-
self.keyspace_options = (options[:keyspace_options] || {}).symbolize_keys
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
module CassandraObject
|
2
|
-
module Types
|
3
|
-
class HashType < BaseType
|
4
|
-
class DirtyHash < Hash
|
5
|
-
attr_accessor :record, :name, :options
|
6
|
-
def initialize(record, name, hash, options)
|
7
|
-
@record = record
|
8
|
-
@name = name.to_s
|
9
|
-
@options = options
|
10
|
-
|
11
|
-
self.merge!(hash)
|
12
|
-
@init_hash = self.hash
|
13
|
-
@init_value = hash
|
14
|
-
end
|
15
|
-
|
16
|
-
def []=(obj, val)
|
17
|
-
modifying { super }
|
18
|
-
end
|
19
|
-
|
20
|
-
def delete(obj)
|
21
|
-
modifying { super }
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
def modifying
|
26
|
-
result = yield
|
27
|
-
|
28
|
-
if !record.changed_attributes.key?(name) && @init_hash != self.hash
|
29
|
-
record.changed_attributes[name] = @init_value
|
30
|
-
end
|
31
|
-
|
32
|
-
record.send("#{name}=", self)
|
33
|
-
|
34
|
-
result
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def encode(hash)
|
39
|
-
ActiveSupport::JSON.encode(hash)
|
40
|
-
end
|
41
|
-
|
42
|
-
def decode(str)
|
43
|
-
ActiveSupport::JSON.decode(str)
|
44
|
-
end
|
45
|
-
|
46
|
-
def wrap(record, name, value)
|
47
|
-
DirtyHash.new(record, name, Hash(value), options)
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/test/unit/config_test.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class CassandraObject::ConfigTest < CassandraObject::TestCase
|
4
|
-
test 'config writer' do
|
5
|
-
config = CassandraObject::Config.new(
|
6
|
-
keyspace: 'place_directory_development',
|
7
|
-
servers: '192.168.0.100:9160',
|
8
|
-
thrift: {'timeout' => 10},
|
9
|
-
keyspace_options: {'placement_strategy' => 'NetworkTopologyStrategy'}
|
10
|
-
)
|
11
|
-
|
12
|
-
assert_equal ['192.168.0.100:9160'], config.servers
|
13
|
-
assert_equal 'place_directory_development', config.keyspace
|
14
|
-
assert_equal 10, config.thrift_options[:timeout]
|
15
|
-
assert_equal 'NetworkTopologyStrategy', config.keyspace_options[:placement_strategy]
|
16
|
-
end
|
17
|
-
|
18
|
-
test 'defaults' do
|
19
|
-
config = CassandraObject::Config.new(keyspace: 'widget_factory')
|
20
|
-
|
21
|
-
assert_equal ["127.0.0.1:9160"], config.servers
|
22
|
-
end
|
23
|
-
end
|
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class CassandraObject::Types::HashTypeTest < CassandraObject::Types::TestCase
|
4
|
-
test 'encode' do
|
5
|
-
assert_equal({a: 'b'}.to_json, coder.encode(a: 'b'))
|
6
|
-
assert_equal '-3', coder.encode(-3)
|
7
|
-
end
|
8
|
-
|
9
|
-
test 'decode' do
|
10
|
-
assert_equal({'a' => 'b'}, coder.decode({'a' => 'b'}.to_json))
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'setting marks dirty' do
|
14
|
-
record = temp_object do
|
15
|
-
string :name
|
16
|
-
hash_t :stuff
|
17
|
-
|
18
|
-
end.new name: 'abcd', stuff: Hash[a: 1, b: 2]
|
19
|
-
|
20
|
-
record.save!
|
21
|
-
assert !record.stuff_changed?
|
22
|
-
|
23
|
-
record.stuff[:c] = 3
|
24
|
-
|
25
|
-
assert record.stuff_changed?
|
26
|
-
assert_equal Hash[a: 1, b: 2, c: 3], record.stuff
|
27
|
-
end
|
28
|
-
|
29
|
-
test 'hash change marks dirty' do
|
30
|
-
record = temp_object do
|
31
|
-
string :name
|
32
|
-
hash_t :stuff
|
33
|
-
|
34
|
-
end.new name: 'abcd', stuff: Hash[a: 1, b: 2, v: {}]
|
35
|
-
|
36
|
-
record.save!
|
37
|
-
assert !record.stuff_changed?
|
38
|
-
|
39
|
-
record.stuff[:v][:data] = 69
|
40
|
-
record.stuff[:v] = record.stuff[:v]
|
41
|
-
|
42
|
-
assert record.stuff_changed?
|
43
|
-
assert_equal Hash[a: 1, b: 2, v: Hash[data: 69]], record.stuff
|
44
|
-
end
|
45
|
-
|
46
|
-
test 'hash no change does not dirty' do
|
47
|
-
record = temp_object do
|
48
|
-
string :name
|
49
|
-
hash_t :stuff
|
50
|
-
|
51
|
-
end.new name: 'abcd', stuff: Hash[a: 1, b: 2, v: {data: 69}]
|
52
|
-
|
53
|
-
record.save!
|
54
|
-
assert !record.stuff_changed?
|
55
|
-
|
56
|
-
record.stuff[:v][:data] = 69
|
57
|
-
record.stuff[:v] = record.stuff[:v]
|
58
|
-
|
59
|
-
assert !record.stuff_changed?
|
60
|
-
assert_equal Hash[a: 1, b: 2, v: Hash[data: 69]], record.stuff
|
61
|
-
end
|
62
|
-
|
63
|
-
test 'delete marks dirty' do
|
64
|
-
record = temp_object do
|
65
|
-
string :name
|
66
|
-
hash_t :stuff
|
67
|
-
|
68
|
-
end.new name: 'abcd', stuff: Hash[a: 1, b: 2]
|
69
|
-
|
70
|
-
record.stuff.delete :b
|
71
|
-
|
72
|
-
assert record.stuff_changed?
|
73
|
-
assert_equal Hash[a: 1], record.stuff
|
74
|
-
end
|
75
|
-
|
76
|
-
|
77
|
-
end
|