gotime-cassandra_object 2.2.4 → 2.3.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.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gotime-cassandra_object'
5
- s.version = '2.2.4'
5
+ s.version = '2.3.0'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
 
@@ -1,15 +1,15 @@
1
1
  module CassandraObject
2
2
  class Attribute
3
- attr_reader :name, :converter, :expected_type
4
- def initialize(name, converter, expected_type)
3
+ attr_reader :name, :coder, :expected_type
4
+ def initialize(name, coder, expected_type)
5
5
  @name = name.to_s
6
- @converter = converter
6
+ @coder = coder
7
7
  @expected_type = expected_type
8
8
  end
9
9
 
10
10
  def check_value!(value)
11
11
  return value if value.nil?
12
- value.kind_of?(expected_type) ? value : converter.decode(value)
12
+ value.kind_of?(expected_type) ? value : coder.decode(value)
13
13
  end
14
14
  end
15
15
 
@@ -24,16 +24,16 @@ module CassandraObject
24
24
  end
25
25
 
26
26
  if type_mapping = CassandraObject::Type.get_mapping(options[:type])
27
- converter = type_mapping.converter
27
+ coder = type_mapping.coder
28
28
  expected_type = type_mapping.expected_type
29
- elsif options[:converter]
30
- converter = options[:converter]
29
+ elsif options[:coder]
30
+ coder = options[:coder]
31
31
  expected_type = options[:type]
32
32
  else
33
33
  raise "Unknown type #{options[:type]}"
34
34
  end
35
35
 
36
- model_attributes[name] = Attribute.new(name, converter, expected_type)
36
+ model_attributes[name] = Attribute.new(name, coder, expected_type)
37
37
  end
38
38
 
39
39
  def define_attribute_methods
@@ -49,13 +49,13 @@ module CassandraObject
49
49
  # cassandra stores bytes, not strings, so it has no concept of encodings. The ruby thrift gem
50
50
  # expects all strings to be encoded as ascii-8bit.
51
51
  # don't attempt to encode columns that are nil
52
- memo[column_name.to_s] = value.nil? ? '' : model_attributes[column_name].converter.encode(value).force_encoding('ASCII-8BIT')
52
+ memo[column_name.to_s] = value.nil? ? '' : model_attributes[column_name].coder.encode(value).force_encoding('ASCII-8BIT')
53
53
  memo
54
54
  end.merge({"schema_version" => schema_version.to_s})
55
55
  end
56
56
 
57
57
  def decode_columns_hash(attributes)
58
- Hash[attributes.map { |k, v| [k.to_s, model_attributes[k].converter.decode(v)] }]
58
+ Hash[attributes.map { |k, v| [k.to_s, model_attributes[k].coder.decode(v)] }]
59
59
  end
60
60
 
61
61
  def column_family_configuration
@@ -1,14 +1,14 @@
1
1
  module CassandraObject
2
2
  class Type
3
- class TypeMapping < Struct.new(:expected_type, :converter)
3
+ class TypeMapping < Struct.new(:expected_type, :coder)
4
4
  end
5
5
 
6
6
  cattr_accessor :attribute_types
7
7
  self.attribute_types = {}.with_indifferent_access
8
8
 
9
9
  class << self
10
- def register(name, expected_type, converter)
11
- attribute_types[name] = TypeMapping.new(expected_type, converter)
10
+ def register(name, expected_type, coder)
11
+ attribute_types[name] = TypeMapping.new(expected_type, coder.new)
12
12
  end
13
13
 
14
14
  def get_mapping(name)
@@ -1,16 +1,14 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module ArrayType
3
+ class ArrayType
4
4
  def encode(array)
5
5
  raise ArgumentError.new("#{self} requires an Array") unless array.kind_of?(Array)
6
6
  array.to_json
7
7
  end
8
- module_function :encode
9
8
 
10
9
  def decode(str)
11
10
  ActiveSupport::JSON.decode(str)
12
11
  end
13
- module_function :decode
14
12
  end
15
13
  end
16
14
  end
@@ -1,6 +1,6 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module BooleanType
3
+ class BooleanType
4
4
  TRUE_VALS = [true, 'true', '1']
5
5
  FALSE_VALS = [false, 'false', '0', '', nil]
6
6
  VALID_VALS = TRUE_VALS + FALSE_VALS
@@ -11,13 +11,11 @@ module CassandraObject
11
11
  end
12
12
  TRUE_VALS.include?(bool) ? '1' : '0'
13
13
  end
14
- module_function :encode
15
14
 
