ree_lib 1.0.86 → 1.0.88

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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/Gemfile.lock +28 -23
  4. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_array.rb +12 -8
  5. data/lib/ree_lib/packages/ree_dao/package/ree_dao/wrappers/pg_jsonb.rb +12 -8
  6. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_array_spec.rb +3 -3
  7. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/wrappers/pg_jsonb_spec.rb +4 -4
  8. data/lib/ree_lib/packages/ree_enum/package/ree_enum/base_enum_mapper.rb +5 -5
  9. data/lib/ree_lib/packages/ree_enum/package/ree_enum/integer_value_enum_mapper.rb +5 -5
  10. data/lib/ree_lib/packages/ree_enum/package/ree_enum/string_value_enum_mapper.rb +5 -5
  11. data/lib/ree_lib/packages/ree_enum/spec/ree_enum/dsl_spec.rb +3 -3
  12. data/lib/ree_lib/packages/ree_http/package/ree_http/functions/execute_request.rb +27 -20
  13. data/lib/ree_lib/packages/ree_http/schemas/ree_http/functions/execute_request.schema.json +8 -0
  14. data/lib/ree_lib/packages/ree_http/spec/ree_http/functions/http_delete_spec.rb +10 -8
  15. data/lib/ree_lib/packages/ree_http/spec/ree_http/functions/http_get_spec.rb +79 -18
  16. data/lib/ree_lib/packages/ree_http/spec/ree_http/functions/http_options_spec.rb +6 -5
  17. data/lib/ree_lib/packages/ree_http/spec/ree_http/functions/http_patch_spec.rb +8 -4
  18. data/lib/ree_lib/packages/ree_http/spec/ree_http/functions/http_post_spec.rb +5 -10
  19. data/lib/ree_lib/packages/ree_http/spec/ree_http/functions/http_put_spec.rb +5 -3
  20. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/coercion_error.rb +1 -1
  21. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/error_with_location.rb +25 -0
  22. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/errors/type_error.rb +1 -1
  23. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/field.rb +12 -4
  24. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper.rb +32 -10
  25. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory.rb +17 -4
  26. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/any.rb +8 -8
  27. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/bool.rb +12 -12
  28. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/date.rb +13 -13
  29. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/date_time.rb +13 -13
  30. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/float.rb +13 -13
  31. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/integer.rb +13 -13
  32. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/rational.rb +13 -13
  33. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/string.rb +12 -12
  34. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/types/time.rb +13 -13
  35. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/wrappers/array.rb +73 -21
  36. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper.rb +1 -0
  37. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/benchmarks/mapper_benchmark_spec.rb +31 -0
  38. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/mapper_factory_spec.rb +10 -6
  39. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/mapper_spec.rb +7 -0
  40. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/bool_spec.rb +8 -8
  41. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/date_spec.rb +10 -10
  42. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/date_time_spec.rb +16 -16
  43. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/float_spec.rb +13 -13
  44. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/hash_spec.rb +2 -2
  45. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/integer_spec.rb +14 -14
  46. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/rational_spec.rb +12 -12
  47. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/string_spec.rb +12 -12
  48. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/time_spec.rb +17 -16
  49. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/types/type_options_spec.rb +4 -4
  50. data/lib/ree_lib/packages/ree_mapper/spec/ree_mapper/wrappers/array_spec.rb +6 -6
  51. data/lib/ree_lib/spec.init.rb +3 -1
  52. data/lib/ree_lib/version.rb +1 -1
  53. metadata +19 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef4605f8eb48973a2e9ee1c9df9fbef06a4e8be6efe39e2ccd06bc2a945649c3
4
- data.tar.gz: 20b1504401c0e996617499d3b9d595bfcfa124036341f0ca81641c7184da5309
3
+ metadata.gz: 5617079115b4c9fb7431a6d2e81d7eb34c378173809508312b6f58de711ae0fc
4
+ data.tar.gz: e0a0dc4c0dc92bab997e1ce44b4ea7d888ab616be535f011b3e5c9dbfb66a829
5
5
  SHA512:
