superstore 2.4.3 → 3.0.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.
Files changed (101) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +40 -0
  3. data/.gitignore +1 -0
  4. data/.simplecov +3 -0
  5. data/Gemfile +2 -3
  6. data/LICENSE +1 -1
  7. data/MIT-LICENSE +1 -1
  8. data/README.md +4 -34
  9. data/lib/superstore/adapters/abstract_adapter.rb +1 -27
  10. data/lib/superstore/adapters/jsonb_adapter.rb +4 -132
  11. data/lib/superstore/associations/association.rb +6 -0
  12. data/lib/superstore/associations/association_scope.rb +20 -0
  13. data/lib/superstore/associations/belongs_to.rb +3 -1
  14. data/lib/superstore/associations/builder/association.rb +1 -1
  15. data/lib/superstore/associations/has_many.rb +15 -2
  16. data/lib/superstore/associations/reflection.rb +8 -2
  17. data/lib/superstore/associations.rb +9 -4
  18. data/lib/superstore/attribute_assignment.rb +7 -0
  19. data/lib/superstore/attribute_methods/primary_key.rb +20 -11
  20. data/lib/superstore/attribute_methods.rb +1 -109
  21. data/lib/superstore/attributes.rb +13 -0
  22. data/lib/superstore/base.rb +6 -34
  23. data/lib/superstore/core.rb +7 -65
  24. data/lib/superstore/model_schema.rb +35 -0
  25. data/lib/superstore/persistence.rb +26 -115
  26. data/lib/superstore/railtie.rb +3 -11
  27. data/lib/superstore/relation/scrolling.rb +48 -0
  28. data/lib/superstore/types/array_type.rb +3 -7
  29. data/lib/superstore/types/base.rb +9 -0
  30. data/lib/superstore/types/boolean_type.rb +7 -12
  31. data/lib/superstore/types/date_range_type.rb +7 -0
  32. data/lib/superstore/types/date_type.rb +7 -10
  33. data/lib/superstore/types/float_type.rb +3 -11
  34. data/lib/superstore/types/geo_point_type.rb +30 -0
  35. data/lib/superstore/types/integer_range_type.rb +15 -0
  36. data/lib/superstore/types/integer_type.rb +8 -14
  37. data/lib/superstore/types/json_type.rb +1 -1
  38. data/lib/superstore/types/range_type.rb +58 -0
  39. data/lib/superstore/types/string_type.rb +4 -4
  40. data/lib/superstore/types/time_type.rb +10 -8
  41. data/lib/superstore/types.rb +11 -9
  42. data/lib/superstore.rb +17 -19
  43. data/superstore.gemspec +8 -10
  44. data/test/support/jsonb.rb +3 -1
  45. data/test/support/models.rb +10 -4
  46. data/test/test_helper.rb +7 -3
  47. data/test/unit/adapters/adapter_test.rb +1 -3
  48. data/test/unit/associations/belongs_to_test.rb +1 -1
  49. data/test/unit/associations/has_many_test.rb +10 -2
  50. data/test/unit/attribute_methods/dirty_test.rb +8 -19
  51. data/test/unit/attribute_methods/primary_key_test.rb +1 -1
  52. data/test/unit/attribute_methods_test.rb +10 -22
  53. data/test/unit/{attribute_methods/typecasting_test.rb → attributes_test.rb} +13 -39
  54. data/test/unit/base_test.rb +4 -0
  55. data/test/unit/caching_test.rb +1 -1
  56. data/test/unit/callbacks_test.rb +4 -4
  57. data/test/unit/core_test.rb +15 -20
  58. data/test/unit/persistence_test.rb +36 -44
  59. data/test/unit/{scope/batches_test.rb → relation/scrolling_test.rb} +9 -5
  60. data/test/unit/serialization_test.rb +10 -2
  61. data/test/unit/{timestamps_test.rb → timestamp_test.rb} +5 -5
  62. data/test/unit/types/array_type_test.rb +3 -18
  63. data/test/unit/types/boolean_type_test.rb +7 -21
  64. data/test/unit/types/date_range_type_test.rb +29 -0
  65. data/test/unit/types/date_type_test.rb +15 -6
  66. data/test/unit/types/float_type_test.rb +4 -19
  67. data/test/unit/types/geo_point_type_test.rb +28 -0
  68. data/test/unit/types/integer_range_type_test.rb +28 -0
  69. data/test/unit/types/integer_type_test.rb +7 -16
  70. data/test/unit/types/string_type_test.rb +9 -13
  71. data/test/unit/types/time_type_test.rb +17 -11
  72. data/test/unit/validations_test.rb +2 -2
  73. metadata +39 -53
  74. data/.travis.yml +0 -13
  75. data/Gemfile-rails4.2 +0 -11
  76. data/lib/superstore/attribute_methods/definition.rb +0 -17
  77. data/lib/superstore/attribute_methods/dirty.rb +0 -52
  78. data/lib/superstore/attribute_methods/typecasting.rb +0 -53
  79. data/lib/superstore/caching.rb +0 -13
  80. data/lib/superstore/callbacks.rb +0 -29
  81. data/lib/superstore/connection.rb +0 -24
  82. data/lib/superstore/errors.rb +0 -10
  83. data/lib/superstore/inspect.rb +0 -25
  84. data/lib/superstore/model.rb +0 -38
  85. data/lib/superstore/schema.rb +0 -20
  86. data/lib/superstore/scope/batches.rb +0 -27
  87. data/lib/superstore/scope/finder_methods.rb +0 -51
  88. data/lib/superstore/scope/query_methods.rb +0 -52
  89. data/lib/superstore/scope.rb +0 -73
  90. data/lib/superstore/scoping.rb +0 -30
  91. data/lib/superstore/timestamps.rb +0 -19
  92. data/lib/superstore/type.rb +0 -16
  93. data/lib/superstore/types/base_type.rb +0 -23
  94. data/lib/superstore/validations.rb +0 -44
  95. data/test/unit/attribute_methods/definition_test.rb +0 -16
  96. data/test/unit/inspect_test.rb +0 -26
  97. data/test/unit/schema_test.rb +0 -15
  98. data/test/unit/scope/finder_methods_test.rb +0 -62
  99. data/test/unit/scope/query_methods_test.rb +0 -36
  100. data/test/unit/scoping_test.rb +0 -7
  101. data/test/unit/types/base_type_test.rb +0 -11
