sessionm-cassandra_object 2.2.8 → 2.2.10
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/lib/cassandra_object/attributes.rb +12 -5
- data/lib/cassandra_object/persistence.rb +9 -1
- data/lib/cassandra_object/types/decimal_type.rb +6 -2
- data/sessionm-cassandra_object.gemspec +1 -1
- data/test/connection_test.rb +5 -5
- data/test/persistence_test.rb +6 -2
- data/test/test_helper.rb +4 -1
- data/test/types/decimal_type_test.rb +2 -0
- metadata +7 -7
@@ -1,15 +1,22 @@
|
|
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, :converter, :expected_type, :options
|
4
|
+
def initialize(name, converter, expected_type, options)
|
5
5
|
@name = name.to_s
|
6
6
|
@converter = converter
|
7
7
|
@expected_type = expected_type
|
8
|
+
@options = options
|
8
9
|
end
|
9
10
|
|
10
11
|
def check_value!(value)
|
11
12
|
return value if value.nil?
|
12
|
-
value.kind_of?(expected_type)
|
13
|
+
if value.kind_of?(expected_type)
|
14
|
+
value
|
15
|
+
elsif converter.method(:decode).arity == 1
|
16
|
+
converter.decode(value)
|
17
|
+
else
|
18
|
+
converter.decode(value, @options)
|
19
|
+
end
|
13
20
|
end
|
14
21
|
end
|
15
22
|
|
@@ -32,8 +39,8 @@ module CassandraObject
|
|
32
39
|
else
|
33
40
|
raise "Unknown type #{options[:type]}"
|
34
41
|
end
|
35
|
-
|
36
|
-
model_attributes[name] = Attribute.new(name, converter, expected_type)
|
42
|
+
|
43
|
+
model_attributes[name] = Attribute.new(name, converter, expected_type, options.except(:type, :converter))
|
37
44
|
end
|
38
45
|
|
39
46
|
def define_attribute_methods
|
@@ -55,7 +55,15 @@ module CassandraObject
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def decode_columns_hash(attributes)
|
58
|
-
Hash[attributes.map
|
58
|
+
Hash[attributes.map do |k, v|
|
59
|
+
attribute = model_attributes[k]
|
60
|
+
decoded = if attribute.converter.method(:decode).arity == 1
|
61
|
+
attribute.converter.decode(v)
|
62
|
+
else
|
63
|
+
attribute.converter.decode(v, attribute.options)
|
64
|
+
end
|
65
|
+
[k.to_s, decoded]
|
66
|
+
end]
|
59
67
|
end
|
60
68
|
|
61
69
|
def column_family_configuration
|
@@ -7,10 +7,14 @@ module CassandraObject
|
|
7
7
|
end
|
8
8
|
module_function :encode
|
9
9
|
|
10
|
-
def decode(str)
|
10
|
+
def decode(str, options={})
|
11
11
|
return nil if str.empty?
|
12
12
|
raise ArgumentError.new("Cannot convert #{str} into a BigDecimal") unless str.kind_of?(String)
|
13
|
-
|
13
|
+
if options[:precision].present?
|
14
|
+
BigDecimal.new(str, options[:precision])
|
15
|
+
else
|
16
|
+
BigDecimal.new(str)
|
17
|
+
end
|
14
18
|
end
|
15
19
|
module_function :decode
|
16
20
|
end
|
data/test/connection_test.rb
CHANGED
@@ -6,23 +6,23 @@ class CassandraObject::ConnectionTest < CassandraObject::TestCase
|
|
6
6
|
|
7
7
|
test 'establish_connection' do
|
8
8
|
TestObject.establish_connection(
|
9
|
-
keyspace:
|
9
|
+
keyspace: TEST_KEYSPACE,
|
10
10
|
servers: '192.168.0.100:9160',
|
11
11
|
thrift: {'timeout' => 10}
|
12
12
|
)
|
13
13
|
|
14
14
|
assert_not_equal CassandraObject::Base.connection, TestObject.connection
|
15
|
-
assert_equal
|
15
|
+
assert_equal TEST_KEYSPACE, TestObject.connection.keyspace
|
16
16
|
assert_equal ["192.168.0.100:9160"], TestObject.connection.servers
|
17
17
|
assert_equal 10, TestObject.connection.thrift_client_options[:timeout]
|
18
18
|
end
|
19
19
|
|
20
20
|
test 'establish_connection defaults' do
|
21
21
|
TestObject.establish_connection(
|
22
|
-
keyspace:
|
22
|
+
keyspace: TEST_KEYSPACE
|
23
23
|
)
|
24
24
|
|
25
|
-
assert_equal
|
25
|
+
assert_equal TEST_KEYSPACE, TestObject.connection.keyspace
|
26
26
|
assert_equal ["127.0.0.1:9160"], TestObject.connection.servers
|
27
27
|
end
|
28
|
-
end
|
28
|
+
end
|
data/test/persistence_test.rb
CHANGED
@@ -22,9 +22,13 @@ class CassandraObject::PersistenceTest < CassandraObject::TestCase
|
|
22
22
|
begin
|
23
23
|
Issue.validates(:description, presence: true)
|
24
24
|
|
25
|
-
issue = Issue.new(description: 'bad')
|
25
|
+
issue = Issue.new(description: 'bad', worth: '9000.00311219')
|
26
26
|
issue.save!
|
27
27
|
|
28
|
+
issue = Issue.find(issue.id)
|
29
|
+
assert_equal BigDecimal.new('9000.00311219'), issue.worth
|
30
|
+
assert_equal [18, 117], issue.worth.precs
|
31
|
+
|
28
32
|
issue = Issue.new
|
29
33
|
assert_raise(CassandraObject::RecordInvalid) { issue.save! }
|
30
34
|
ensure
|
@@ -81,4 +85,4 @@ class CassandraObject::PersistenceTest < CassandraObject::TestCase
|
|
81
85
|
persisted_issue.reload
|
82
86
|
assert_equal 'say what', persisted_issue.description
|
83
87
|
end
|
84
|
-
end
|
88
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -8,13 +8,16 @@ require 'rails/test_help'
|
|
8
8
|
class Issue < CassandraObject::Base
|
9
9
|
key :uuid
|
10
10
|
attribute :description, :type => :string
|
11
|
+
attribute :worth, :type => :decimal, :precision => 100
|
11
12
|
end
|
12
13
|
|
13
14
|
module CassandraObject
|
14
15
|
class TestCase < ActiveSupport::TestCase
|
16
|
+
TEST_KEYSPACE = 'place_directory_development'
|
17
|
+
|
15
18
|
setup do
|
16
19
|
CassandraObject::Base.establish_connection(
|
17
|
-
:keyspace =>
|
20
|
+
:keyspace => TEST_KEYSPACE,
|
18
21
|
# servers: '192.168.0.100:9160'
|
19
22
|
:servers => '127.0.0.1:9160'
|
20
23
|
)
|
@@ -7,5 +7,7 @@ class CassandraObject::Types::DecimalTypeTest < CassandraObject::TestCase
|
|
7
7
|
|
8
8
|
test 'decode' do
|
9
9
|
assert_equal BigDecimal.new('0.001'), CassandraObject::Types::DecimalType.decode('.001')
|
10
|
+
assert_equal [9, 18], CassandraObject::Types::DecimalType.decode('.001').precs
|
11
|
+
assert_equal [9, 27], CassandraObject::Types::DecimalType.decode('.001', :precision => 14).precs
|
10
12
|
end
|
11
13
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sessionm-cassandra_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -15,7 +15,7 @@ date: 2011-08-03 00:00:00.000000000Z
|
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
18
|
-
requirement: &
|
18
|
+
requirement: &70293952989880 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '3.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70293952989880
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: cassandra
|
29
|
-
requirement: &
|
29
|
+
requirement: &70293952989420 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ~>
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: 0.11.3
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70293952989420
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: bundler
|
40
|
-
requirement: &
|
40
|
+
requirement: &70293952988960 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
@@ -45,7 +45,7 @@ dependencies:
|
|
45
45
|
version: 1.0.0
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70293952988960
|
49
49
|
description: Cassandra ActiveModel
|
50
50
|
email: klange@sessionm.com
|
51
51
|
executables: []
|