6
- metadata.gz: f6969edfb467a49fa80864d8d27701d2379d846ce2cec01ec80dc0da740978a834597687e2da47ddfb21ec8abbc44a9d7779418e53550fd3bb60237279583cd8
7
- data.tar.gz: 463d80dd677fbba864d2c9c9130b88f523e52c0f49c4ee7632ef781ca8c9af5eec19f1230483509bcb981e91b360aa9072918ceaab091ab21bfbb32d207d21e5
6
+ metadata.gz: faa26811f3b74b634f7726887530bc106eea6576cf4ebc4496bba6f68f2e567c5a9511ea786396f1324a8474c539b40e64d8c12710b92e72d757b1a46727091e
7
+ data.tar.gz: 2543ee6346775abed1525a450ba6b203c09e618954092eafff0bda78d395674f3d2005b9f959abeac89bf5fdcfb9399c8b70c1bcb6ce37ddcc0b84622ddfa547
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.0
1
+ 3.3.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.86)
4
+ ree_lib (1.0.88)
5
+ bigdecimal (~> 3.1.6)
5
6
  binding_of_caller (~> 1.0.0)
6
7
  i18n (~> 1.12.0)
7
8
  loofah (~> 2.18.0)
@@ -14,46 +15,49 @@ PATH
14
15
  GEM
15
16
  remote: https://rubygems.org/
16
17
  specs:
17
- addressable (2.8.1)
18
+ abbrev (0.1.2)
19
+ addressable (2.8.6)
18
20
  public_suffix (>= 2.0.2, < 6.0)
21
+ bigdecimal (3.1.6)
19
22
  binding_of_caller (1.0.0)
20
23
  debug_inspector (>= 0.0.1)
21
- bootsnap (1.16.0)
24
+ bootsnap (1.17.0)
22
25
  msgpack (~> 1.2)
23
- commander (4.6.0)
24
- highline (~> 2.0.0)
26
+ commander (5.0.0)
27
+ highline (~> 3.0.0)
25
28
  concurrent-ruby (1.2.2)
26
29
  crack (0.4.5)
27
30
  rexml
28
31
  crass (1.0.6)
29
32
  debug_inspector (1.2.0)
30
33
  diff-lcs (1.5.0)
31
- faker (3.2.0)
34
+ faker (3.2.2)
32
35
  i18n (>= 1.8.11, < 2)
33
- hashdiff (1.0.1)
34
- highline (2.0.3)
36
+ hashdiff (1.1.0)
37
+ highline (3.0.0)
38
+ abbrev
35
39
  i18n (1.12.0)
36
40
  concurrent-ruby (~> 1.0)
37
41
  loofah (2.18.0)
38
42
  crass (~> 1.0.2)
39
43
  nokogiri (>= 1.5.9)
40
- msgpack (1.6.0)
44
+ msgpack (1.7.2)
41
45
  nokogiri (1.16.0-x86_64-darwin)
42
46
  racc (~> 1.4)
43
47
  nokogiri (1.16.0-x86_64-linux)
44
48
  racc (~> 1.4)
45
49
  oj (3.13.23)
46
50
  pg (1.4.6)
47
- public_suffix (5.0.1)
51
+ public_suffix (5.0.4)
48
52
  racc (1.7.3)
49
- rack (3.0.5)
50
- rack-test (2.0.2)
53
+ rack (3.0.8)
54
+ rack-test (2.1.0)
51
55
  rack (>= 1.3)
52
56
  rainbow (3.1.1)
53
- rake (13.0.6)
54
- ree (1.0.33)
55
- commander (~> 4.6.0)
56
- rexml (3.2.5)
57
+ rake (13.1.0)
58
+ ree (1.0.34)
59
+ commander (~> 5.0.0)
60
+ rexml (3.2.6)
57
61
  roda (3.58.0)
58
62
  rack
59
63
  rollbar (3.3.3)