@@ -3,7 +3,7 @@ require 'test_helper'
3
3
  class Superstore::CallbacksTest < Superstore::TestCase
4
4
  class TestIssue < Superstore::Base
5
5
  self.table_name = 'issues'
6
- string :description
6
+ attribute :description, type: :string
7
7
 
8
8
  %w(
9
9
  before_validation
@@ -35,8 +35,8 @@ class Superstore::CallbacksTest < Superstore::TestCase
35
35
  before_validation
36
36
  after_validation
37
37
  before_save
38
- after_save
39
38
  after_create
39
+ after_save
40
40
  )
41
41
  assert_equal expected, issue.callback_history
42
42
  end
@@ -47,7 +47,7 @@ class Superstore::CallbacksTest < Superstore::TestCase
47
47
 
48
48
  issue.update_attribute :description, 'foo'
49
49
 
50
- assert_equal %w(before_save after_save after_update), issue.callback_history
50
+ assert_equal %w(before_save after_update after_save), issue.callback_history
51
51
  end
52
52
 
53
53
  test 'destroy' do
@@ -62,7 +62,7 @@ class Superstore::CallbacksTest < Superstore::TestCase
62
62
  test 'new_record during callbacks' do
63
63
  class NewRecordTestClass < Superstore::Base
64
64
  self.table_name = 'issues'
65
- string :description
65
+ attribute :description, type: :string
66
66
 
67
67
  before_create :expect_new_record
68
68
  before_save :expect_new_record
@@ -1,30 +1,13 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::CoreTest < Superstore::TestCase
4
- test 'initialiaze' do
4
+ test 'initialize' do
5
5
  issue = Issue.new
6
6
 
7
7
  assert issue.new_record?
8
8
  assert !issue.destroyed?
9
9
  end
10
10
 