16
15
  def decode(str)
17
16
  raise ArgumentError.new("Cannot convert #{str} into a boolean") unless VALID_VALS.include?(str)
18
17
  TRUE_VALS.include?(str)
19
18
  end
20
- module_function :decode
21
19
  end
22
20
  end
23
21
  end
@@ -1,20 +1,18 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module DateType
3
+ class DateType
4
4
  FORMAT = '%Y-%m-%d'
5
5
  REGEX = /\A\d{4}-\d{2}-\d{2}\Z/
6
6
  def encode(date)
7
7
  raise ArgumentError.new("#{self} requires a Date") unless date.kind_of?(Date)
8
8
  date.strftime(FORMAT)
9
9
  end
10
- module_function :encode
11
10
 
12
11
  def decode(str)
13
12
  return nil if str.empty?
14
13
  raise ArgumentError.new("Cannot convert #{str} into a Date") unless str.kind_of?(String) && str.match(REGEX)
15
14
  Date.strptime(str, FORMAT)
16
15
  end
17
- module_function :decode
18
16
  end
19
17
  end
20
18
  end
@@ -1,19 +1,17 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module FloatType
3
+ class FloatType
4
4
  REGEX = /\A[-+]?\d+(\.\d+)?\Z/
5
5
  def encode(float)
6
6
  raise ArgumentError.new("#{self} requires a Float") unless float.kind_of?(Float)
7
7
  float.to_s
8
8
  end
9
- module_function :encode
10
9
 
11
10
  def decode(str)
12
11
  return nil if str.empty?
13
12
  raise ArgumentError.new("Cannot convert #{str} into a Float") unless str.kind_of?(String) && str.match(REGEX)
14
13
  str.to_f
15
14
  end
16
- module_function :decode
17
15
  end
18
16
  end
19
17
  end
@@ -1,16 +1,14 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module HashType
3
+ class HashType
4
4
  def encode(hash)
5
5
  raise ArgumentError.new("#{self} requires a Hash") unless hash.kind_of?(Hash)
6
6
  ActiveSupport::JSON.encode(hash)
7
7
  end
8
- module_function :encode
9
8
 
10
9
  def decode(str)
11
10
  ActiveSupport::JSON.decode(str)
12
11
  end
13
- module_function :decode
14
12
  end
15
13
  end
16
14
  end
@@ -1,19 +1,17 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module IntegerType
3
+ class IntegerType
4
4
  REGEX = /\A[-+]?\d+\Z/
5
5
  def encode(int)
6
6
  raise ArgumentError.new("#{self} requires an Integer. You passed #{int.inspect}") unless int.kind_of?(Integer)
7
7
  int.to_s
8
8
  end
9
- module_function :encode
10
9
 
11
10
  def decode(str)
12
11
  return nil if str.empty?
13
12
  raise ArgumentError.new("Cannot convert #{str} into an Integer") unless str.kind_of?(String) && str.match(REGEX)
14
13
  str.to_i
15
14
  end
16
- module_function :decode
17
15
  end
18
16
  end
19
17
  end
@@ -1,6 +1,6 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module SetType
3
+ class SetType
4
4
  def encode(set)
5
5
  if set.kind_of?(Set)
6
6
  set.to_json
@@ -10,13 +10,11 @@ module CassandraObject
10
10
  raise ArgumentError.new("#{self} requires an Array or Set")
11
11
  end
12
12
  end
13
- module_function :encode
14
13
 
15
14
  def decode(str)
16
15
  return str.to_a if str.kind_of?(Set)
17
16
  ActiveSupport::JSON.decode(str)
18
17
  end
19
- module_function :decode
20
18
  end
21
19
  end
22
20
  end
@@ -1,16 +1,14 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module StringType
3
+ class StringType
4
4
  def encode(str)
5
5
  raise ArgumentError.new("#{self} requires a String") unless str.kind_of?(String)
6
6
  str.dup
7
7
  end
8
- module_function :encode
9
8
 
10
9
  def decode(str)
11
10
  str
12
11
  end
13
- module_function :decode
14
12
  end
15
13
  end
16
14
  end
@@ -1,6 +1,6 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module TimeType
3
+ class TimeType
4
4
  # lifted from the implementation of Time.xmlschema and simplified
5
5
  REGEX = /\A\s*
6
6
  (-?\d+)-(\d\d)-(\d\d)
@@ -14,14 +14,12 @@ module CassandraObject
14
14
  raise ArgumentError.new("#{self} requires a Time") unless time.kind_of?(Time)