@@ -61,23 +65,23 @@ GEM
61
65
  rspec-core (~> 3.12.0)
62
66
  rspec-expectations (~> 3.12.0)
63
67
  rspec-mocks (~> 3.12.0)
64
- rspec-core (3.12.1)
68
+ rspec-core (3.12.2)
65
69
  rspec-support (~> 3.12.0)
66
- rspec-expectations (3.12.2)
70
+ rspec-expectations (3.12.3)
67
71
  diff-lcs (>= 1.2.0, < 2.0)
68
72
  rspec-support (~> 3.12.0)
69
- rspec-mocks (3.12.3)
73
+ rspec-mocks (3.12.6)
70
74
  diff-lcs (>= 1.2.0, < 2.0)
71
75
  rspec-support (~> 3.12.0)
72
- rspec-support (3.12.0)
76
+ rspec-support (3.12.1)
73
77
  sequel (5.58.0)
74
78
  sqlite3 (1.4.4)
75
- timecop (0.9.6)
79
+ timecop (0.9.8)
76
80
  tzinfo (2.0.6)
77
81
  concurrent-ruby (~> 1.0)
78
82
  warden (1.2.9)
79
83
  rack (>= 2.0.9)
80
- webmock (3.18.1)
84
+ webmock (3.19.1)
81
85
  addressable (>= 2.8.0)
82
86
  crack (>= 0.3.2)
83
87
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -85,6 +89,7 @@ GEM
85
89
  PLATFORMS
86
90
  x86_64-darwin-19
87
91
  x86_64-darwin-21
92
+ x86_64-darwin-22
88
93
  x86_64-linux
89
94
 
90
95
  DEPENDENCIES
@@ -103,4 +108,4 @@ DEPENDENCIES
103
108
  webmock
104
109
 
105
110
  BUNDLED WITH
106
- 2.3.7
111
+ 2.5.4
@@ -8,12 +8,13 @@ class ReeDao::PgArray < ReeMapper::AbstractWrapper
8
8
  Kwargs[
9
9
  name: String,
10
10
  role: Nilor[Symbol, ArrayOf[Symbol]],
11
- fields_filters: ArrayOf[ReeMapper::FieldsFilter]
11
+ fields_filters: ArrayOf[ReeMapper::FieldsFilter],
12
+ location: Nilor[String],
12
13
  ] => Or[Sequel::Postgres::PGArray, String]
13
14
  )
14
- def db_dump(value, name:, role: nil, fields_filters: [])
15
+ def db_dump(value, name:, role: nil, fields_filters: [], location: nil)
15
16
  if !value.is_a?(Array)
16
- raise ReeMapper::TypeError, "`#{name}` should be an array, got `#{truncate(value.inspect)}`"
17
+ raise ReeMapper::TypeError.new("`#{name}` should be an array, got `#{truncate(value.inspect)}`", location)
17
18
  end
18
19
 
19
20
  value = value.map.with_index do |el, index|
@@ -21,7 +22,8 @@ class ReeDao::PgArray < ReeMapper::AbstractWrapper
21
22
  el,
22
23
  name: "#{name}[#{index}]",
23
24
  role: role,
24
- fields_filters: fields_filters + [subject.fields_filter]
25
+ fields_filters: fields_filters + [subject.fields_filter],
26
+ location: subject.location,
25
27
  )
26
28
  end
27
29
 
@@ -37,12 +39,13 @@ class ReeDao::PgArray < ReeMapper::AbstractWrapper
37
39
  Kwargs[
38
40
  name: String,
39
41
  role: Nilor[Symbol, ArrayOf[Symbol]],
40
- fields_filters: ArrayOf[ReeMapper::FieldsFilter]
42
+ fields_filters: ArrayOf[ReeMapper::FieldsFilter],
43
+ location: Nilor[String],
41
44
  ] => Array
42
45
  ).throws(ReeMapper::TypeError)
43
- def db_load(value, name:, role: nil, fields_filters: [])
46
+ def db_load(value, name:, role: nil, fields_filters: [], location: nil)
44
47
  if !value.is_a?(Sequel::Postgres::PGArray)