11
- test 'initialize yields self' do
12
- issue = Issue.new { |i| i.description = 'bar' }
13
- assert_equal 'bar', issue.description
14
- end
15
-
16
- test 'dup' do
17
- issue = Issue.create description: 'foo'
18
-
19
- dup_issue = issue.dup
20
-
21
- assert dup_issue.new_record?
22
- assert_not_equal issue.id, dup_issue.id
23
- assert_nil dup_issue.created_at
24
- assert_nil dup_issue.updated_at
25
- assert_equal 'foo', issue.description
26
- end
27
-
28
11
  test 'equality of new records' do
29
12
  assert_not_equal Issue.new, Issue.new
30
13
  end
@@ -45,11 +28,23 @@ class Superstore::CoreTest < Superstore::TestCase
45
28
 
46
29
  test 'hash' do
47
30
  issue = Issue.create
48
- assert_equal issue.id.hash, issue.hash
31
+ issue2 = Issue.create
32
+ refute_equal issue.hash, issue2.hash
33
+
34
+ issue3 = Issue.new(id: issue.id)
35
+ assert_equal issue.hash, issue3.hash
36
+
37
+ user = User.new(id: issue.id)
38
+ refute_equal issue.hash, user.hash
49
39
  end
50
40
 
51
41
  test 'inspect' do
52
42
  issue = Issue.create
53
- assert issue.inspect =~ /^#<Issue id: \"\w+\", created_at: \".+\", updated_at: \".+\", description: \".+\">$/
43
+ assert issue.inspect =~ /^#<Issue id: \"\w+\", description: \".+\", created_at: \".+\", updated_at: \".+\">$/
44
+ end
45
+
46
+ test 'inspect class' do
47
+ expected = "Issue(id: string, description: string, title: string, parent_issue_id: string, comments: json, created_at: time, updated_at: time)"
48
+ assert_equal expected, Issue.inspect
54
49
  end
55
50
  end
@@ -4,47 +4,37 @@
4
4
  require 'test_helper'
5
5
 
6
6
  class Superstore::PersistenceTest < Superstore::TestCase
7
- test 'instantiate removes unknowns' do
8
- assert_nil Issue.instantiate('theid', 'z' => 'nooo').attributes['z']
9
- end
7
+ class Parent < Superstore::Base
8
+ self.inheritance_column = 'document_type'
9
+ attribute :document_type, type: :string
10
10
 
11
- test 'encode_attributes' do
12
- klass = temp_object do
13
- string :description
11
+ def self.find_sti_class(type)
12
+ Child
14
13
  end
14
+ end
15
15
 
16
- assert_equal(
17
- {},
18
- klass.encode_attributes({})
19
- )
16
+ class Child < Parent
17
+ attribute :eye_color, type: :string
18
+ end
20
19
 
21
- assert_equal(
22
- {'description' => nil},
23
- klass.encode_attributes({'description' => nil})
24
- )
20
+ test 'instantiate with unknowns' do
21
+ issue = Issue.instantiate('id' => 'theid', 'document' => {'z' => 'nooo', 'title' => 'Krazy'}.to_json)
25
22
 
26
- assert_equal(
27
- {'description' => 'lol'},
28
- klass.encode_attributes({'description' => 'lol'})
29
- )
23
+ refute issue.attributes.key?('z')
24
+ assert_equal 'Krazy', issue.attributes['title']
30
25
  end
31
26
 
32
- test "batch" do
33
- first_issue = second_issue = nil
34
-
35
- Issue.batch do
36
- assert Issue.batching?
27
+ test 'instantiate with an inheritance column' do
28
+ child = Parent.instantiate('id' => 'theid', 'document' => {'document_type' => 'child', 'eye_color' => 'blue'}.to_json)
37
29
 
38
- first_issue = Issue.create
39
- second_issue = Issue.create
30
+ assert_kind_of Child, child
31
+ assert_equal 'blue', child.eye_color
32
+ end
40
33
 
41
- assert_raise(Superstore::RecordNotFound) { Issue.find(first_issue.id) }
42
- assert_raise(Superstore::RecordNotFound) { Issue.find(second_issue.id) }
43
- end
34
+ test 'instantiate when an inheritance column is expected but is nil' do
35
+ child = Parent.instantiate('id' => 'theid', 'document' => { }.to_json)
44
36
 
