gotime-cassandra_object 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gotime-cassandra_object (2.0.0)
4
+ gotime-cassandra_object (2.1.0)
5
5
  cassandra (~> 0.11.3)
6
6
  rails (~> 3.0)
7
7
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gotime-cassandra_object'
5
- s.version = '2.1.0'
5
+ s.version = '2.1.1'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
 
@@ -31,14 +31,16 @@ module CassandraObject
31
31
  autoload :ColumnFamily
32
32
  end
33
33
 
34
- class Types
34
+ module Types
35
35
  extend ActiveSupport::Autoload
36
36
 
37
+ autoload :ArrayType
37
38
  autoload :BooleanType
38
39
  autoload :DateType
39
40
  autoload :FloatType
40
41
  autoload :HashType
41
42
  autoload :IntegerType
43
+ autoload :SetType
42
44
  autoload :TimeType
43
45
  autoload :TimeWithZoneType
44
46
  autoload :UTF8StringType
@@ -1,5 +1,4 @@
1
1
  namespace :ks do
2
-
3
2
  task :configure => :environment do
4
3
  @configs = YAML.load_file(Rails.root.join("config", "cassandra.yml"))
5
4
  @config = @configs[Rails.env || 'development']
@@ -118,6 +117,5 @@ namespace :ks do
118
117
  ks.set config['keyspace']
119
118
  ks
120
119
  end
121
-
122
120
  end
123
121
 
@@ -1,8 +1,10 @@
1
+ CassandraObject::Type.register(:array, Array, CassandraObject::Types::ArrayType)
1
2
  CassandraObject::Type.register(:boolean, Object, CassandraObject::Types::BooleanType)
2
3
  CassandraObject::Type.register(:date, Date, CassandraObject::Types::DateType)
3
4
  CassandraObject::Type.register(:float, Float, CassandraObject::Types::FloatType)
4
5
  CassandraObject::Type.register(:hash, Hash, CassandraObject::Types::HashType)
5
6
  CassandraObject::Type.register(:integer, Integer, CassandraObject::Types::IntegerType)
7
+ CassandraObject::Type.register(:set, Array, CassandraObject::Types::SetType)
6
8
  CassandraObject::Type.register(:time, Time, CassandraObject::Types::TimeType)
7
9
  CassandraObject::Type.register(:time_with_zone, ActiveSupport::TimeWithZone, CassandraObject::Types::TimeWithZoneType)
8
10
  CassandraObject::Type.register(:string, String, CassandraObject::Types::UTF8StringType) #This could be changed to StringType to support non-utf8 strings
@@ -0,0 +1,16 @@
1
+ module CassandraObject
2
+ module Types
3
+ module ArrayType
4
+ def encode(array)
5
+ raise ArgumentError.new("#{self} requires an Array") unless array.kind_of?(Array)
6
+ array.to_json
7
+ end
8
+ module_function :encode
9
+
10
+ def decode(str)
11
+ ActiveSupport::JSON.decode(str)
12
+ end
13
+ module_function :decode
14
+ end
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module BooleanType
4
4
  TRUE_VALS = [true, 'true', '1']
5
5
  FALSE_VALS = [false, 'false', '0', '', nil]
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module DateType
4
4
  FORMAT = '%Y-%m-%d'
5
5
  REGEX = /\A\d{4}-\d{2}-\d{2}\Z/
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module FloatType
4
4
  REGEX = /\A[-+]?\d+(\.\d+)?\Z/
5
5
  def encode(float)
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module HashType
4
4
  def encode(hash)
5
5
  raise ArgumentError.new("#{self} requires a Hash") unless hash.kind_of?(Hash)
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module IntegerType
4
4
  REGEX = /\A[-+]?\d+\Z/
5
5
  def encode(int)
@@ -0,0 +1,22 @@
1
+ module CassandraObject
2
+ module Types
3
+ module SetType
4
+ def encode(set)
5
+ if set.kind_of?(Set)
6
+ set.to_json
7
+ elsif set.kind_of?(Array)
8
+ set.uniq.to_json
9
+ else
10
+ raise ArgumentError.new("#{self} requires an Array or Set")
11
+ end
12
+ end
13
+ module_function :encode
14
+
15
+ def decode(str)
16
+ return str.to_a if str.kind_of?(Set)
17
+ ActiveSupport::JSON.decode(str)
18
+ end
19
+ module_function :decode
20
+ end
21
+ end
22
+ end
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module StringType
4
4
  def encode(str)
