gotime-cassandra_object 2.7.2 → 2.7.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 +1 -1
- data/lib/cassandra_object/attribute_methods.rb +11 -7
- data/lib/cassandra_object/attribute_methods/definition.rb +5 -6
- data/lib/cassandra_object/attribute_methods/dirty.rb +1 -1
- data/lib/cassandra_object/identity/custom_key_factory.rb +5 -11
- data/lib/cassandra_object/identity/natural_key_factory.rb +1 -11
- data/lib/cassandra_object/identity/uuid_key_factory.rb +0 -11
- data/lib/cassandra_object/type.rb +3 -6
- data/lib/cassandra_object/types.rb +9 -9
- data/lib/cassandra_object/types/string_type.rb +1 -1
- data/test/attribute_methods_test.rb +1 -1
- data/test/types/string_type_test.rb +7 -0
- metadata +9 -10
- data/lib/cassandra_object/identity/key.rb +0 -20
@@ -29,18 +29,16 @@ module CassandraObject
|
|
29
29
|
# attribute :ammo, type: Ammo, coder: AmmoCodec
|
30
30
|
#
|
31
31
|
def attribute(name, options)
|
32
|
-
|
33
|
-
coder
|
32
|
+
type = options.delete :type
|
33
|
+
coder = options.delete :coder
|
34
34
|
|
35
|
-
if
|
36
|
-
|
35
|
+
if type.is_a?(Symbol)
|
36
|
+
coder = CassandraObject::Type.get_coder(type) || (raise "Unknown type #{type}")
|
37
37
|
elsif coder.nil?
|
38
38
|
raise "Must supply a :coder for #{name}"
|
39
|
-
else
|
40
|
-
type_mapping = CassandraObject::Type::TypeMapping.new(expected_type, coder)
|
41
39
|
end
|
42
40
|
|
43
|
-
attribute_definitions[name.to_sym] = AttributeMethods::Definition.new(name,
|
41
|
+
attribute_definitions[name.to_sym] = AttributeMethods::Definition.new(name, coder, options)
|
44
42
|
end
|
45
43
|
|
46
44
|
def json(name, options = {})
|
@@ -56,7 +54,13 @@ module CassandraObject
|
|
56
54
|
end
|
57
55
|
|
58
56
|
def define_attribute_methods
|
57
|
+
return if attribute_methods_generated?
|
59
58
|
super(attribute_definitions.keys)
|
59
|
+
@attribute_methods_generated = true
|
60
|
+
end
|
61
|
+
|
62
|
+
def attribute_methods_generated?
|
63
|
+
@attribute_methods_generated ||= false
|
60
64
|
end
|
61
65
|
end
|
62
66
|
|
@@ -1,20 +1,19 @@
|
|
1
1
|
module CassandraObject
|
2
2
|
module AttributeMethods
|
3
3
|
class Definition
|
4
|
-
attr_reader :name, :coder
|
5
|
-
def initialize(name,
|
4
|
+
attr_reader :name, :coder
|
5
|
+
def initialize(name, coder, options)
|
6
6
|
@name = name.to_s
|
7
|
-
@coder =
|
8
|
-
@expected_type = type_mapping.expected_type
|
7
|
+
@coder = coder.new(options)
|
9
8
|
end
|
10
9
|
|
11
10
|
def instantiate(record, value)
|
12
11
|
value ||= coder.default
|
13
12
|
return unless value
|
14
13
|
|
15
|
-
value = value.kind_of?(
|
14
|
+
value = value.kind_of?(String) ? coder.decode(value) : value
|
16
15
|
coder.wrap(record, name, value)
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
20
|
-
end
|
19
|
+
end
|
@@ -2,8 +2,6 @@ module CassandraObject
|
|
2
2
|
module Identity
|
3
3
|
class CustomKeyFactory < AbstractKeyFactory
|
4
4
|
class CustomKey
|
5
|
-
include Key
|
6
|
-
|
7
5
|
attr_reader :value
|
8
6
|
|
9
7
|
def initialize(value)
|
@@ -14,16 +12,8 @@ module CassandraObject
|
|
14
12
|
value
|
15
13
|
end
|
16
14
|
|
17
|
-
def to_param
|
18
|
-
value
|
19
|
-
end
|
20
|
-
|
21
15
|
def ==(other)
|
22
|
-
other.
|
23
|
-
end
|
24
|
-
|
25
|
-
def eql?(other)
|
26
|
-
other == self
|
16
|
+
other.to_s == value
|
27
17
|
end
|
28
18
|
end
|
29
19
|
|
@@ -36,6 +26,10 @@ module CassandraObject
|
|
36
26
|
def next_key(object)
|
37
27
|
CustomKey.new(object.send(@method))
|
38
28
|
end
|
29
|
+
|
30
|
+
def parse(value)
|
31
|
+
value
|
32
|
+
end
|
39
33
|
end
|
40
34
|
end
|
41
35
|
end
|
@@ -2,8 +2,6 @@ module CassandraObject
|
|
2
2
|
module Identity
|
3
3
|
class NaturalKeyFactory < AbstractKeyFactory
|
4
4
|
class NaturalKey
|
5
|
-
include Key
|
6
|
-
|
7
5
|
attr_reader :value
|
8
6
|
|
9
7
|
def initialize(value)
|
@@ -14,16 +12,8 @@ module CassandraObject
|
|
14
12
|
value
|
15
13
|
end
|
16
14
|
|
17
|
-
def to_param
|
18
|
-
value
|
19
|
-
end
|
20
|
-
|
21
15
|
def ==(other)
|
22
|
-
other.
|
23
|
-
end
|
24
|
-
|
25
|
-
def eql?(other)
|
26
|
-
other == self
|
16
|
+
other.to_s == to_s
|
27
17
|
end
|
28
18
|
end
|
29
19
|
|
@@ -3,26 +3,15 @@ module CassandraObject
|
|
3
3
|
# Key factories need to support 3 operations
|
4
4
|
class UUIDKeyFactory < AbstractKeyFactory
|
5
5
|
class UUID < SimpleUUID::UUID
|
6
|
-
include Key
|
7
|
-
|
8
|
-
def to_param
|
9
|
-
to_guid
|
10
|
-
end
|
11
|
-
|
12
6
|
def to_s
|
13
|
-
# FIXME - this should probably write the raw bytes
|
14
|
-
# but it's very hard to debug without this for now.
|
15
7
|
to_guid
|
16
8
|
end
|
17
9
|
end
|
18
10
|
|
19
|
-
# Next key takes an object and returns the key object it should use.
|
20
|
-
# object will be ignored with synthetic keys but could be useful with natural ones
|
21
11
|
def next_key(object)
|
22
12
|
UUID.new
|
23
13
|
end
|
24
14
|
|
25
|
-
# Parse should create a new key object from the 'to_param' format
|
26
15
|
def parse(string)
|
27
16
|
UUID.new(string) if string
|
28
17
|
rescue
|
@@ -1,17 +1,14 @@
|
|
1
1
|
module CassandraObject
|
2
2
|
class Type
|
3
|
-
class TypeMapping < Struct.new(:expected_type, :coder)
|
4
|
-
end
|
5
|
-
|
6
3
|
cattr_accessor :attribute_types
|
7
4
|
self.attribute_types = {}.with_indifferent_access
|
8
5
|
|
9
6
|
class << self
|
10
|
-
def register(name,
|
11
|
-
attribute_types[name] =
|
7
|
+
def register(name, coder)
|
8
|
+
attribute_types[name] = coder
|
12
9
|
end
|
13
10
|
|
14
|
-
def
|
11
|
+
def get_coder(name)
|
15
12
|
attribute_types[name]
|
16
13
|
end
|
17
14
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
CassandraObject::Type.register(:array,
|
2
|
-
CassandraObject::Type.register(:boolean,
|
3
|
-
CassandraObject::Type.register(:date,
|
4
|
-
CassandraObject::Type.register(:float,
|
5
|
-
CassandraObject::Type.register(:hash,
|
6
|
-
CassandraObject::Type.register(:integer,
|
7
|
-
CassandraObject::Type.register(:time,
|
8
|
-
CassandraObject::Type.register(:time_with_zone,
|
9
|
-
CassandraObject::Type.register(:string,
|
1
|
+
CassandraObject::Type.register(:array, CassandraObject::Types::ArrayType)
|
2
|
+
CassandraObject::Type.register(:boolean, CassandraObject::Types::BooleanType)
|
3
|
+
CassandraObject::Type.register(:date, CassandraObject::Types::DateType)
|
4
|
+
CassandraObject::Type.register(:float, CassandraObject::Types::FloatType)
|
5
|
+
CassandraObject::Type.register(:hash, CassandraObject::Types::HashType)
|
6
|
+
CassandraObject::Type.register(:integer, CassandraObject::Types::IntegerType)
|
7
|
+
CassandraObject::Type.register(:time, CassandraObject::Types::TimeType)
|
8
|
+
CassandraObject::Type.register(:time_with_zone, CassandraObject::Types::TimeWithZoneType)
|
9
|
+
CassandraObject::Type.register(:string, CassandraObject::Types::StringType)
|
@@ -24,7 +24,7 @@ class CassandraObject::AttributeMethodsTest < CassandraObject::TestCase
|
|
24
24
|
model_attribute = TestIssue.attribute_definitions[:custom_column]
|
25
25
|
|
26
26
|
assert_kind_of CustomCoder, model_attribute.coder
|
27
|
-
assert_equal
|
27
|
+
assert_equal 'custom_column', model_attribute.name
|
28
28
|
end
|
29
29
|
|
30
30
|
test 'json attribute' do
|
@@ -15,4 +15,11 @@ class CassandraObject::Types::StringTypeTest < CassandraObject::Types::TestCase
|
|
15
15
|
coder.wrap(nil, nil, '123'.force_encoding('ASCII-8BIT')).encoding
|
16
16
|
)
|
17
17
|
end
|
18
|
+
|
19
|
+
test 'wrap when frozen' do
|
20
|
+
assert_equal(
|
21
|
+
'123'.force_encoding('UTF-8').encoding,
|
22
|
+
coder.wrap(nil, nil, '123'.force_encoding('ASCII-8BIT').freeze).encoding
|
23
|
+
)
|
24
|
+
end
|
18
25
|
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.7.
|
4
|
+
version: 2.7.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-09-01 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
17
|
-
requirement: &
|
17
|
+
requirement: &70131057655200 !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: *70131057655200
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: cassandra
|
28
|
-
requirement: &
|
28
|
+
requirement: &70131057654400 !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: *70131057654400
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: bundler
|
39
|
-
requirement: &
|
39
|
+
requirement: &70131057653480 !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: *70131057653480
|
48
48
|
description: Cassandra ActiveModel
|
49
49
|
email: gems@gotime.com
|
50
50
|
executables: []
|
@@ -81,7 +81,6 @@ files:
|
|
81
81
|
- lib/cassandra_object/identity/abstract_key_factory.rb
|
82
82
|
- lib/cassandra_object/identity/custom_key_factory.rb
|
83
83
|
- lib/cassandra_object/identity/hashed_natural_key_factory.rb
|
84
|
-
- lib/cassandra_object/identity/key.rb
|
85
84
|
- lib/cassandra_object/identity/natural_key_factory.rb
|
86
85
|
- lib/cassandra_object/identity/uuid_key_factory.rb
|
87
86
|
- lib/cassandra_object/log_subscriber.rb
|
@@ -158,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
157
|
version: 1.3.5
|
159
158
|
requirements: []
|
160
159
|
rubyforge_project:
|
161
|
-
rubygems_version: 1.8.
|
160
|
+
rubygems_version: 1.8.10
|
162
161
|
signing_key:
|
163
162
|
specification_version: 3
|
164
163
|
summary: Cassandra ActiveModel
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module CassandraObject
|
2
|
-
module Identity
|
3
|
-
# An "interface" that keys need to implement
|
4
|
-
#
|
5
|
-
# You don't have to include this. But, there's no reason I can think of not to.
|
6
|
-
#
|
7
|
-
module Key
|
8
|
-
# to_param should return a nice-readable representation of the key suitable to chuck into URLs
|
9
|
-
#
|
10
|
-
# @return [String] a nice readable representation of the key suitable for URLs
|
11
|
-
def to_param; end
|
12
|
-
|
13
|
-
# to_s should return the bytes which will be written to cassandra both as keys and values for associations.
|
14
|
-
#
|
15
|
-
# @return [String] the bytes which will be written to cassandra as keys
|
16
|
-
def to_s; end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|