gotime-cassandra_object 2.7.2 → 2.7.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|