45
- raise ReeMapper::TypeError, "`#{name}` should be a Sequel::Postgres::PGArray, got `#{truncate(value.inspect)}`"
48
+ raise ReeMapper::TypeError.new("`#{name}` should be a Sequel::Postgres::PGArray, got `#{truncate(value.inspect)}`", location)
46
49
  end
47
50
 
48
51
  value.map.with_index do |val, index|
@@ -50,7 +53,8 @@ class ReeDao::PgArray < ReeMapper::AbstractWrapper
50
53
  val,
51
54
  name: "#{name}[#{index}]",
52
55
  role: role,
53
- fields_filters: fields_filters + [subject.fields_filter]
56
+ fields_filters: fields_filters + [subject.fields_filter],
57
+ location: subject.location,
54
58
  )
55
59
  end
56
60
  end
@@ -8,7 +8,8 @@ class ReeDao::PgJsonb < ReeMapper::AbstractWrapper
8
8
  Kwargs[
9
9
  name: String,
10
10
  role: Nilor[Symbol, ArrayOf[Symbol]],
11
- fields_filters: ArrayOf[ReeMapper::FieldsFilter]
11
+ fields_filters: ArrayOf[ReeMapper::FieldsFilter],
12
+ location: Nilor[String],
12
13
  ] => Or[
13
14
  Sequel::Postgres::JSONBHash,
14
15
  Sequel::Postgres::JSONBArray,
@@ -20,18 +21,19 @@ class ReeDao::PgJsonb < ReeMapper::AbstractWrapper
20
21
  Sequel::Postgres::JSONBNull
21
22
  ]
22
23
  ).throws(ReeMapper::TypeError)
23
- def db_dump(value, name:, role: nil, fields_filters: [])
24
+ def db_dump(value, name:, role: nil, fields_filters: [], location: nil)
24
25
  value = subject.type.db_dump(
25
26
  value,
26
27
  name: name,
27
28
  role: role,
28
- fields_filters: fields_filters + [subject.fields_filter]
29
+ fields_filters: fields_filters + [subject.fields_filter],
30
+ location: subject.location,
29
31
  )
30
32
 
31
33
  begin
32
34
  Sequel.pg_jsonb_wrap(value)
33
35
  rescue Sequel::Error
34
- raise ReeMapper::TypeError, "`#{name}` should be an jsonb primitive, got `#{truncate(value.inspect)}`"
36
+ raise ReeMapper::TypeError.new("`#{name}` should be an jsonb primitive, got `#{truncate(value.inspect)}`", location)
35
37
  end
36
38
  end
37
39
 
@@ -40,7 +42,8 @@ class ReeDao::PgJsonb < ReeMapper::AbstractWrapper
40
42
  Kwargs[
41
43
  name: String,
42
44
  role: Nilor[Symbol, ArrayOf[Symbol]],
43
- fields_filters: ArrayOf[ReeMapper::FieldsFilter]
45
+ fields_filters: ArrayOf[ReeMapper::FieldsFilter],
46
+ location: Nilor[String],
44
47
  ] => Or[
45
48
  Hash,
46
49
  Array,
@@ -52,7 +55,7 @@ class ReeDao::PgJsonb < ReeMapper::AbstractWrapper
52
55
  Rational,
53
56
  ]
54
57
  ).throws(ReeMapper::TypeError)
55
- def db_load(value, name:, role: nil, fields_filters: [])
58
+ def db_load(value, name:, role: nil, fields_filters: [], location: nil)
56
59
  value = case value
57
60
  when Sequel::Postgres::JSONBHash
58
61
  ReeObject::ToHash.new.call(value.to_h)
@@ -61,14 +64,15 @@ class ReeDao::PgJsonb < ReeMapper::AbstractWrapper
61
64
  when Numeric, String, TrueClass, FalseClass, NilClass
62
65
  value
63
66
  else