45
- assert !Issue.batching?
46
- assert_nothing_raised { Issue.find(first_issue.id) }
47
- assert_nothing_raised { Issue.find(second_issue.id) }
37
+ assert_kind_of Child, child
48
38
  end
49
39
 
50
40
  test 'persistence inquiries' do
@@ -81,14 +71,14 @@ class Superstore::PersistenceTest < Superstore::TestCase
81
71
 
82
72
  test 'save!' do
83
73
  klass = temp_object do
84
- string :description
74
+ attribute :description, type: :string
85
75
  validates :description, presence: true
86
76
  end
87
77
 
88
78
  record = klass.new(description: 'bad')
89
79
  record.save!
90
80
 
91
- assert_raise Superstore::RecordInvalid do
81
+ assert_raise ActiveRecord::RecordInvalid do
92
82
  record = klass.new
93
83
  record.save!
94
84
  end
@@ -126,7 +116,7 @@ class Superstore::PersistenceTest < Superstore::TestCase
126
116
  issue = Issue.new(description: 'bad')
127
117
  issue.save!
128
118
 
129
- assert_raise Superstore::RecordInvalid do
119
+ assert_raise ActiveRecord::RecordInvalid do
130
120
  issue.update! description: ''
131
121
  end
132
122
  ensure
@@ -151,7 +141,7 @@ class Superstore::PersistenceTest < Superstore::TestCase
151
141
 
152
142
  test 'becomes includes changed_attributes' do
153
143
  klass = temp_object do
154
- string :title
144
+ attribute :title, type: :string
155
145
  end
156
146
 
157
147
  issue = Issue.new(title: 'Something is wrong')
@@ -171,14 +161,9 @@ class Superstore::PersistenceTest < Superstore::TestCase
171
161
  assert_equal persisted_issue, reloaded_issue
172
162
  end
173
163
 
174
- test 'quote_columns' do
175
- klass = Class.new { include Superstore::Persistence }
176
- assert_equal %w{'a' 'b'}, klass.__send__(:quote_columns, %w{a b})
177
- end
178
-
179
164
  test 'delete' do
180
165
  klass = temp_object do
181
- string :name
166
+ attribute :name, type: :string
182
167
  end
183
168
 
184
169
  record = klass.new(name: 'cool')
@@ -189,14 +174,14 @@ class Superstore::PersistenceTest < Superstore::TestCase
189
174
 
190
175
  klass.delete(id)
191
176
 
192
- assert_raise Superstore::RecordNotFound do
177
+ assert_raise ActiveRecord::RecordNotFound do
193
178
  klass.find(id)
194
179
  end
195
180
  end
196
181
 
197
182
  test 'delete multiple' do
198
183
  klass = temp_object do
199
- string :name
184
+ attribute :name, type: :string
200
185
  end
201
186
 
202
187
  ids = []
@@ -207,7 +192,14 @@ class Superstore::PersistenceTest < Superstore::TestCase
207
192
 
208
193
  klass.delete(ids)
209
194
 
210
- assert_equal [], klass.find(ids)
195
+ assert_equal [], klass.where(id: ids)
211
196
  end
212
197
 
198
+ test 'find_by_id' do
199
+ Issue.create.tap do |issue|
200
+ assert_equal issue, Issue.find_by_id(issue.id)
201
+ end
202
+
203
+ assert_nil Issue.find_by_id('what')
204
+ end
213
205
  end
@@ -1,25 +1,29 @@
1
1
  require 'test_helper'
2
2
 
3
- class Superstore::BatchesTest < Superstore::TestCase
4
- test 'find_each' do
3
+ class Superstore::ScrollingTest < Superstore::TestCase
4
+ ActiveRecord::Relation.class_eval do
5
+ include Superstore::Relation::Scrolling
6
+ end
7
+
8
+ test 'scroll_each' do
5
9
  Issue.create
6
10
  Issue.create
7
11
 
8
12
  issues = []
9
- Issue.find_each do |issue|
13
+ Issue.all.scroll_each do |issue|
10
14
  issues << issue
