ree_lib 1.0.85 → 1.0.87

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile.lock +31 -26
  4. data/lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb +11 -3
  5. data/lib/ree_lib/packages/ree_actions/package/ree_actions/errors.rb +3 -0
  6. data/lib/ree_lib/packages/ree_actions/package/ree_actions.rb +1 -0
  7. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb +5 -1
  8. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_array.rb +12 -8
  9. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_jsonb.rb +12 -8
  10. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_array_spec.rb +3 -3
  11. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_jsonb_spec.rb +8 -6
  12. data/lib/ree_lib/packages/ree_enum/package/ree_enum/base_enum_mapper.rb +5 -10
  13. data/lib/ree_lib/packages/ree_enum/package/ree_enum/integer_value_enum_mapper.rb +5 -5
  14. data/lib/ree_lib/packages/ree_enum/package/ree_enum/string_value_enum_mapper.rb +5 -5
  15. data/lib/ree_lib/packages/ree_enum/spec/ree_enum/dsl_spec.rb +10 -2
  16. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/coercion_error.rb +1 -1
  17. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/error_with_location.rb +25 -0
  18. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/type_error.rb +1 -1
  19. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb +12 -4
  20. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper.rb +12 -6
  21. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory.rb +17 -4
  22. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/abstract_type.rb +6 -0
  23. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/any.rb +8 -8
  24. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/bool.rb +12 -12
  25. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/date.rb +13 -13
  26. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/date_time.rb +13 -13
  27. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/float.rb +13 -13
  28. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/integer.rb +16 -16
  29. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/rational.rb +13 -13
  30. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/string.rb +12 -12
  31. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/time.rb +13 -13
  32. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/wrappers/abstract_wrapper.rb +7 -0
  33. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/wrappers/array.rb +73 -21
  34. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb +2 -0
  35. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/mapper_factory_spec.rb +10 -6
  36. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/mapper_spec.rb +7 -0
  37. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/bool_spec.rb +10 -8
  38. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/date_spec.rb +12 -10
  39. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/date_time_spec.rb +20 -16
  40. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/float_spec.rb +17 -13
  41. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/hash_spec.rb +1 -1
  42. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/integer_spec.rb +14 -14
  43. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/rational_spec.rb +16 -12
  44. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/string_spec.rb +24 -12
  45. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/time_spec.rb +21 -16
  46. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/type_options_spec.rb +4 -4
  47. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/wrappers/array_spec.rb +6 -6
  48. data/lib/ree_lib/packages/ree_roda/package/ree_roda/app.rb +3 -2
  49. data/lib/ree_lib/packages/ree_roda/spec/ree_roda/app_spec.rb +28 -0
  50. data/lib/ree_lib/spec.init.rb +3 -1
  51. data/lib/ree_lib/version.rb +1 -1
  52. metadata +19 -3
@@ -27,23 +27,24 @@ RSpec.describe 'ReeMapper::Time' do
27
27
  }
28
28
 
