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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gotime-cassandra_object'
5
- s.version = '2.7.2'
5
+ s.version = '2.7.3'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
 
@@ -29,18 +29,16 @@ module CassandraObject
29
29
  # attribute :ammo, type: Ammo, coder: AmmoCodec
30
30
  #
31
31
  def attribute(name, options)
32
- expected_type = options.delete :type
33
- coder = options.delete :coder
32
+ type = options.delete :type
33
+ coder = options.delete :coder
34
34
 
35
- if expected_type.is_a?(Symbol)
36
- type_mapping = CassandraObject::Type.get_mapping(expected_type) || (raise "Unknown type #{expected_type}")
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, type_mapping, options)
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, :expected_type
5
- def initialize(name, type_mapping, options)
4
+ attr_reader :name, :coder
5
+ def initialize(name, coder, options)
6
6
  @name = name.to_s
7
- @coder = type_mapping.coder.new(options)
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?(expected_type) ? value : coder.decode(value)
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
@@ -25,7 +25,7 @@ module CassandraObject
25
25
  def reload
26
26
  super.tap do
27
27
  @previously_changed.try :clear
28
- @changed_attributes.clear
28
+ @changed_attributes.try :clear
29
29
  end
30
30
  end
31
31
 
@@ -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.is_a?(CustomKey) && other.value == value
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.is_a?(NaturalKey) && other.value == value
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, expected_type, coder)
11
- attribute_types[name] = TypeMapping.new(expected_type, coder)
7
+ def register(name, coder)
8
+ attribute_types[name] = coder
12
9
  end
13
10
 
14
- def get_mapping(name)
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, Array, CassandraObject::Types::ArrayType)
2
- CassandraObject::Type.register(:boolean, Object, CassandraObject::Types::BooleanType)
3
- CassandraObject::Type.register(:date, Date, CassandraObject::Types::DateType)
4
- CassandraObject::Type.register(:float, Float, CassandraObject::Types::FloatType)
5
- CassandraObject::Type.register(:hash, Hash, CassandraObject::Types::HashType)
6
- CassandraObject::Type.register(:integer, Integer, CassandraObject::Types::IntegerType)
7
- CassandraObject::Type.register(:time, Time, CassandraObject::Types::TimeType)
8
- CassandraObject::Type.register(:time_with_zone, ActiveSupport::TimeWithZone, CassandraObject::Types::TimeWithZoneType)
9
- CassandraObject::Type.register(:string, String, CassandraObject::Types::StringType)
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)
@@ -7,7 +7,7 @@ module CassandraObject
7
7
  end
8
8
 
9
9
  def wrap(record, name, value)
10
- value.force_encoding('UTF-8')
10
+ (value.frozen? ? value.dup : value).force_encoding('UTF-8')
11
11
  end
12
12
  end
13
13
  end
@@ -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 CustomType, model_attribute.expected_type
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.2
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-08-31 00:00:00.000000000Z
13
+ date: 2011-09-01 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
- requirement: &70248322073880 !ruby/object:Gem::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: *70248322073880
25
+ version_requirements: *70131057655200
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cassandra
28
- requirement: &70248322073300 !ruby/object:Gem::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: *70248322073300
36
+ version_requirements: *70131057654400
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &70248322072840 !ruby/object:Gem::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: *70248322072840
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.6
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
-