11
15
  end
12
16
 
13
17
  assert_equal Issue.all.to_set, issues.to_set
14
18
  end
15
19
 
16
- test 'find_in_batches' do
20
+ test 'scroll_in_batches' do
17
21
  Issue.create
18
22
  Issue.create
19
23
  Issue.create
20
24
 
21
25
  issue_batches = []
22
- Issue.find_in_batches(batch_size: 2) do |issues|
26
+ Issue.all.scroll_in_batches(batch_size: 2) do |issues|
23
27
  issue_batches << issues
24
28
  end
25
29
 
@@ -3,8 +3,16 @@ require 'test_helper'
3
3
  class Superstore::SerializationTest < Superstore::TestCase
4
4
  test 'as_json' do
5
5
  issue = Issue.new
6
- expected = {"id" => issue.id}
6
+ expected = {
7
+ "id" => issue.id,
8
+ "created_at" => nil,
9
+ "updated_at" => nil,
10
+ "description" => nil,
11
+ "title" => nil,
12
+ "parent_issue_id" => nil,
13
+ "comments" => nil
14
+ }
7
15
 
8
16
  assert_equal expected, issue.as_json
9
17
  end
10
- end
18
+ end
@@ -1,8 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
- class Superstore::TimestampsTest < Superstore::TestCase
3
+ class Superstore::TimestampTest < Superstore::TestCase
4
4
  test 'timestamps set on create' do
5
- issue = Issue.create
5
+ issue = Issue.create#issue.created_at.to_i = #{issue.created_at.to_i}
6
6
 
7
7
  assert_in_delta Time.now.to_i, issue.created_at.to_i, 3
8
8
  assert_in_delta Time.now.to_i, issue.updated_at.to_i, 3
@@ -30,13 +30,13 @@ class Superstore::TimestampsTest < Superstore::TestCase
30
30
  time = 5.days.ago
31
31
  issue = Issue.create created_at: time
32
32
 
33
- assert_equal time, issue.created_at
33
+ assert_in_delta time.to_i, issue.created_at.to_i, 3
34
34
  end
35
35
 
36
36
  test 'updated_at sets only if nil' do
37
- time = 5.days.ago
37
+ time = 5.days.ago.utc
38
38
  issue = Issue.create updated_at: time
39
39
 
40
- assert_equal time, issue.updated_at
40
+ assert_in_delta time.to_i, issue.updated_at.to_i, 3
41
41
  end
42
42
  end
@@ -1,23 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::ArrayTypeTest < Superstore::Types::TestCase
4
- if Superstore::Base.adapter.class.name == 'Superstore::Adapters::CassandraAdapter'
5
- test 'encode' do
6
- assert_equal ['1', '2'].to_json, type.encode(['1', '2'])
7
-
8
- assert_raise ArgumentError do
9
- type.encode('wtf')
10
- end
11
- end
12
-
13
- test 'decode' do
14
- assert_equal ['1', '2'], type.decode(['1', '2'].to_json)
15
- assert_equal nil, type.decode(nil)
16
- assert_equal nil, type.decode('')
17
- end
18
- end
19
-
20
- test 'typecast' do
21
- assert_equal ['x', 'y'], type.typecast(['x', 'y'].to_set)
4
+ test 'cast_value' do
5
+ assert_equal ['x', 'y'], type.cast_value(['x', 'y'].to_set)
6
+ assert_equal ['x'], type.cast_value('x')
22
7
  end
23
8
  end
@@ -1,26 +1,12 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::BooleanTypeTest < Superstore::Types::TestCase
4
- if Superstore::Base.adapter.class.name == 'Superstore::Adapters::CassandraAdapter'
5
- test 'encode' do
6
- assert_equal '1', type.encode(true)
7
- assert_equal '1', type.encode('true')
8
- assert_equal '1', type.encode('1')
9
-
10
- assert_equal '0', type.encode(false)
11
- assert_equal '0', type.encode('false')
12
- assert_equal '0', type.encode('0')
13
- assert_equal '0', type.encode('')
14
-
15
- assert_raise ArgumentError do
16
- type.encode('wtf')
17
- end
18
- end
19
- end
20
-
21
- test 'decode' do
22
- assert_equal true, type.decode('1')
23
- assert_equal false, type.decode('0')
24
- # assert_nil type.decode(nil)
4
+ test 'cast_value' do
5
+ assert_equal true, type.cast_value('1')
6
+ assert_equal true, type.cast_value('true')
7
+ assert_equal true, type.cast_value('true')
8
+ assert_equal false, type.cast_value('0')
9
+ assert_equal false, type.cast_value(false)
10
+ assert_nil type.cast_value('')
25
11
  end