64
- raise ReeMapper::TypeError, "`#{name}` should be a Sequel::Postgres::JSONB, got `#{truncate(value.inspect)}`"
67
+ raise ReeMapper::TypeError.new("`#{name}` should be a Sequel::Postgres::JSONB, got `#{truncate(value.inspect)}`", location)
65
68
  end
66
69
 
67
70
  subject.type.db_load(
68
71
  value,
69
72
  name: name,
70
73
  role: role,
71
- fields_filters: fields_filters + [subject.fields_filter]
74
+ fields_filters: fields_filters + [subject.fields_filter],
75
+ location: subject.location,
72
76
  )
73
77
  end
74
78
  end
@@ -46,7 +46,7 @@ RSpec.describe 'ReeDao::PgArray' do
46
46
  it {
47
47
  expect {
48
48
  mapper.db_dump({ tags: 1 })
49
- }.to raise_error(ReeMapper::TypeError, "`tags` should be an array, got `1`")
49
+ }.to raise_error(ReeMapper::TypeError, /`tags` should be an array, got `1`/)
50
50
  }
51
51
  end
52
52
 
@@ -66,7 +66,7 @@ RSpec.describe 'ReeDao::PgArray' do
66
66
  mapper.db_load({
67
67
  tags: 1
68
68
  })
69
- }.to raise_error(ReeMapper::TypeError, "`tags` should be a Sequel::Postgres::PGArray, got `1`")
69
+ }.to raise_error(ReeMapper::TypeError, /`tags` should be a Sequel::Postgres::PGArray, got `1`/)
70
70
  }
71
71
  end
72
- end
72
+ end
@@ -55,14 +55,14 @@ RSpec.describe 'ReeDao::PgJsonb' do
55
55
  it {
56
56
  expect {
57
57
  mapper.db_dump({ numbers: ['1'] })
58
- }.to raise_error(ReeMapper::TypeError, "`numbers[0]` should be an integer, got `\"1\"`")
58
+ }.to raise_error(ReeMapper::TypeError, /`numbers\[0\]` should be an integer, got `\"1\"`/)
59
59
  }
60
60
 
61
61
  it {
62
62
  object = Object.new
63
63
  expect {
64
64
  mapper.db_dump({ any: object })
65
- }.to raise_error(ReeMapper::TypeError, "`any` should be an jsonb primitive, got `#{object.inspect}`")
65
+ }.to raise_error(ReeMapper::TypeError, /`any` should be an jsonb primitive, got `#{object.inspect}`/)
66
66
  }
67
67
  end
68
68
 
@@ -88,14 +88,14 @@ RSpec.describe 'ReeDao::PgJsonb' do
88
88
  it {
89
89
  expect {
90
90
  mapper.db_load({ numbers: Sequel::Postgres::JSONBArray.new([1.1]) })
91
- }.to raise_error(ReeMapper::TypeError, "`numbers[0]` should be an integer, got `1.1`")
91
+ }.to raise_error(ReeMapper::TypeError, /`numbers\[0\]` should be an integer, got `1.1`/)
92
92
  }
93
93
 
94
94
  it {
95
95
  object = Object.new
96
96
  expect {
97
97
  mapper.db_load({ numbers: object })
98
- }.to raise_error(ReeMapper::TypeError, "`numbers` should be a Sequel::Postgres::JSONB, got `#{object.inspect}`")
98
+ }.to raise_error(ReeMapper::TypeError, /`numbers` should be a Sequel::Postgres::JSONB, got `#{object.inspect}`/)
99
99
  }
100
100
  end
101
101
  end
@@ -12,10 +12,10 @@ class ReeEnum::BaseEnumMapper < ReeMapper::AbstractType
12
12
  ReeEnum::Value,
13
13
  Kwargs[
14
14
  name: String,
15
- role: Nilor[Symbol, ArrayOf[Symbol]]
15
+ location: Nilor[String],
16
16
  ] => Or[Integer, String]
17
17
  )