15
15
  time.xmlschema(6)
16
16
  end
17
- module_function :encode
18
17
 
19
18
  def decode(str)
20
19
  return nil if str.empty?
21
20
  raise ArgumentError.new("Cannot convert #{str} into a Time") unless str.kind_of?(String) && str.match(REGEX)
22
21
  Time.xmlschema(str)
23
22
  end
24
- module_function :decode
25
23
  end
26
24
  end
27
25
  end
@@ -1,18 +1,16 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module TimeWithZoneType
3
+ class TimeWithZoneType
4
4
  def encode(time)
5
5
  raise ArgumentError.new("#{self} requires a Time") unless time.kind_of?(Time)
6
6
  time.utc.xmlschema(6)
7
7
  end
8
- module_function :encode
9
8
 
10
9
  def decode(str)
11
10
  return nil if str.empty?
12
11
  raise ArgumentError.new("Cannot convert #{str} into a Time") unless str.kind_of?(String) && str.match(TimeType::REGEX)
13
12
  Time.xmlschema(str).in_time_zone
14
13
  end
15
- module_function :decode
16
14
  end
17
15
  end
18
16
  end
@@ -1,18 +1,16 @@
1
1
  module CassandraObject
2
2
  module Types
3
- module UTF8StringType
3
+ class UTF8StringType
4
4
  def encode(str)
5
5
  # This is technically the most correct, but it is a pain to require utf-8 encoding for all strings. Should revisit.
6
6
  #raise ArgumentError.new("#{self} requires a UTF-8 encoded String") unless str.kind_of?(String) && str.encoding == Encoding::UTF_8
7
7
  raise ArgumentError.new("#{self} requires a String") unless str.kind_of?(String)
8
8
  str.dup
9
9
  end
10
- module_function :encode
11
10
 
12
11
  def decode(str)
13
12
  str.force_encoding('UTF-8')
14
13
  end
15
- module_function :decode
16
14
  end
17
15
  end
18
16
  end
data/test/test_helper.rb CHANGED
@@ -28,4 +28,13 @@ module CassandraObject
28
28
  CassandraObject::Base.connection
29
29
  end
30
30
  end
31
+
32
+ module Types
33
+ class TestCase < ActiveSupport::TestCase
34
+ attr_accessor :coder
35
+ setup do
36
+ @coder = self.class.name.sub(/Test$/, '').constantize.new
37
+ end
38
+ end
39
+ end
31
40
  end
@@ -1,15 +1,15 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Types::ArrayTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Types::ArrayTypeTest < CassandraObject::Types::TestCase
4
4
  test 'encode' do
5
- assert_equal ['1', '2'].to_json, CassandraObject::Types::ArrayType.encode(['1', '2'])
5
+ assert_equal ['1', '2'].to_json, coder.encode(['1', '2'])
6
6
 
7
7
  assert_raise ArgumentError do
8
- CassandraObject::Types::ArrayType.encode('wtf')
8
+ coder.encode('wtf')
9
9
  end
10
10
  end
11
11
 
12
12
  test 'decode' do
13
- assert_equal ['1', '2'], CassandraObject::Types::ArrayType.decode(['1', '2'].to_json)
13
+ assert_equal ['1', '2'], coder.decode(['1', '2'].to_json)
14
14
  end
15
15
  end
@@ -1,23 +1,23 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Types::BooleanTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Types::BooleanTypeTest < CassandraObject::Types::TestCase
4
4
  test 'encode' do
5
- assert_equal '1', CassandraObject::Types::BooleanType.encode(true)
6
- assert_equal '1', CassandraObject::Types::BooleanType.encode('true')
7
- assert_equal '1', CassandraObject::Types::BooleanType.encode('1')
8
-
9
- assert_equal '0', CassandraObject::Types::BooleanType.encode(false)
10
- assert_equal '0', CassandraObject::Types::BooleanType.encode('false')
11
- assert_equal '0', CassandraObject::Types::BooleanType.encode('0')
12
- assert_equal '0', CassandraObject::Types::BooleanType.encode('')
5
+ assert_equal '1', coder.encode(true)
6
+ assert_equal '1', coder.encode('true')
7
+ assert_equal '1', coder.encode('1')
8
+ coder
9
+ assert_equal '0', coder.encode(false)
10
+ assert_equal '0', coder.encode('false')
11
+ assert_equal '0', coder.encode('0')
12
+ assert_equal '0', coder.encode('')
13
13
 
14
14
  assert_raise ArgumentError do
