gotime-cassandra_object 4.5.1 → 4.6.0
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.
- data/.travis.yml +2 -0
- data/Gemfile +5 -1
- data/README.rdoc +0 -2
- data/gotime-cassandra_object.gemspec +1 -1
- data/lib/cassandra_object/attribute_methods.rb +4 -4
- data/lib/cassandra_object/attribute_methods/dirty.rb +1 -1
- data/lib/cassandra_object/attribute_methods/primary_key.rb +1 -1
- data/lib/cassandra_object/attribute_methods/typecasting.rb +9 -6
- data/lib/cassandra_object/base.rb +11 -43
- data/lib/cassandra_object/belongs_to.rb +1 -1
- data/lib/cassandra_object/belongs_to/association.rb +1 -1
- data/lib/cassandra_object/belongs_to/reflection.rb +2 -2
- data/lib/cassandra_object/config.rb +15 -0
- data/lib/cassandra_object/connection.rb +1 -19
- data/lib/cassandra_object/consistency.rb +1 -1
- data/lib/cassandra_object/core.rb +46 -0
- data/lib/cassandra_object/errors.rb +2 -2
- data/lib/cassandra_object/identity.rb +1 -1
- data/lib/cassandra_object/persistence.rb +21 -7
- data/lib/cassandra_object/railtie.rb +1 -1
- data/lib/cassandra_object/savepoints.rb +1 -1
- data/lib/cassandra_object/schema.rb +30 -15
- data/lib/cassandra_object/schema/tasks.rb +8 -4
- data/lib/cassandra_object/scope.rb +1 -1
- data/lib/cassandra_object/scope/batches.rb +1 -1
- data/lib/cassandra_object/scope/finder_methods.rb +1 -1
- data/lib/cassandra_object/scope/query_methods.rb +1 -1
- data/lib/cassandra_object/tasks/ks.rake +6 -6
- data/lib/cassandra_object/types/array_type.rb +1 -1
- data/lib/cassandra_object/types/base_type.rb +1 -1
- data/lib/cassandra_object/types/boolean_type.rb +2 -2
- data/lib/cassandra_object/types/float_type.rb +1 -1
- data/lib/cassandra_object/types/integer_type.rb +1 -1
- data/lib/cassandra_object/types/json_type.rb +1 -1
- data/lib/cassandra_object/types/string_type.rb +1 -1
- data/lib/cassandra_object/types/time_type.rb +1 -1
- data/lib/cassandra_object/validations.rb +3 -3
- data/lib/gotime-cassandra_object.rb +10 -8
- data/test/support/connect.rb +3 -3
- data/test/support/issue.rb +1 -1
- data/test/test_helper.rb +1 -1
- data/test/unit/active_model_test.rb +6 -1
- data/test/unit/attribute_methods/definition_test.rb +1 -1
- data/test/unit/attribute_methods/dirty_test.rb +2 -2
- data/test/unit/attribute_methods/primary_key_test.rb +1 -1
- data/test/unit/attribute_methods/typecasting_test.rb +28 -2
- data/test/unit/base_test.rb +1 -43
- data/test/unit/belongs_to/reflection_test.rb +12 -0
- data/test/unit/belongs_to_test.rb +1 -1
- data/test/unit/callbacks_test.rb +1 -1
- data/test/unit/config_test.rb +23 -0
- data/test/unit/connection_test.rb +0 -20
- data/test/unit/consistency_test.rb +1 -1
- data/test/unit/core_test.rb +50 -0
- data/test/unit/identity_test.rb +1 -1
- data/test/unit/inspect_test.rb +1 -1
- data/test/unit/persistence_test.rb +36 -7
- data/test/unit/savepoints_test.rb +7 -7
- data/test/unit/schema_test.rb +1 -1
- data/test/unit/scope/batches_test.rb +4 -4
- data/test/unit/scope/finder_methods_test.rb +3 -3
- data/test/unit/scope/query_methods_test.rb +1 -1
- data/test/unit/scoping_test.rb +1 -1
- data/test/unit/timestamps_test.rb +1 -1
- data/test/unit/types/array_type_test.rb +3 -3
- data/test/unit/types/base_type_test.rb +1 -1
- data/test/unit/types/float_type_test.rb +2 -2
- data/test/unit/types/integer_type_test.rb +1 -1
- data/test/unit/types/string_type_test.rb +1 -1
- data/test/unit/types/time_type_test.rb +1 -1
- data/test/unit/validations_test.rb +1 -1
- metadata +7 -2
@@ -29,16 +29,20 @@ module CassandraObject
|
|
29
29
|
|
30
30
|
private
|
31
31
|
def run_command(command)
|
32
|
-
`echo "#{command};" | cqlsh -k #{keyspace} #{server}`.sub(/^(.*)$/, '').strip
|
32
|
+
`echo "#{command};" | #{cqlsh} -k #{keyspace} #{server}`.sub(/^(.*)$/, '').strip
|
33
|
+
end
|
34
|
+
|
35
|
+
def cqlsh
|
36
|
+
ENV['CQLSH'] || 'cqlsh'
|
33
37
|
end
|
34
38
|
|
35
39
|
def keyspace
|
36
|
-
CassandraObject::Base.
|
40
|
+
CassandraObject::Base.config.keyspace
|
37
41
|
end
|
38
42
|
|
39
43
|
def server
|
40
|
-
CassandraObject::Base.
|
44
|
+
CassandraObject::Base.config.servers.first.gsub(/:.*/, '')
|
41
45
|
end
|
42
46
|
end
|
43
47
|
end
|
44
|
-
end
|
48
|
+
end
|
@@ -2,10 +2,10 @@ ks_namespace = namespace :ks do
|
|
2
2
|
desc 'Create the keyspace in cassandra_config/cassandra.yml for the current environment'
|
3
3
|
task create: :environment do
|
4
4
|
begin
|
5
|
-
CassandraObject::Schema.create_keyspace cassandra_config
|
5
|
+
CassandraObject::Schema.create_keyspace cassandra_config.keyspace, cassandra_config.keyspace_options
|
6
6
|
rescue Exception => e
|
7
7
|
if e.message =~ /conflicts/
|
8
|
-
p "Keyspace #{cassandra_config
|
8
|
+
p "Keyspace #{cassandra_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 cassandra_config
|
17
|
+
CassandraObject::Schema.drop_keyspace cassandra_config.keyspace
|
18
18
|
rescue Exception => e
|
19
19
|
if e.message =~ /non existing keyspace/
|
20
|
-
p "Keyspace #{cassandra_config
|
20
|
+
p "Keyspace #{cassandra_config.keyspace} does not exist"
|
21
21
|
else
|
22
22
|
raise e
|
23
23
|
end
|
@@ -55,8 +55,8 @@ ks_namespace = namespace :ks do
|
|
55
55
|
private
|
56
56
|
def cassandra_config
|
57
57
|
@cassandra_config ||= begin
|
58
|
-
cassandra_configs = YAML.load_file(Rails.root.join(
|
59
|
-
cassandra_configs[Rails.env || 'development']
|
58
|
+
cassandra_configs = YAML.load_file(Rails.root.join('config', 'cassandra.yml'))
|
59
|
+
CassandraObject::Config.new cassandra_configs[Rails.env || 'development']
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
@@ -4,7 +4,7 @@ module CassandraObject
|
|
4
4
|
TRUE_VALS = [true, 'true', '1']
|
5
5
|
FALSE_VALS = [false, 'false', '0', '', nil]
|
6
6
|
VALID_VALS = TRUE_VALS + FALSE_VALS
|
7
|
-
|
7
|
+
|
8
8
|
def encode(bool)
|
9
9
|
unless VALID_VALS.include?(bool)
|
10
10
|
raise ArgumentError.new("#{bool.inspect} is not a Boolean")
|
@@ -18,4 +18,4 @@ module CassandraObject
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
@@ -10,11 +10,11 @@ module CassandraObject
|
|
10
10
|
module Validations
|
11
11
|
extend ActiveSupport::Concern
|
12
12
|
include ActiveModel::Validations
|
13
|
-
|
13
|
+
|
14
14
|
included do
|
15
15
|
define_callbacks :validate, scope: :name
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
module ClassMethods
|
19
19
|
def create!(attributes = {})
|
20
20
|
new(attributes).tap do |object|
|
@@ -31,7 +31,7 @@ module CassandraObject
|
|
31
31
|
false
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def save!
|
36
36
|
save || raise(RecordInvalid.new(self))
|
37
37
|
end
|
@@ -5,23 +5,25 @@ require 'cassandra-cql'
|
|
5
5
|
module CassandraObject
|
6
6
|
extend ActiveSupport::Autoload
|
7
7
|
|
8
|
-
autoload :Base
|
9
|
-
autoload :Connection
|
10
|
-
autoload :Consistency
|
11
8
|
autoload :AttributeMethods
|
9
|
+
autoload :Base
|
12
10
|
autoload :BelongsTo
|
13
|
-
autoload :Persistence
|
14
11
|
autoload :Callbacks
|
15
|
-
autoload :
|
12
|
+
autoload :Config
|
13
|
+
autoload :Connection
|
14
|
+
autoload :Consistency
|
15
|
+
autoload :Core
|
16
16
|
autoload :Identity
|
17
17
|
autoload :Inspect
|
18
|
-
autoload :
|
18
|
+
autoload :Persistence
|
19
19
|
autoload :Savepoints
|
20
20
|
autoload :Schema
|
21
21
|
autoload :Scope
|
22
22
|
autoload :Scoping
|
23
|
+
autoload :Serialization
|
23
24
|
autoload :Timestamps
|
24
25
|
autoload :Type
|
26
|
+
autoload :Validations
|
25
27
|
|
26
28
|
module BelongsTo
|
27
29
|
extend ActiveSupport::Autoload
|
@@ -44,7 +46,7 @@ module CassandraObject
|
|
44
46
|
|
45
47
|
module Types
|
46
48
|
extend ActiveSupport::Autoload
|
47
|
-
|
49
|
+
|
48
50
|
autoload :BaseType
|
49
51
|
autoload :ArrayType
|
50
52
|
autoload :BooleanType
|
@@ -57,4 +59,4 @@ module CassandraObject
|
|
57
59
|
end
|
58
60
|
end
|
59
61
|
|
60
|
-
require 'cassandra_object/railtie' if defined?(Rails)
|
62
|
+
require 'cassandra_object/railtie' if defined?(Rails)
|
data/test/support/connect.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
CassandraObject::Base.
|
1
|
+
CassandraObject::Base.config = {
|
2
2
|
keyspace: 'cassandra_object_test',
|
3
3
|
servers: '127.0.0.1:9160',
|
4
4
|
thrift: {timeout: 10000}
|
5
|
-
|
5
|
+
}
|
6
6
|
|
7
7
|
begin
|
8
8
|
CassandraObject::Schema.drop_keyspace 'cassandra_object_test'
|
@@ -12,4 +12,4 @@ end
|
|
12
12
|
sleep 1
|
13
13
|
CassandraObject::Schema.create_keyspace 'cassandra_object_test'
|
14
14
|
CassandraObject::Schema.create_column_family 'Issues'
|
15
|
-
CassandraObject::Base.default_consistency = 'QUORUM'
|
15
|
+
CassandraObject::Base.default_consistency = 'QUORUM'
|
data/test/support/issue.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class ActiveModelTest < CassandraObject::TestCase
|
4
|
-
|
4
|
+
|
5
|
+
include ActiveModel::Lint::Tests
|
6
|
+
|
7
|
+
# overrides ActiveModel::Lint::Tests#test_to_param
|
8
|
+
def test_to_param
|
9
|
+
end
|
5
10
|
|
6
11
|
def setup
|
7
12
|
@model = Issue.new
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
3
3
|
class CassandraObject::AttributeMethods::DefinitionTest < CassandraObject::TestCase
|
4
4
|
class TestType < CassandraObject::Types::BaseType
|
5
5
|
end
|
6
|
-
|
6
|
+
|
7
7
|
test 'typecast' do
|
8
8
|
definition = CassandraObject::AttributeMethods::Definition.new(:foo, TestType, {a: :b})
|
9
9
|
|
@@ -5,7 +5,7 @@ class CassandraObject::AttributeMethods::DirtyTest < CassandraObject::TestCase
|
|
5
5
|
record = temp_object do
|
6
6
|
string :name
|
7
7
|
end.new name: 'foo'
|
8
|
-
|
8
|
+
|
9
9
|
assert record.changed?
|
10
10
|
|
11
11
|
record.save!
|
@@ -42,7 +42,7 @@ class CassandraObject::AttributeMethods::DirtyTest < CassandraObject::TestCase
|
|
42
42
|
record = temp_object do
|
43
43
|
boolean :awesome
|
44
44
|
end.create(awesome: false)
|
45
|
-
|
45
|
+
|
46
46
|
record.awesome = false
|
47
47
|
assert !record.changed?
|
48
48
|
|
@@ -3,7 +3,7 @@ require 'test_helper'
|
|
3
3
|
class CassandraObject::AttributeMethods::TypecastingTest < CassandraObject::TestCase
|
4
4
|
class CustomType
|
5
5
|
end
|
6
|
-
|
6
|
+
|
7
7
|
class CustomCoder < CassandraObject::Types::BaseType
|
8
8
|
end
|
9
9
|
|
@@ -83,4 +83,30 @@ class CassandraObject::AttributeMethods::TypecastingTest < CassandraObject::Test
|
|
83
83
|
issue = TestIssue.find issue.id
|
84
84
|
assert_equal('hola', issue.name)
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
|
+
test 'multiple attributes definition' do
|
88
|
+
class MultipleAttributesIssue < CassandraObject::Base
|
89
|
+
self.column_family = 'Issues'
|
90
|
+
end
|
91
|
+
|
92
|
+
assert_nothing_raised {
|
93
|
+
MultipleAttributesIssue.string :hello, :greetings, :bye
|
94
|
+
}
|
95
|
+
issue = MultipleAttributesIssue.new :hello => 'hey', :greetings => 'how r u', :bye => 'see ya'
|
96
|
+
|
97
|
+
assert_equal 'how r u', issue.greetings
|
98
|
+
end
|
99
|
+
|
100
|
+
test 'multiple attributes with options' do
|
101
|
+
class MultipleAttributesIssue < CassandraObject::Base
|
102
|
+
self.column_family = 'Issues'
|
103
|
+
end
|
104
|
+
|
105
|
+
MultipleAttributesIssue.expects(:attribute).with(:hello, { :unique => :true, :type => :string })
|
106
|
+
MultipleAttributesIssue.expects(:attribute).with(:world, { :unique => :true, :type => :string })
|
107
|
+
|
108
|
+
class MultipleAttributesIssue < CassandraObject::Base
|
109
|
+
string :hello, :world, :unique => :true
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/test/unit/base_test.rb
CHANGED
@@ -16,46 +16,4 @@ class CassandraObject::BaseTest < CassandraObject::TestCase
|
|
16
16
|
assert_equal 'CassandraObject::BaseTest::Sons', Son.column_family
|
17
17
|
assert_equal 'CassandraObject::BaseTest::Sons', Grandson.column_family
|
18
18
|
end
|
19
|
-
|
20
|
-
test 'initialiaze' do
|
21
|
-
issue = Issue.new
|
22
|
-
|
23
|
-
assert issue.new_record?
|
24
|
-
assert !issue.destroyed?
|
25
|
-
end
|
26
|
-
|
27
|
-
test 'dup' do
|
28
|
-
issue = Issue.create description: 'foo'
|
29
|
-
|
30
|
-
dup_issue = issue.dup
|
31
|
-
|
32
|
-
assert dup_issue.new_record?
|
33
|
-
assert_not_equal issue.id, dup_issue.id
|
34
|
-
assert_nil dup_issue.created_at
|
35
|
-
assert_nil dup_issue.updated_at
|
36
|
-
assert_equal 'foo', issue.description
|
37
|
-
end
|
38
|
-
|
39
|
-
test 'equality of new records' do
|
40
|
-
assert_not_equal Issue.new, Issue.new
|
41
|
-
end
|
42
|
-
|
43
|
-
test 'equality' do
|
44
|
-
first_issue = Issue.create description: 'poop'
|
45
|
-
second_issue = Issue.create description: 'poop'
|
46
|
-
|
47
|
-
assert_equal first_issue, first_issue
|
48
|
-
assert_equal first_issue, Issue.find(first_issue.id)
|
49
|
-
assert_not_equal first_issue, second_issue
|
50
|
-
end
|
51
|
-
|
52
|
-
test 'to_param' do
|
53
|
-
issue = Issue.new
|
54
|
-
assert_equal issue.id, issue.to_param
|
55
|
-
end
|
56
|
-
|
57
|
-
test 'hash' do
|
58
|
-
issue = Issue.create
|
59
|
-
assert_equal issue.id.hash, issue.hash
|
60
|
-
end
|
61
|
-
end
|
19
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CassandraObject::BelongsTo::ReflectionTest < CassandraObject::TestCase
|
4
|
+
class ::Status < CassandraObject::Base; end
|
5
|
+
class ::User < CassandraObject::Base
|
6
|
+
belongs_to :status
|
7
|
+
end
|
8
|
+
|
9
|
+
test 'class_name' do
|
10
|
+
assert_equal 'Status', User.new.belongs_to_reflections[:status].class_name
|
11
|
+
end
|
12
|
+
end
|
data/test/unit/callbacks_test.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
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
|