26
12
  end
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class Superstore::Types::DateRangeTypeTest < Superstore::Types::TestCase
4
+ test 'serialize' do
5
+ assert_equal ["2004-04-25", "2004-05-15"], type.serialize(Date.new(2004, 4, 25) .. Date.new(2004, 5, 15))
6
+ end
7
+
8
+ test 'deserialize' do
9
+ assert_equal Date.new(2004, 4, 25)..Date.new(2004, 5, 15), type.deserialize(["2004-04-25", "2004-05-15"])
10
+ assert_nil type.deserialize(["2004-05-15", "2004-04-25"])
11
+
12
+ # decode returns argument if already a Range
13
+ range = Date.new(2019, 1, 1)..Date.new(2019, 2, 1)
14
+ assert_equal range, type.deserialize(range)
15
+ end
16
+
17
+ test 'cast_value' do
18
+ assert_equal Date.new(2004, 4, 25)..Date.new(2004, 5, 15), type.cast_value(Date.new(2004, 4, 25)..Date.new(2004, 5, 15))
19
+ assert_equal Date.new(2004, 4, 25)..Date.new(2004, 5, 15), type.cast_value([Date.new(2004, 4, 25), Date.new(2004, 5, 15)])
20
+ assert_equal Date.new(2004, 4, 25)..Date.new(2004, 5, 15), type.cast_value(["2004-04-25", "2004-05-15"])
21
+ assert_equal Date.new(2004, 4, 25)..Date.new(2004, 4, 25), type.cast_value(["2004-04-25", "2004-04-25"])
22
+ assert_equal Date.new(2004, 4, 25).., type.cast_value(["2004-04-25", nil])
23
+
24
+ assert_nil type.cast_value( Date.new(2004, 5, 15)..Date.new(2004, 4, 25))
25
+ assert_nil type.cast_value([Date.new(2004, 5, 15), Date.new(2004, 4, 25)])
26
+ assert_nil type.cast_value([nil, "2004-05-15"])
27
+ assert_nil type.cast_value(["xx", "2004-05-15"])
28
+ end
29
+ end
@@ -1,15 +1,24 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::DateTypeTest < Superstore::Types::TestCase
4
- test 'encode' do
5
- assert_equal '2004-04-25', type.encode(Date.new(2004, 4, 25))
4
+ test 'serialize' do
5
+ assert_equal '2004-04-25', type.serialize(Date.new(2004, 4, 25))
6
6
  end
7
7
 
8
- test 'decode' do
9
- assert_equal Date.new(2004, 4, 25), type.decode('2004-04-25')
8
+ test 'deserialize' do
9
+ assert_equal Date.new(2004, 4, 25), type.deserialize('2004-04-25')
10
10
  end
11
11
 
12
- test 'decoding a blank dates' do
13
- assert_nil type.decode('')
12
+ test 'cast_value' do
13
+ assert_nil type.cast_value(1000)
14
+ assert_nil type.cast_value(1000.0)
15
+ assert_nil type.cast_value('')
16
+ assert_nil type.cast_value('nil')
17
+ assert_nil type.cast_value('bad format')
18
+ assert_equal Date.new(2004, 4, 25), type.cast_value('2004-04-25')
19
+ assert_equal Date.new(2017, 5, 1), type.cast_value('2017-05-01T21:39:06.796897Z')
20
+
21
+ my_time = Time.current
22
+ assert_equal my_time.to_date, type.cast_value(my_time)
14
23
  end
15
24
  end