15
- CassandraObject::Types::BooleanType.encode('wtf')
15
+ coder.encode('wtf')
16
16
  end
17
17
  end
18
18
 
19
19
  test 'decode' do
20
- assert_equal true, CassandraObject::Types::BooleanType.decode('1')
21
- assert_equal false, CassandraObject::Types::BooleanType.decode('0')
20
+ assert_equal true, coder.decode('1')
21
+ assert_equal false, coder.decode('0')
22
22
  end
23
23
  end
@@ -1,4 +1,4 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Type::DateTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Type::DateTypeTest < CassandraObject::Types::TestCase
4
4
  end
@@ -1,4 +1,4 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Type::FloatTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Type::FloatTypeTest < CassandraObject::Types::TestCase
4
4
  end
@@ -1,4 +1,4 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Type::BooleanTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Type::BooleanTypeTest < CassandraObject::Types::TestCase
4
4
  end
@@ -1,18 +1,18 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Types::IntegerTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Types::IntegerTypeTest < CassandraObject::Types::TestCase
4
4
  test 'encode' do
5
- assert_equal '3', CassandraObject::Types::IntegerType.encode(3)
6
- assert_equal '-3', CassandraObject::Types::IntegerType.encode(-3)
5
+ assert_equal '3', coder.encode(3)
6
+ assert_equal '-3', coder.encode(-3)
7
7
 
8
8
  assert_raise ArgumentError do
9
- CassandraObject::Types::BooleanType.encode('xx')
9
+ coder.encode('xx')
10
10
  end
11
11
  end
12
12
 
13
13
  test 'decode' do
14
- assert_nil CassandraObject::Types::IntegerType.decode('')
15
- assert_equal 3, CassandraObject::Types::IntegerType.decode('3')
16
- assert_equal -3, CassandraObject::Types::IntegerType.decode('-3')
14
+ assert_nil coder.decode('')
15
+ assert_equal 3, coder.decode('3')
16
+ assert_equal -3, coder.decode('-3')
17
17
  end
18
18
  end
@@ -1,17 +1,17 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Types::SetTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Types::SetTypeTest < CassandraObject::Types::TestCase
4
4
  test 'encode' do
5
- assert_equal ['1', '2'].to_json, CassandraObject::Types::SetType.encode(['1', '2'].to_set)
6
- assert_equal ['1', '2'].to_json, CassandraObject::Types::SetType.encode(['1', '2', '2'])
5
+ assert_equal ['1', '2'].to_json, coder.encode(['1', '2'].to_set)
6
+ assert_equal ['1', '2'].to_json, coder.encode(['1', '2', '2'])
7
7
 
8
8
  assert_raise ArgumentError do
9
- CassandraObject::Types::SetType.encode('wtf')
9
+ coder.encode('wtf')
10
10
  end
11
11
  end
12
12
 
13
13
  test 'decode' do
14
- assert_equal ['1', '2'], CassandraObject::Types::SetType.decode(['1', '2'].to_set)
15
- assert_equal ['1', '2'], CassandraObject::Types::SetType.decode(['1', '2'].to_json)
14
+ assert_equal ['1', '2'], coder.decode(['1', '2'].to_set)
15
+ assert_equal ['1', '2'], coder.decode(['1', '2'].to_json)
16
16
  end
17
17
  end
@@ -1,4 +1,4 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Type::StringTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Type::StringTypeTest < CassandraObject::Types::TestCase
4
4
  end
@@ -1,4 +1,4 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Type::BooleanTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Type::TimeTypeTest < CassandraObject::Types::TestCase
4
4
  end
@@ -1,4 +1,4 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::Type::BooleanTypeTest < CassandraObject::TestCase
3
+ class CassandraObject::Type::BooleanTypeTest < CassandraObject::Types::TestCase
4
4
  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.2.4
4
+ version: 2.3.0
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-07-29 00:00:00.000000000Z
13
+ date: 2011-08-05 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2158117880 !ruby/object:Gem::Requirement
17
+ requirement: &2156966760 !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: *2158117880
25
+ version_requirements: *2156966760
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cassandra
28
- requirement: &2158117360 !ruby/object:Gem::Requirement
28
+ requirement: &2156966180 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.11.3
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2158117360
36
+ version_requirements: *2156966180
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &2158116780 !ruby/object:Gem::Requirement
39
+ requirement: &2156965600 !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: *2158116780
47
+ version_requirements: *2156965600
48
48
  description: Cassandra ActiveModel
49
49
  email: gems@gotime.com
50
50
  executables: []