18
- def db_dump(value, name:, role: nil)
18
+ def db_dump(value, name:, location: nil)
19
19
  value.mapped_value
20
20
  end
21
21
 
@@ -23,14 +23,14 @@ class ReeEnum::BaseEnumMapper < ReeMapper::AbstractType
23
23
  Or[Integer, String],
24
24
  Kwargs[
25
25
  name: String,
26
- role: Nilor[Symbol, ArrayOf[Symbol]]
26
+ location: Nilor[String],
27
27
  ] => ReeEnum::Value
28
28
  ).throws(ReeMapper::CoercionError)
29
- def db_load(value, name:, role: nil)
29
+ def db_load(value, name:, location: nil)
30
30
  enum_val = @enum.get_values.by_mapped_value(value)
31
31
 
32
32
  if !enum_val
33
- raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}, got `#{truncate(value.inspect)}`"
33
+ raise ReeMapper::CoercionError.new("`#{name}` should be one of #{enum_inspection}, got `#{truncate(value.inspect)}`", location)
34
34
  end
35
35
 
36
36
  enum_val
@@ -6,10 +6,10 @@ class ReeEnum::IntegerValueEnumMapper < ReeEnum::BaseEnumMapper
6
6
  ReeEnum::Value,
7
7
  Kwargs[
8
8
  name: String,
9
- role: Nilor[Symbol, ArrayOf[Symbol]]
9
+ location: Nilor[String],
10
10
  ] => Integer
11
11
  )
12
- def serialize(value, name:, role: nil)
12
+ def serialize(value, name:, location: nil)
13
13
  value.value
14
14
  end
15
15
 
@@ -17,10 +17,10 @@ class ReeEnum::IntegerValueEnumMapper < ReeEnum::BaseEnumMapper
17
17
  Any,
18
18
  Kwargs[
19
19
  name: String,
20
- role: Nilor[Symbol, ArrayOf[Symbol]]
20
+ location: Nilor[String],
21
21
  ] => ReeEnum::Value
22
22
  ).throws(ReeMapper::CoercionError)
23
- def cast(value, name:, role: nil)
23
+ def cast(value, name:, location: nil)
24
24
  enum_value = case value
25
25
  when Integer
26
26
  @enum.get_values.by_value(value)
@@ -34,7 +34,7 @@ class ReeEnum::IntegerValueEnumMapper < ReeEnum::BaseEnumMapper
34
34
  end
35
35
 
36
36
  if enum_value.nil?
37
- raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}, got `#{truncate(value.inspect)}`"
37
+ raise ReeMapper::CoercionError.new("`#{name}` should be one of #{enum_inspection}, got `#{truncate(value.inspect)}`", location)
38
38
  end
39
39
 
40
40
  enum_value
@@ -6,10 +6,10 @@ class ReeEnum::StringValueEnumMapper < ReeEnum::BaseEnumMapper
6
6
  ReeEnum::Value,
7
7
  Kwargs[
8
8
  name: String,
9
- role: Nilor[Symbol, ArrayOf[Symbol]]
9
+ location: Nilor[String],
10
10
  ] => String
11
11
  )
12
- def serialize(value, name:, role: nil)
12
+ def serialize(value, name:, location: nil)
13
13
  value.value
14
14
  end
15
15
 
@@ -17,10 +17,10 @@ class ReeEnum::StringValueEnumMapper < ReeEnum::BaseEnumMapper
17
17
  Any,
18
18
  Kwargs[
19
19
  name: String,
20
- role: Nilor[Symbol, ArrayOf[Symbol]]
20
+ location: Nilor[String],
21
21
  ] => ReeEnum::Value
22
22
  ).throws(ReeMapper::CoercionError)
23
- def cast(value, name:, role: nil)
23
+ def cast(value, name:, location: nil)
24
24
  enum_value = case value
25
25
  when String
26
26
  @enum.get_values.by_value(value)
@@ -29,7 +29,7 @@ class ReeEnum::StringValueEnumMapper < ReeEnum::BaseEnumMapper
29
29
  end