@@ -1,24 +1,9 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::FloatTypeTest < Superstore::Types::TestCase
4
- if Superstore::Base.adapter.class.name == 'Superstore::Adapters::CassandraAdapter'
5
- test 'encode' do
6
- assert_equal '5.01', type.encode(5.01)
7
-
8
- assert_raise ArgumentError do
9
- type.encode('x')
10
- end
11
- end
12
- end
13
-
14
- test 'decode' do
15
- assert_equal 0.0, type.decode('xyz')
16
- assert_equal 3.14, type.decode('3.14')
17
- assert_equal 5, type.decode('5')
18
- end
19
-
20
- test 'typecast' do
21
- assert_equal 1.1, type.typecast('1.1')
22
- assert_equal 42.0, type.typecast(42)
4
+ test 'cast_value' do
5
+ assert_nil type.cast_value('xyz')
6
+ assert_equal 1.1, type.cast_value('1.1')
7
+ assert_equal 42.0, type.cast_value(42)
23
8
  end
24
9
  end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class Superstore::Types::GeoPointTypeTest < Superstore::Types::TestCase
4
+ test 'deserialize' do
5
+ lat, lon = 47.604, -122.329
6
+ seattle = {lat: lat, lon: lon}
7
+
8
+ assert_equal seattle, type.deserialize('lat' => lat, 'lon' => lon)
9
+ end
10
+
11
+ test 'cast_value' do
12
+ lat, lon = 47.604, -122.329
13
+ seattle = {lat: lat, lon: lon}
14
+
15
+ assert_equal seattle, type.cast_value(lat: lat, lon: lon)
16
+ assert_equal seattle, type.cast_value({ "lat" => lat, "lon" => lon })
17
+ assert_equal seattle, type.cast_value([lat, lon])
18
+
19
+ assert_equal({lat: 0.0, lon: 0.0}, type.cast_value(lat: "cats", lon: "dogs"))
20
+
21
+ assert_nil type.cast_value([])
22
+ assert_nil type.cast_value('invalid')
23
+ end
24
+
25
+ test 'type' do
26
+ assert_equal 'geo_point', type.type
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ class Superstore::Types::IntegerRangeTypeTest < Superstore::Types::TestCase
4
+ test 'serialize' do
5
+ assert_equal [4, 5], type.serialize(4..5)
6
+ assert_equal [4, nil], type.serialize(4..)
7
+ assert_equal [nil, 5], type.serialize(-Float::INFINITY..5)
8
+ assert_equal [nil, nil], type.serialize(-Float::INFINITY..)
9
+ end
10
+
11
+ test 'deserialize' do
12
+ assert_equal 4..5, type.deserialize([4, 5])
13
+ assert_nil type.deserialize([5, 4])
14
+ assert_equal 4.., type.deserialize([4, nil])
15
+ assert_equal (-Float::INFINITY..5), type.deserialize([nil, 5])
16
+ assert_equal (-Float::INFINITY..), type.deserialize([nil, nil])
17
+ end
18
+
19
+ test 'cast_value' do
20
+ assert_equal 1..5, type.cast_value(1..5)
21
+ assert_nil type.cast_value(5..1)
22
+ assert_equal 1..5, type.cast_value([1, 5])
23
+ assert_nil type.cast_value([5, 1])
24
+ assert_equal 1.., type.cast_value([1, nil])
25
+ assert_equal (-Float::INFINITY..2), type.cast_value([nil, 2])
26
+ assert_equal (-Float::INFINITY..), type.cast_value([nil, nil])
27
+ end
28
+ end
@@ -1,21 +1,12 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::IntegerTypeTest < Superstore::Types::TestCase
4
- if Superstore::Base.adapter.class.name == 'Superstore::Adapters::CassandraAdapter'
5
- test 'encode' do
6
- assert_equal '3', type.encode(3)
7
- assert_equal '-3', type.encode(-3)
8
-
9
- assert_raise ArgumentError do
10
- type.encode('xx')
11
- end
12
- end
13
- end
14
-
15
- test 'decode' do
16
- assert_nil type.decode('')
17
- assert_equal(0, type.decode('abc'))
18
- assert_equal(3, type.decode('3'))
19
- assert_equal(-3, type.decode('-3'))
4
+ test 'cast_value' do
5
+ assert_nil type.cast_value('')
6
+ assert_nil type.cast_value('abc')
7
+ assert_equal 3, type.cast_value(3)
8
+ assert_equal 3, type.cast_value('3')
9
+ assert_equal(-3, type.cast_value('-3'))
10
+ assert_equal 27, type.cast_value('027')
20
11
  end
