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.
@@ -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
-