5
5
  raise ArgumentError.new("#{self} requires a String") unless str.kind_of?(String)
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module TimeType
4
4
  # lifted from the implementation of Time.xmlschema and simplified
5
5
  REGEX = /\A\s*
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module TimeWithZoneType
4
4
  def encode(time)
5
5
  raise ArgumentError.new("#{self} requires a Time") unless time.kind_of?(Time)
@@ -1,5 +1,5 @@
1
1
  module CassandraObject
2
- class Types
2
+ module Types
3
3
  module 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.
@@ -0,0 +1,15 @@
1
+ require 'test_helper'
2
+
3
+ class CassandraObject::Types::ArrayTypeTest < CassandraObject::TestCase
4
+ test 'encode' do
5
+ assert_equal ['1', '2'].to_json, CassandraObject::Types::ArrayType.encode(['1', '2'])
6
+
7
+ assert_raise ArgumentError do
8
+ CassandraObject::Types::ArrayType.encode('wtf')
9
+ end
10
+ end
11
+
12
+ test 'decode' do
13
+ assert_equal ['1', '2'], CassandraObject::Types::ArrayType.decode(['1', '2'].to_json)
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ require 'test_helper'
2
+
3
+ class CassandraObject::Types::SetTypeTest < CassandraObject::TestCase
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'])
7
+
8
+ assert_raise ArgumentError do
9
+ CassandraObject::Types::SetType.encode('wtf')
10
+ end
11
+ end
12
+
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)
16
+ end
17
+ 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.1.0
4
+ version: 2.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2011-07-25 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2170403800 !ruby/object:Gem::Requirement
17
+ requirement: &2152615720 !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: *2170403800
25
+ version_requirements: *2152615720
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cassandra
28
- requirement: &2152534000 !ruby/object:Gem::Requirement
28
+ requirement: &2152615260 !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: *2152534000
36
+ version_requirements: *2152615260
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &2152533540 !ruby/object:Gem::Requirement
39
+ requirement: &2152614800 !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: *2152533540
47
+ version_requirements: *2152614800
48
48
  description: Cassandra ActiveModel
49
49
  email: gems@gotime.com
50
50
  executables: []
@@ -103,11 +103,13 @@ files:
103
103
  - lib/cassandra_object/timestamps.rb
104
104
  - lib/cassandra_object/type.rb
105
105
  - lib/cassandra_object/types.rb
106
+ - lib/cassandra_object/types/array_type.rb
106
107
  - lib/cassandra_object/types/boolean_type.rb
107
108
  - lib/cassandra_object/types/date_type.rb
108
109
  - lib/cassandra_object/types/float_type.rb
109
110
  - lib/cassandra_object/types/hash_type.rb
110
111
  - lib/cassandra_object/types/integer_type.rb
112
+ - lib/cassandra_object/types/set_type.rb
111
113
  - lib/cassandra_object/types/string_type.rb
112
114
  - lib/cassandra_object/types/time_type.rb
113
115
  - lib/cassandra_object/types/time_with_zone_type.rb
@@ -143,11 +145,13 @@ files:
143
145
  - test/persistence_test.rb
144
146
  - test/test_helper.rb
145
147
  - test/timestamps_test.rb
148
+ - test/types/array_type_test.rb
146
149
  - test/types/boolean_type_test.rb
147
150
  - test/types/date_type_test.rb
148
151
  - test/types/float_type_test.rb
149
152
  - test/types/hash_type_test.rb
150
153
  - test/types/integer_type_test.rb
154
+ - test/types/set_type_test.rb
151
155
  - test/types/string_type_test.rb
152
156
  - test/types/time_type_test.rb
153
157
  - test/types/utf8_string_type_test.rb
@@ -184,11 +188,13 @@ test_files:
184
188
  - test/persistence_test.rb
185
189
  - test/test_helper.rb
186
190
  - test/timestamps_test.rb
191
+ - test/types/array_type_test.rb
187
192
  - test/types/boolean_type_test.rb
188
193
  - test/types/date_type_test.rb
189
194
  - test/types/float_type_test.rb
190
195
  - test/types/hash_type_test.rb
191
196
  - test/types/integer_type_test.rb
197
+ - test/types/set_type_test.rb
192
198
  - test/types/string_type_test.rb
193
199
  - test/types/time_type_test.rb
194
200
  - test/types/utf8_string_type_test.rb