gotime-cassandra_object 2.10.2 → 2.10.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.
- data/gotime-cassandra_object.gemspec +4 -4
- data/lib/cassandra_object/base.rb +2 -1
- data/lib/cassandra_object/belongs_to.rb +42 -0
- data/lib/cassandra_object/identity.rb +16 -12
- data/lib/gotime-cassandra_object.rb +1 -0
- data/test/unit/base_test.rb +1 -0
- data/test/unit/belongs_to_test.rb +52 -0
- metadata +13 -11
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'gotime-cassandra_object'
|
5
|
-
s.version = '2.10.
|
5
|
+
s.version = '2.10.3'
|
6
6
|
s.description = 'Cassandra ActiveModel'
|
7
7
|
s.summary = 'Cassandra ActiveModel'
|
8
8
|
|
@@ -18,8 +18,8 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- {test}/*`.split("\n")
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.add_runtime_dependency('activemodel', "
|
22
|
-
s.add_runtime_dependency('cassandra', "
|
21
|
+
s.add_runtime_dependency('activemodel', ">= 3.0")
|
22
|
+
s.add_runtime_dependency('cassandra', ">= 0.12.0")
|
23
23
|
|
24
|
-
s.add_development_dependency('bundler'
|
24
|
+
s.add_development_dependency('bundler')
|
25
25
|
end
|
@@ -12,7 +12,7 @@ module CassandraObject
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def column_family
|
15
|
-
@column_family
|
15
|
+
@column_family ||= base_class.name.pluralize
|
16
16
|
end
|
17
17
|
|
18
18
|
def base_class
|
@@ -37,6 +37,7 @@ module CassandraObject
|
|
37
37
|
include AttributeMethods
|
38
38
|
include AttributeMethods::Dirty
|
39
39
|
include AttributeMethods::Typecasting
|
40
|
+
include BelongsTo
|
40
41
|
include Callbacks
|
41
42
|
include Validations
|
42
43
|
include Associations
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module CassandraObject
|
2
|
+
module BelongsTo
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
module ClassMethods
|
6
|
+
# === Options
|
7
|
+
# [:class_name]
|
8
|
+
# Use if the class cannot be inferred from the association
|
9
|
+
# [:polymorphic]
|
10
|
+
# Specify if the association is polymorphic
|
11
|
+
# Example:
|
12
|
+
# class Driver < CassandraObject::Base
|
13
|
+
# end
|
14
|
+
# class Truck < CassandraObject::Base
|
15
|
+
# end
|
16
|
+
def belongs_to(name, options = {})
|
17
|
+
instance_variable_name = "@#{name}"
|
18
|
+
|
19
|
+
define_method("#{name}=") do |record|
|
20
|
+
instance_variable_set(instance_variable_name, record)
|
21
|
+
send("#{name}_id=", record.try(:id))
|
22
|
+
if options[:polymorphic]
|
23
|
+
send("#{name}_type=", record.class.name)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
define_method(name) do
|
28
|
+
unless instance_variable_defined?(instance_variable_name)
|
29
|
+
if record_id = send("#{name}_id").presence
|
30
|
+
model_name = options[:polymorphic] ? send("#{name}_type") : (options[:class_name] || name.to_s.classify)
|
31
|
+
instance_variable_set(instance_variable_name, model_name.constantize.find_by_id(record_id))
|
32
|
+
else
|
33
|
+
instance_variable_set(instance_variable_name, nil)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
instance_variable_get(instance_variable_name)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -10,6 +10,10 @@ module CassandraObject
|
|
10
10
|
autoload :HashedNaturalKeyFactory
|
11
11
|
autoload :CustomKeyFactory
|
12
12
|
|
13
|
+
included do
|
14
|
+
class_attribute :key_factory
|
15
|
+
end
|
16
|
+
|
13
17
|
module ClassMethods
|
14
18
|
# Indicate what kind of key the model will have: uuid or natural
|
15
19
|
#
|
@@ -17,26 +21,26 @@ module CassandraObject
|
|
17
21
|
# @param the options you want to pass along to the key factory (like :attributes => :name, for a natural key).
|
18
22
|
#
|
19
23
|
def key(name_or_factory = :uuid, *options)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
self.key_factory = case name_or_factory
|
25
|
+
when :uuid
|
26
|
+
UUIDKeyFactory.new
|
27
|
+
when :natural
|
28
|
+
NaturalKeyFactory.new(*options)
|
29
|
+
when :custom
|
30
|
+
CustomKeyFactory.new(*options)
|
31
|
+
else
|
32
|
+
name_or_factory
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
32
36
|
def next_key(object = nil)
|
33
|
-
|
37
|
+
key_factory.next_key(object).tap do |key|
|
34
38
|
raise "Keys may not be nil" if key.nil?
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
38
42
|
def parse_key(string)
|
39
|
-
|
43
|
+
key_factory.parse(string)
|
40
44
|
end
|
41
45
|
end
|
42
46
|
|
data/test/unit/base_test.rb
CHANGED
@@ -14,6 +14,7 @@ class CassandraObject::BaseTest < CassandraObject::TestCase
|
|
14
14
|
|
15
15
|
test 'column family' do
|
16
16
|
assert_equal 'CassandraObject::BaseTest::Sons', Son.column_family
|
17
|
+
assert_equal 'CassandraObject::BaseTest::Sons', Grandson.column_family
|
17
18
|
end
|
18
19
|
|
19
20
|
test 'initialiaze' do
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CassandraObject::BelongsToTest < CassandraObject::TestCase
|
4
|
+
class TestObject < Issue
|
5
|
+
string :issue_id
|
6
|
+
belongs_to :issue
|
7
|
+
|
8
|
+
string :widget_id
|
9
|
+
belongs_to :widget, class_name: 'Issue'
|
10
|
+
|
11
|
+
string :target_id
|
12
|
+
string :target_type
|
13
|
+
belongs_to :target, polymorphic: true
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'belongs_to' do
|
17
|
+
issue = Issue.create
|
18
|
+
|
19
|
+
record = TestObject.create(issue: issue)
|
20
|
+
|
21
|
+
assert_equal issue, record.issue
|
22
|
+
assert_equal issue.id, record.issue_id
|
23
|
+
|
24
|
+
record = TestObject.find(record.id)
|
25
|
+
assert_equal issue, record.issue
|
26
|
+
end
|
27
|
+
|
28
|
+
test 'belongs_to with class_name' do
|
29
|
+
issue = Issue.create
|
30
|
+
|
31
|
+
record = TestObject.create(widget: issue)
|
32
|
+
|
33
|
+
assert_equal issue, record.widget
|
34
|
+
assert_equal issue.id, record.widget_id
|
35
|
+
|
36
|
+
record = TestObject.find(record.id)
|
37
|
+
assert_equal issue, record.widget
|
38
|
+
end
|
39
|
+
|
40
|
+
test 'belongs_to with polymorphic' do
|
41
|
+
issue = Issue.create
|
42
|
+
|
43
|
+
record = TestObject.create(target: issue)
|
44
|
+
|
45
|
+
assert_equal issue, record.target
|
46
|
+
assert_equal issue.id, record.target_id
|
47
|
+
assert_equal 'Issue', record.target_type
|
48
|
+
|
49
|
+
record = TestObject.find(record.id)
|
50
|
+
assert_equal issue, record.target
|
51
|
+
end
|
52
|
+
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: 2.10.
|
4
|
+
version: 2.10.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,37 +14,37 @@ date: 2012-01-10 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
17
|
-
requirement: &
|
17
|
+
requirement: &70254537627400 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ! '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '3.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70254537627400
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: cassandra
|
28
|
-
requirement: &
|
28
|
+
requirement: &70254537638320 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 0.12.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70254537638320
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bundler
|
39
|
-
requirement: &
|
39
|
+
requirement: &70254537637500 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
|
-
- -
|
42
|
+
- - ! '>='
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
44
|
+
version: '0'
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70254537637500
|
48
48
|
description: Cassandra ActiveModel
|
49
49
|
email: gems@gotime.com
|
50
50
|
executables: []
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- lib/cassandra_object/attribute_methods/typecasting.rb
|
70
70
|
- lib/cassandra_object/base.rb
|
71
71
|
- lib/cassandra_object/batches.rb
|
72
|
+
- lib/cassandra_object/belongs_to.rb
|
72
73
|
- lib/cassandra_object/callbacks.rb
|
73
74
|
- lib/cassandra_object/collection.rb
|
74
75
|
- lib/cassandra_object/connection.rb
|
@@ -124,6 +125,7 @@ files:
|
|
124
125
|
- test/unit/attribute_methods_test.rb
|
125
126
|
- test/unit/base_test.rb
|
126
127
|
- test/unit/batches_test.rb
|
128
|
+
- test/unit/belongs_to_test.rb
|
127
129
|
- test/unit/callbacks_test.rb
|
128
130
|
- test/unit/connection_test.rb
|
129
131
|
- test/unit/consistency_test.rb
|