30
30
 
31
31
  if enum_value.nil?
32
- raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}, got `#{truncate(value.inspect)}`"
32
+ raise ReeMapper::CoercionError.new("`#{name}` should be one of #{enum_inspection}, got `#{truncate(value.inspect)}`", location)
33
33
  end
34
34
 
35
35
  enum_value
@@ -152,7 +152,7 @@ RSpec.describe ReeEnum::DSL do
152
152
  type: 'invalid',
153
153
  number: 0,
154
154
  })
155
- }.to raise_error(ReeMapper::CoercionError, '`type` should be one of ["account"], got `"invalid"`')
155
+ }.to raise_error(ReeMapper::CoercionError, /`type` should be one of \["account"\], got `"invalid"`/)
156
156
 
157
157
  expect {
158
158
  mapper.db_load({
@@ -160,7 +160,7 @@ RSpec.describe ReeEnum::DSL do
160
160
  type: 'invalid',
161
161
  number: 0,
162
162
  })
163
- }.to raise_error(ReeMapper::CoercionError, '`type` should be one of ["account"], got `"invalid"`')
163
+ }.to raise_error(ReeMapper::CoercionError, /`type` should be one of \["account"\], got `"invalid"`/)
164
164
 
165
165
  expect(
166
166
  mapper.cast({
@@ -242,4 +242,4 @@ RSpec.describe ReeEnum::DSL do
242
242
  swagger_definition_fetcher.call(TestReeEnum::ContentTypes.type_for_mapper, -> {})
243
243
  )
244
244
  }
245
- end
245
+ end
@@ -4,13 +4,13 @@ class ReeHttp::ExecuteRequest
4
4
  include Ree::FnDSL
5
5
 
6
6
  fn :execute_request do
7
+ link :build_request
7
8
  link :build_request_executor
8
9
  link :slice, from: :ree_hash
9
- link 'ree_http/http_exceptions', -> { HttpExceptions }
10
-
11
10
  link 'ree_http/constants', -> {
12
11
  DEFAULT_TIMEOUT & DEFAULT_WRITE_TIMEOUT & DEFAULT_FORCE_SSL
13
12
  }
13
+ link 'ree_http/http_exceptions', -> { HttpExceptions }
14
14
  end
15
15
 
16
16
  include HttpExceptions
@@ -89,7 +89,9 @@ class ReeHttp::ExecuteRequest
89
89
  "Got #{response.code} response on request URI #{request.uri}\n With BODY: #{response.body}\n"
90
90
  )
91
91
 
92
- process_redirect_response(response, request, opts, &block)
92
+ if response.is_a?(Net::HTTPRedirection)
93
+ return process_redirect_response(response, request, opts, &block)
94
+ end
93
95
 
94
96
  response
95
97
  end
@@ -97,27 +99,32 @@ class ReeHttp::ExecuteRequest
97
99
  private
98
100
 
99
101
  def process_redirect_response(response, request, opts, &block)
100
- if response.is_a?(Net::HTTPRedirection)
101
- if opts[:redirects_count] == 0
102
- raise TooManyRedirectsError, "Got too match redirects, if you want more redirects, use redirects_count"
103
- end
102
+ if opts[:redirects_count] == 0
103
+ raise TooManyRedirectsError, "Got too match redirects, if you want more redirects, use redirects_count"
104
+ end
104
105
 
105
- if opts[:strict_redirect_mode] && STRICT_SENSITIVE_CODES.include?(response.code.to_i) && UNSAFE_VERBS.include?(request.method.to_sym)
106
- raise RedirectMethodError, "Got #{response.code.to_i} with strict_mode"
107
- end
106
+ if opts[:strict_redirect_mode] && STRICT_SENSITIVE_CODES.include?(response.code.to_i) && UNSAFE_VERBS.include?(request.method.to_sym)
107
+ raise RedirectMethodError, "Got #{response.code.to_i} with strict_mode"
108
+ end
108
109
 