29
29
  it {
30
- expect { mapper.serialize({ time: DateTime.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
30
+ expect { mapper.serialize({ time: DateTime.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{DateTime.new(2020).inspect}`")
31
31
  }
32
32
 
33
33
  it {
34
- expect { mapper.serialize({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
34
+ expect { mapper.serialize({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{Date.new(2020).inspect}`")
35
35
  }
36
36
 
37
37
  it {
38
- expect { mapper.serialize({ time: DateTime.new(2020).to_s }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
38
+ expect { mapper.serialize({ time: DateTime.new(2020).to_s }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `\"2020-01-01T00:00:00+00:00\"`")
39
39
  }
40
40
 
41
41
  it {
42
- expect { mapper.serialize({ time: '2020-01-01' }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
42
+ expect { mapper.serialize({ time: '2020-01-01' }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `\"2020-01-01\"`")
43
43
  }
44
44
 
45
45
  it {
46
- expect { mapper.serialize({ time: Object.new }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
46
+ object = Object.new
47
+ expect { mapper.serialize({ time: object }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{object.inspect}`")
47
48
  }
48
49
  end
49
50
 
@@ -65,15 +66,16 @@ RSpec.describe 'ReeMapper::Time' do
65
66
  }
66
67
 
67
68
  it {
68
- expect { mapper.cast({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
69
+ expect { mapper.cast({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{Date.new(2020).inspect}`")
69
70
  }
70
71
 
71
72
  it {
72
- expect { mapper.cast({ time: Object.new }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
73
+ object = Object.new
74
+ expect { mapper.cast({ time: object }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{object.inspect}`")
73
75
  }
74
76
 
75
77
  it {
76
- expect { mapper.cast({ time: 'no date time' }) }.to raise_error(ReeMapper::CoercionError, "`time` is invalid time")
78
+ expect { mapper.cast({ time: 'no date time' }) }.to raise_error(ReeMapper::CoercionError, "`time` is invalid time, got `\"no date time\"`")
77
79
  }
78
80
  end
79
81
 
@@ -83,23 +85,25 @@ RSpec.describe 'ReeMapper::Time' do
83
85
  }
84
86
 
85
87
  it {
86
- expect { mapper.serialize({ time: DateTime.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
88
+ expect { mapper.serialize({ time: DateTime.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{DateTime.new(2020).inspect}`")
87
89
  }
88
90
 
89
91
  it {
90
- expect { mapper.db_dump({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
92
+ expect { mapper.db_dump({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{Date.new(2020).inspect}`")
91
93
  }
92
94
 
93
95
  it {
94
- expect { mapper.db_dump({ time: Time.new(2020).to_s }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
96
+ time = Time.new(2020).to_s
97
+ expect { mapper.db_dump({ time: time }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{time.inspect}`")
95
98
  }
96
99
 
97
100
  it {
98
- expect { mapper.db_dump({ time: '2020-01-01' }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
101
+ expect { mapper.db_dump({ time: '2020-01-01' }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `\"2020-01-01\"`")
99
102
  }
100
103
 
101
104
  it {
102
- expect { mapper.db_dump({ time: Object.new }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
105
+ object = Object.new
106
+ expect { mapper.db_dump({ time: object }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{object.inspect}`")
103
107
  }
104
108
  end
105
109
 
@@ -121,15 +125,16 @@ RSpec.describe 'ReeMapper::Time' do
121
125
  }
122
126
 
123
127
  it {
124
- expect { mapper.db_load({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
128
+ expect { mapper.db_load({ time: Date.new(2020) }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{Date.new(2020).inspect}`")
125
129
  }
126
130
 
127
131
  it {
128
- expect { mapper.db_load({ time: Object.new }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time")
132
+ object = Object.new
133
+ expect { mapper.db_load({ time: object }) }.to raise_error(ReeMapper::TypeError, "`time` should be a time, got `#{object.inspect}`")
129
134
  }
130
135
 
131
136
  it {
132
- expect { mapper.db_load({ time: 'no date time' }) }.to raise_error(ReeMapper::CoercionError, "`time` is invalid time")
137
+ expect { mapper.db_load({ time: 'no date time' }) }.to raise_error(ReeMapper::CoercionError, "`time` is invalid time, got `\"no date time\"`")
133
138
  }
134
139
  end
135
140
  end
@@ -193,7 +193,7 @@ RSpec.describe 'ReeMapper::MapperFactory type options' do
193
193
  }
194
194
 
195
195
  it {
196
- expect { mapper.cast({}) }.to raise_error(ReeMapper::TypeError)
196
+ expect { mapper.cast({}) }.to raise_error(ReeMapper::TypeError, "Missing required field `number` for `root`")
197
197
  }
198
198
 
199
199
  it {
@@ -226,7 +226,7 @@ RSpec.describe 'ReeMapper::MapperFactory type options' do
226
226
  }
227
227
 
228
228
  it {
229
- expect { mapper.cast({ number: nil, number_or_nil: 1 }) }.to raise_error(ReeMapper::TypeError)
229
+ expect { mapper.cast({ number: nil, number_or_nil: 1 }) }.to raise_error(ReeMapper::TypeError, "`number` should be an integer, got `nil`")
230
230
  }
231
231
  end
232
232
 
@@ -306,7 +306,7 @@ RSpec.describe 'ReeMapper::MapperFactory type options' do
306
306
  }
307
307
 
308
308
  it {
309
- expect { mapper.cast({ number: nil }) }.to raise_error(ReeMapper::TypeError, '`number` should be an integer')
309
+ expect { mapper.cast({ number: nil }) }.to raise_error(ReeMapper::TypeError, '`number` should be an integer, got `nil`')
310
310
  }
311
311
 
312
312
  it {
@@ -319,7 +319,7 @@ RSpec.describe 'ReeMapper::MapperFactory type options' do
319
319
  let(:mapper) { mapper_factory.call.use(:cast) { integer? :number, default: :not_number } }
320
320
 
321
321
  it {
322
- expect { mapper.cast({}) }.to raise_error(ReeMapper::TypeError, '`number` should be an integer')
322
+ expect { mapper.cast({}) }.to raise_error(ReeMapper::TypeError, '`number` should be an integer, got `:not_number`')
323
323
  }
324
324
  end
325
325
  end
@@ -28,15 +28,15 @@ RSpec.describe 'ReeMapper::Array' do
28
28
  }
29
29
 
30
30
  it {
31
- expect { mapper.serialize({ tags: 1 }) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array")
31
+ expect { mapper.serialize({ tags: 1 }) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array, got `1`")
32
32
  }
33
33
 
34
34
  it {
35
- expect { mapper.serialize({tags: [1], ary_of_ary: ["1"] }) }.to raise_error(ReeMapper::TypeError, "`ary_of_ary[0]` should be an array")
35
+ expect { mapper.serialize({tags: [1], ary_of_ary: ["1"] }) }.to raise_error(ReeMapper::TypeError, "`ary_of_ary[0]` should be an array, got `\"1\"`")
36
36
  }
37
37
 
38
38
  it {
39
- expect { mapper.serialize({tags: [1], ary_of_ary: [[1, "1"]] }) }.to raise_error(ReeMapper::TypeError, "`ary_of_ary[0][1]` should be an integer")
39
+ expect { mapper.serialize({tags: [1], ary_of_ary: [[1, "1"]] }) }.to raise_error(ReeMapper::TypeError, "`ary_of_ary[0][1]` should be an integer, got `\"1\"`")
40
40
  }
41
41
  end
42
42
 
@@ -46,7 +46,7 @@ RSpec.describe 'ReeMapper::Array' do
46
46
  }
47
47
 
48
48
  it {
49
- expect { mapper.cast({ 'tags' => 1 }) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array")
49
+ expect { mapper.cast({ 'tags' => 1 }) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array, got `1`")
50
50
  }
51
51
  end
52
52
 
@@ -56,7 +56,7 @@ RSpec.describe 'ReeMapper::Array' do
56
56
  }
57
57
 
58
58
  it {
59
- expect { mapper.db_dump(OpenStruct.new({ tags: 1 })) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array")
59
+ expect { mapper.db_dump(OpenStruct.new({ tags: 1 })) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array, got `1`")
60
60
  }
61
61
  end
62
62
 
@@ -66,7 +66,7 @@ RSpec.describe 'ReeMapper::Array' do
66
66
  }
67
67
 
68
68
  it {
69
- expect { mapper.db_load({ 'tags' => 1 }) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array")
69
+ expect { mapper.db_load({ 'tags' => 1 }) }.to raise_error(ReeMapper::TypeError, "`tags` should be an array, got `1`")
70
70
  }
71
71
  end
72
72
 
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  package_require("ree_errors/error")
2
- package_require("ree_mapper/errors/type_error")
3
+ package_require("ree_actions/errors")
3
4
 
4
5
  class ReeRoda::App < Roda
5
6
  include Ree::LinkDSL
@@ -25,7 +26,7 @@ class ReeRoda::App < Roda
25
26
  response.status = status_from_error(e.type)
26
27
  response.write(to_json(body))
27
28
  response.finish
28
- elsif e.is_a?(ReeMapper::TypeError) || e.is_a?(ReeMapper::CoercionError)
29
+ elsif e.is_a?(ReeActions::ParamError)
29
30
  body = {
30
31
  code: "param",
31
32
  message: e.message,
@@ -36,6 +36,16 @@ RSpec.describe ReeRoda::App do
36
36
  end
37
37
  end
38
38
 
39
+ class ReeRodaTest::SerializerErrorCmd
40
+ include ReeActions::DSL
41
+
42
+ action :serializer_error_cmd
43
+
44
+ def call(access, attrs)
45
+ {result: :not_string}
46
+ end
47
+ end
48
+
39
49
  class ReeRodaTest::AnotherCmd
40
50
  include ReeActions::DSL
41
51
 
@@ -169,6 +179,14 @@ RSpec.describe ReeRoda::App do
169
179
  action :cmd, **opts
170
180
  serializer :serializer, **opts
171
181
  end
182
+
183
+ get "api/serializer_error" do
184
+ summary "Action with serializer error"
185
+ warden_scope :visitor
186
+ sections "some_action"
187
+ action :serializer_error_cmd, **opts
188
+ serializer :serializer, **opts
189
+ end
172
190
  end
173
191
  end
174
192
 
@@ -264,4 +282,14 @@ RSpec.describe ReeRoda::App do
264
282
  expect(last_response.status).to eq(201)
265
283
  expect(last_response.body).to eq("{\"result\":\"another_result\"}")
266
284
  }
285
+
286
+ it {
287
+ get "api/action/not_integer"
288
+ expect(last_response.status).to eq(400)
289
+ }
290
+
291
+ it {
292
+ get "api/serializer_error"
293
+ expect(last_response.status).to eq(500)
294
+ }
267
295
  end
@@ -11,4 +11,6 @@ Bootsnap.setup(
11
11
  require 'rspec'
12
12
  require 'ree'
13
13
 
14
- Ree.init(__dir__)
14
+ ENV["RUBY_ENV"] = "test"
15
+
16
+ Ree.init(__dir__)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.85"
4
+ VERSION = "1.0.87"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.85
4
+ version: 1.0.87
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-12 00:00:00.000000000 Z
11
+ date: 2024-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.1.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: bigdecimal
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.1.6
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.1.6
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rack-test
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -273,6 +287,7 @@ files:
273
287
  - lib/ree_lib/packages/ree_actions/bin/console
274
288
  - lib/ree_lib/packages/ree_actions/package/ree_actions.rb
275
289
  - lib/ree_lib/packages/ree_actions/package/ree_actions/dsl.rb
290
+ - lib/ree_lib/packages/ree_actions/package/ree_actions/errors.rb
276
291
  - lib/ree_lib/packages/ree_actions/spec/package_schema_spec.rb
277
292
  - lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb
278
293
  - lib/ree_lib/packages/ree_actions/spec/spec_helper.rb
@@ -1003,6 +1018,7 @@ files:
1003
1018
  - lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/argument_error.rb
1004
1019
  - lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/coercion_error.rb
1005
1020
  - lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/error.rb
1021
+ - lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/error_with_location.rb
1006
1022
  - lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/type_error.rb
1007
1023
  - lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/unsupported_type_error.rb
1008
1024
  - lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb
@@ -1391,7 +1407,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1391
1407
  - !ruby/object:Gem::Version
1392
1408
  version: '0'
1393
1409
  requirements: []
1394
- rubygems_version: 3.4.1
1410
+ rubygems_version: 3.5.3
1395
1411
  signing_key:
1396
1412
  specification_version: 4
1397
1413
  summary: Ruby Standard Library Extensions