gotime-cassandra_object 2.6.4 → 2.7.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/gotime-cassandra_object.gemspec +1 -1
- data/lib/cassandra_object/attributes.rb +8 -7
- data/lib/cassandra_object/base.rb +7 -1
- data/lib/cassandra_object/persistence.rb +8 -11
- data/lib/cassandra_object/types/array_type.rb +2 -2
- data/lib/cassandra_object/types/base_type.rb +2 -2
- data/lib/cassandra_object/types/date_type.rb +0 -1
- data/test/base_test.rb +8 -1
- data/test/dirty_test.rb +12 -2
- data/test/types/array_type_test.rb +0 -4
- data/test/types/base_type_test.rb +3 -2
- metadata +7 -7
@@ -8,8 +8,9 @@ module CassandraObject
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def instantiate(record, value)
|
11
|
-
|
12
|
-
|
11
|
+
value ||= coder.default
|
12
|
+
return unless value
|
13
|
+
|
13
14
|
value = value.kind_of?(expected_type) ? value : coder.decode(value)
|
14
15
|
coder.wrap(record, name, value)
|
15
16
|
end
|
@@ -21,7 +22,7 @@ module CassandraObject
|
|
21
22
|
|
22
23
|
included do
|
23
24
|
class_attribute :model_attributes
|
24
|
-
self.model_attributes = {}
|
25
|
+
self.model_attributes = {}
|
25
26
|
|
26
27
|
attribute_method_suffix("", "=")
|
27
28
|
|
@@ -56,15 +57,15 @@ module CassandraObject
|
|
56
57
|
type_mapping = CassandraObject::Type::TypeMapping.new(expected_type, coder)
|
57
58
|
end
|
58
59
|
|
59
|
-
model_attributes[name] = Attribute.new(name, type_mapping, options)
|
60
|
+
model_attributes[name.to_sym] = Attribute.new(name, type_mapping, options)
|
60
61
|
end
|
61
62
|
|
62
|
-
def json(name)
|
63
|
-
attribute(name, type: :hash)
|
63
|
+
def json(name, options = {})
|
64
|
+
attribute(name, options.update(type: :hash))
|
64
65
|
end
|
65
66
|
|
66
67
|
def instantiate_attribute(record, name, value)
|
67
|
-
if model_attribute = model_attributes[name]
|
68
|
+
if model_attribute = model_attributes[name.to_sym]
|
68
69
|
model_attribute.instantiate(record, value)
|
69
70
|
else
|
70
71
|
raise NoMethodError, "Unknown attribute #{name.inspect}"
|
@@ -52,8 +52,14 @@ module CassandraObject
|
|
52
52
|
@key = attributes.delete(:key)
|
53
53
|
@new_record = true
|
54
54
|
@destroyed = false
|
55
|
-
@attributes = {}
|
55
|
+
@attributes = {}
|
56
56
|
self.attributes = attributes
|
57
|
+
model_attributes.each do |k, model_attribute|
|
58
|
+
unless read_attribute(k)
|
59
|
+
write_attribute(k, model_attribute.instantiate(self, nil))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
57
63
|
@schema_version = self.class.current_schema_version
|
58
64
|
end
|
59
65
|
|
@@ -23,7 +23,7 @@ module CassandraObject
|
|
23
23
|
|
24
24
|
def write(key, attributes, schema_version)
|
25
25
|
key.tap do |key|
|
26
|
-
attributes =
|
26
|
+
attributes = encode_attributes(attributes, schema_version)
|
27
27
|
ActiveSupport::Notifications.instrument("insert.cassandra_object", column_family: column_family, key: key, attributes: attributes) do
|
28
28
|
connection.insert(column_family, key.to_s, attributes, consistency: thrift_write_consistency)
|
29
29
|
end
|
@@ -31,31 +31,28 @@ module CassandraObject
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def instantiate(key, attributes)
|
34
|
-
# remove any attributes we don't know about. we would do this earlier, but we want to make such
|
35
|
-
# attributes available to migrations
|
36
|
-
attributes.delete_if { |k,_| model_attributes[k].nil? }
|
37
|
-
|
38
34
|
allocate.tap do |object|
|
39
35
|
object.instance_variable_set("@schema_version", attributes.delete('schema_version'))
|
40
|
-
object.instance_variable_set("@key", parse_key(key))
|
36
|
+
object.instance_variable_set("@key", parse_key(key)) if key
|
41
37
|
object.instance_variable_set("@new_record", false)
|
42
38
|
object.instance_variable_set("@destroyed", false)
|
43
|
-
object.instance_variable_set("@attributes",
|
39
|
+
object.instance_variable_set("@attributes", instantiate_attributes(object, attributes))
|
44
40
|
end
|
45
41
|
end
|
46
42
|
|
47
|
-
def
|
43
|
+
def encode_attributes(attributes, schema_version)
|
48
44
|
attributes.inject({}) do |memo, (column_name, value)|
|
49
45
|
# cassandra stores bytes, not strings, so it has no concept of encodings. The ruby thrift gem
|
50
46
|
# expects all strings to be encoded as ascii-8bit.
|
51
47
|
# don't attempt to encode columns that are nil
|
52
|
-
memo[column_name.to_s] = value.nil? ? '' : model_attributes[column_name].coder.encode(value).force_encoding('ASCII-8BIT')
|
48
|
+
memo[column_name.to_s] = value.nil? ? '' : model_attributes[column_name.to_sym].coder.encode(value).force_encoding('ASCII-8BIT')
|
53
49
|
memo
|
54
50
|
end.merge({"schema_version" => schema_version.to_s})
|
55
51
|
end
|
56
52
|
|
57
|
-
def
|
58
|
-
|
53
|
+
def instantiate_attributes(object, attributes)
|
54
|
+
attributes = attributes.symbolize_keys
|
55
|
+
Hash[model_attributes.map { |k, model_attribute| [k.to_s, model_attribute.instantiate(object, attributes[k])] }]
|
59
56
|
end
|
60
57
|
end
|
61
58
|
|
data/test/base_test.rb
CHANGED
@@ -6,7 +6,7 @@ class CassandraObject::BaseTest < CassandraObject::TestCase
|
|
6
6
|
|
7
7
|
class Grandson < Son
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
test 'base_class' do
|
11
11
|
assert_equal Son, Son.base_class
|
12
12
|
assert_equal Son, Grandson.base_class
|
@@ -16,6 +16,13 @@ class CassandraObject::BaseTest < CassandraObject::TestCase
|
|
16
16
|
assert_equal 'CassandraObject::BaseTest::Sons', Son.column_family
|
17
17
|
end
|
18
18
|
|
19
|
+
test 'initialiaze' do
|
20
|
+
issue = Issue.new
|
21
|
+
|
22
|
+
assert issue.new_record?
|
23
|
+
assert !issue.destroyed?
|
24
|
+
end
|
25
|
+
|
19
26
|
test 'to_param' do
|
20
27
|
issue = Issue.create
|
21
28
|
assert_equal issue.id, issue.to_param
|
data/test/dirty_test.rb
CHANGED
@@ -8,10 +8,20 @@ class CassandraObject::DirtyTest < CassandraObject::TestCase
|
|
8
8
|
end
|
9
9
|
|
10
10
|
test 'save clears dirty' do
|
11
|
-
record = TestRecord.new
|
11
|
+
record = TestRecord.new name: 'foo'
|
12
12
|
assert record.changed?
|
13
13
|
|
14
|
-
record.save
|
14
|
+
record.save!
|
15
|
+
|
16
|
+
assert !record.changed?
|
17
|
+
end
|
18
|
+
|
19
|
+
test 'reload clears dirty' do
|
20
|
+
record = TestRecord.create! name: 'foo'
|
21
|
+
record.name = 'bar'
|
22
|
+
assert record.changed?
|
23
|
+
|
24
|
+
record.reload
|
15
25
|
|
16
26
|
assert !record.changed?
|
17
27
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class CassandraObject::Types::BaseTypeTest < CassandraObject::Types::TestCase
|
4
|
-
test '
|
5
|
-
assert_equal
|
4
|
+
test 'default' do
|
5
|
+
assert_equal nil, coder.default
|
6
|
+
assert_equal '5', CassandraObject::Types::BaseType.new(default: '5').default
|
6
7
|
end
|
7
8
|
|
8
9
|
test 'encode' do
|
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.
|
4
|
+
version: 2.7.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ date: 2011-08-30 00:00:00.000000000Z
|
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
17
|
-
requirement: &
|
17
|
+
requirement: &70185349554920 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '3.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70185349554920
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: cassandra
|
28
|
-
requirement: &
|
28
|
+
requirement: &70185349554140 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 0.12.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70185349554140
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bundler
|
39
|
-
requirement: &
|
39
|
+
requirement: &70185349553500 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
version: 1.0.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70185349553500
|
48
48
|
description: Cassandra ActiveModel
|
49
49
|
email: gems@gotime.com
|
50
50
|
executables: []
|