109
- if (ALWAYS_GET_CODES.include?(response.code.to_i) || STRICT_SENSITIVE_CODES.include?(response.code.to_i)) && UNSAFE_VERBS.include?(request.method.downcase.to_sym)
110
- request.instance_variable_set(:@method, 'GET')
111
- end
110
+ if (ALWAYS_GET_CODES.include?(response.code.to_i) || STRICT_SENSITIVE_CODES.include?(response.code.to_i)) && UNSAFE_VERBS.include?(request.method.downcase.to_sym)
111
+ new_request_method = :get
112
+ end
112
113
 
113
- request.instance_variable_set(:@uri, URI(response['Location']))
114
- request.instance_variable_set(:@path, request.uri.path)
114
+ new_request_method ||= request.method.downcase.to_sym
115
115
 
116
- opts[:redirects_count] -= 1
116
+ new_uri = URI(response['Location'] || response['location'])
117
+ new_request = build_request(
118
+ new_request_method,
119
+ new_uri.to_s,
120
+ **slice(opts, [
121
+ :headers, :body, :form_data, :query_params,
122
+ :force_ssl, :ca_certs, :basic_auth, :bearer_token
123
+ ])
124
+ )
117
125
 
118
- return call(request, **opts, &block)
119
- end
126
+ opts[:redirects_count] -= 1
120
127
 
121
- response
128
+ call(new_request, **opts, &block)
122
129
  end
123
- end
130
+ end
@@ -34,6 +34,14 @@
34
34
  }
35
35
  ],
36
36
  "links": [
37
+ {
38
+ "target": "build_request",
39
+ "package_name": "ree_http",
40
+ "as": "build_request",
41
+ "imports": [
42
+
43
+ ]
44
+ },
37
45
  {
38
46
  "target": "build_request_executor",
39
47
  "package_name": "ree_http",
@@ -129,11 +129,11 @@ RSpec.describe :http_delete do
129
129
  headers: {
130
130
  'Accept'=>'*/*',
131
131
  'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
132
- 'User-Agent'=>'Ruby',
133
- 'Token'=>'123'
132
+ 'Host' => 'www.example.com',
133
+ 'User-Agent'=>'Ruby'
134
134
  }
135
135
  )
136
- .to_return(status: 200, headers: {'Token': '123'})
136
+ .to_return(status: 200)
137
137
  end
138
138
  after :all do
139
139
  WebMock.reset!
@@ -142,7 +142,7 @@ RSpec.describe :http_delete do
142
142
  let(:err_result) {
143
143
  http_delete(
144
144
  host_with_ssl + '/redirect_303_infinity',
145
- force_ssl: true, headers: { token: '123'}
145
+ force_ssl: true
146
146
  )
147
147
  }
148
148
 
@@ -151,15 +151,17 @@ RSpec.describe :http_delete do
151
151
 
152
152
  http_delete(
153
153
  host_with_ssl + '/redirect_307',
154
- force_ssl: true, headers: { token: '123'}
154
+ force_ssl: true, headers: { "Token" => 123 }
155
155
  )
156
- expect(WebMock).to have_requested(:delete, host_with_ssl).with(headers: { 'Token'=>'123' })
156
+ expect(WebMock).to have_requested(:delete, host_with_ssl + "/redirect_307").with(headers: { "Token" => 123}).once
157
+ expect(WebMock).to have_requested(:delete, host_with_ssl).once
157
158
 
158
159
  http_delete(
159
160
  host_with_ssl + '/redirect_303',
160
- force_ssl: true, headers: { token: '123'}
161
+ force_ssl: true, headers: { "Token" => 123 }
161
162
  )
162
- expect(WebMock).to have_requested(:get, host_with_ssl).with(headers: { 'Token'=>'123' })
163
+ expect(WebMock).to have_requested(:delete, host_with_ssl + "/redirect_303").with(headers: { "Token" => 123}).once
164
+ expect(WebMock).to have_requested(:get, host_with_ssl).once
163
165
  end
164
166
  end
165
167
  end