21
12
  end
@@ -1,30 +1,26 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::StringTypeTest < Superstore::Types::TestCase
4
- test 'encode' do
5
- assert_equal 'abc', type.encode('abc')
6
-
7
- assert_raise ArgumentError do
8
- type.encode(123)
9
- end
4
+ test 'serialize' do
5
+ assert_equal 'abc', type.serialize('abc')
10
6
  end
11
7
 
12
- test 'encode as utf' do
8
+ test 'serialize as utf' do
13
9
  assert_equal(
14
10
  '123'.force_encoding('UTF-8').encoding,
15
- type.encode('123'.force_encoding('ASCII-8BIT')).encoding
11
+ type.serialize('123'.force_encoding('ASCII-8BIT')).encoding
16
12
  )
17
13
  end
18
14
 
19
- test 'encode frozen as utf' do
15
+ test 'serialize frozen as utf' do
20
16
  assert_equal(
21
17
  '123'.force_encoding('UTF-8').encoding,
22
- type.encode('123'.force_encoding('ASCII-8BIT').freeze).encoding
18
+ type.serialize('123'.force_encoding('ASCII-8BIT').freeze).encoding
23
19
  )
24
20
  end
25
21
 
26
- test 'typecast' do
27
- assert_equal '123', type.typecast(123)
28
- assert_equal '123', type.typecast('123')
22
+ test 'cast_value' do
23
+ assert_equal '123', type.cast_value(123)
24
+ assert_equal '123', type.cast_value('123')
29
25
  end
30
26
  end
@@ -1,23 +1,29 @@
1
1
  require 'test_helper'
2
2
 
3
3
  class Superstore::Types::TimeTypeTest < Superstore::Types::TestCase
4
- test 'encode' do
5
- assert_equal '2004-12-24T01:02:03.000000Z', type.encode(Time.utc(2004, 12, 24, 1, 2, 3))
6
- assert_equal '2004-12-24T01:02:03.000000Z', type.encode(DateTime.new(2004, 12, 24, 1, 2, 3))
7
- assert_raise ArgumentError do
8
- type.encode 123
9
- end
4
+ test 'serialize' do
5
+ assert_equal '2004-12-24T01:02:03.000000Z', type.serialize(Time.utc(2004, 12, 24, 1, 2, 3))
6
+ assert_nil type.serialize(nil)
10
7
  end
11
8
 
12
- test 'decode' do
13
- assert_nil type.decode(nil)
14
- assert_nil type.decode('bad format')
15
- assert_equal Time.utc(2004, 12, 24, 1, 2, 3), type.decode('2004-12-24T01:02:03.000000Z')
9
+ test 'deserialize' do
10
+ assert_nil type.deserialize(nil)
11
+ assert_nil type.deserialize('bad format')
12
+ assert_equal Time.utc(2004, 12, 24, 1, 2, 3), type.deserialize('2004-12-24T01:02:03.000000Z')
13
+ assert_equal Time.utc(2004, 12, 24, 12, 13, 45), type.deserialize('2004-12-24 12:13:45 -0000')
16
14
 
17
15
  Time.use_zone 'Central Time (US & Canada)' do
18
- with_zone = type.decode('2013-07-18 13:12:46 -0700')
16
+ with_zone = type.deserialize('2013-07-18T13:12:46-07:00')
19
17
  assert_equal Time.utc(2013, 07, 18, 20, 12, 46), with_zone
20
18
  assert_equal 'CDT', with_zone.zone
21
19
  end
22
20
  end
21
+
22
+ test 'cast_value' do
23
+ assert_nil type.cast_value(1000)
24
+ assert_nil type.cast_value(1000.0)
25
+
26
+ my_date = Date.new
27
+ assert_equal my_date.to_time, type.cast_value(my_date)
28
+ end
23
29
  end