ree_lib 1.0.72 → 1.0.74

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0421ad28472f902b4c53091515c749bdcb6aba9ef96ed42009abe27d115edf48
4
- data.tar.gz: 3909bfecb3e92e05708a9be5effb672fc8042e2f53ed4aadb426539f0eba8574
3
+ metadata.gz: db0e9f5e3c64d69ff4f6d4d4550ab6563bfe0bc9529333e21a1251503ad562b2
4
+ data.tar.gz: 02abcd3afb9f8155666b98abdb5a9f833b3affca8038c19b2322ab60be82e2db
5
5
  SHA512:
6
- metadata.gz: bb696f99d8af84de496f0e6a3bf616256853302d952409832fd89eb24830c0f29cb2cead19b245eee883a2c9dc7d358633bccc308be56369c2d8aeb569a66c7d
7
- data.tar.gz: 0accc79d4259f341f4fbf6306103e28521b070119b2ee6be3e7bb98e08802b78ad857f476524a128d9c51cd7ca02fb59298ac70886b70a1304de8d39455d13d5
6
+ metadata.gz: 07f42d6c784721984a1729cd38412c946fd8924982d98eff0158a91c4ce9f5c80ef94561e0ea9801a0e1df3baa177ef6bf7ae0db5c177c1f2960f118a339d797
7
+ data.tar.gz: 25c0ae598cdbfee90f4ea991705fd73328188f64f33bd2895635bff5d98dc527c2a209b40fa286208d327f0f50cd6e03e36b192b3b8ea2076166d685b9c227ac
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.72)
4
+ ree_lib (1.0.73)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -51,7 +51,7 @@ GEM
51
51
  rack (>= 1.3)
52
52
  rainbow (3.1.1)
53
53
  rake (13.0.6)
54
- ree (1.0.29)
54
+ ree (1.0.31)
55
55
  commander (~> 4.6.0)
56
56
  rexml (3.2.5)
57
57
  roda (3.58.0)
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+ require_relative "value"
3
+
4
+ class ReeEnum::BaseEnumMapper < ReeMapper::AbstractType
5
+ def initialize(enum)
6
+ @enum = enum
7
+ end
8
+
9
+ contract(
10
+ ReeEnum::Value,
11
+ Kwargs[
12
+ name: String,
13
+ role: Nilor[Symbol, ArrayOf[Symbol]]
14
+ ] => Or[Integer, String]
15
+ )
16
+ def db_dump(value, name:, role: nil)
17
+ value.mapped_value
18
+ end
19
+
20
+ contract(
21
+ Or[Integer, String],
22
+ Kwargs[
23
+ name: String,
24
+ role: Nilor[Symbol, ArrayOf[Symbol]]
25
+ ] => ReeEnum::Value
26
+ ).throws(ReeMapper::CoercionError)
27
+ def db_load(value, name:, role: nil)
28
+ enum_val = @enum.get_values.by_mapped_value(value)
29
+
30
+ if !enum_val
31
+ raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}"
32
+ end
33
+
34
+ enum_val
35
+ end
36
+
37
+ private
38
+
39
+ def enum_inspection
40
+ @enum_inspection ||= truncate(@enum.get_values.each.map(&:to_s).inspect)
41
+ end
42
+
43
+ def truncate(str, limit = 180)
44
+ return str if str.length <= limit
45
+ "#{str[0..limit]}..."
46
+ end
47
+ end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  package_require 'ree_swagger/functions/register_type'
2
3
 
4
+ require_relative 'integer_value_enum_mapper'
5
+ require_relative 'string_value_enum_mapper'
6
+
3
7
  module ReeEnum
4
8
  module DSL
5
9
  def self.included(base)
@@ -27,100 +31,32 @@ module ReeEnum
27
31
  end
28
32
 
29
33
  def type_for_mapper
30
- @type_for_mapper ||= begin
31
- klass = Class.new(ReeMapper::AbstractType) do
32
- def initialize(enum)
33
- @enum = enum
34
- end
35
-
36
- contract(
37
- ReeEnum::Value,
38
- Kwargs[
39
- name: String,
40
- role: Nilor[Symbol, ArrayOf[Symbol]]
41
- ] => String
42
- )
43
- def serialize(value, name:, role: nil)
44
- value.to_s
45
- end
46
-
47
- contract(
48
- Any,
49
- Kwargs[
50
- name: String,
51
- role: Nilor[Symbol, ArrayOf[Symbol]]
52
- ] => ReeEnum::Value
53
- ).throws(ReeMapper::CoercionError)
54
- def cast(value, name:, role: nil)
55
- enum_value = if value.is_a?(String)
56
- @enum.get_values.by_value(value)
57
- elsif value.is_a?(ReeEnum::Value)
58
- @enum.get_values.each.find { _1 == value }
59
- end
60
-
61
- if enum_value.nil?
62
- raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}"
63
- end
64
-
65
- enum_value
66
- end
67
-
68
- contract(
69
- ReeEnum::Value,
70
- Kwargs[
71
- name: String,
72
- role: Nilor[Symbol, ArrayOf[Symbol]]
73
- ] => Or[Integer, String]
74
- )
75
- def db_dump(value, name:, role: nil)
76
- value.mapped_value
77
- end
78
-
79
- contract(
80
- Or[Integer, String],
81
- Kwargs[
82
- name: String,
83
- role: Nilor[Symbol, ArrayOf[Symbol]]
84
- ] => ReeEnum::Value
85
- ).throws(ReeMapper::CoercionError)
86
- def db_load(value, name:, role: nil)
87
- enum_val = @enum.get_values.by_mapped_value(value)
88
-
89
- if !enum_val
90
- raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}"
91
- end
92
-
93
- enum_val
94
- end
95
-
96
- private
97
-
98
- def enum_inspection
99
- @enum_inspect ||= truncate(@enum.get_values.each.map(&:to_s).inspect)
100
- end
101
-
102
- def truncate(str, limit = 180)
103
- return str if str.length <= limit
104
- "#{str[0..limit]}..."
105
- end
106
- end
107
-
108
- klass.new(self)
34
+ return @type_for_mapper if defined? @type_for_mapper
35
+
36
+ value_type = get_values.value_type
37
+
38
+ klass = if value_type == String
39
+ StringValueEnumMapper
40
+ elsif value_type == Integer
41
+ IntegerValueEnumMapper
42
+ else
43
+ raise NotImplementedError, "value_type #{value_type} is not supported"
109
44
  end
45
+
46
+ @type_for_mapper = klass.new(self)
110
47
  end
111
48
 
112
49
  def register_as_swagger_type
113
50
  swagger_type_registrator = ReeSwagger::RegisterType.new
114
51
 
52
+ definition = swagger_definition
53
+
115
54
  [:casters, :serializers].each do |kind|
116
55
  swagger_type_registrator.call(
117
56
  kind,
118
57
  type_for_mapper.class,
119
58
  ->(*) {
120
- {
121
- type: 'string',
122
- enum: get_values.each.map(&:to_s)
123
- }
59
+ definition
124
60
  }
125
61
  )
126
62
  end
@@ -137,6 +73,23 @@ module ReeEnum
137
73
  self.get_enum_name, type_for_mapper
138
74
  )
139
75
  end
76
+
77
+ def swagger_definition
78
+ value_type = get_values.value_type
79
+
80
+ type = if value_type == String
81
+ "string"
82
+ elsif value_type == Integer
83
+ "integer"
84
+ else
85
+ raise NotImplementedError, "value_type #{value_type} is not supported"
86
+ end
87
+
88
+ {
89
+ type: type,
90
+ enum: get_values.each.map(&:value)
91
+ }
92
+ end
140
93
  end
141
94
  end
142
95
  end
@@ -13,10 +13,16 @@ module ReeEnum::Enumerable
13
13
  include ReeEnum::Contractable
14
14
 
15
15
  RESTRICTED_METHODS = [
16
- :setup_enum, :get_values, :get_enum_name,
17
- :val, :self, :class, :alias
16
+ :setup_enum, :get_values, :get_enum_name, :val,
17
+ :__ENCODING__, :__LINE__, :__FILE__, :BEGIN, :END,
18
+ :alias, :and, :begin, :break, :case, :class, :def, :defined?,
19
+ :do, :else, :elsif, :end, :ensure, :false, :for, :if, :in,
20
+ :module, :next, :nil, :not, :or, :redo, :rescue, :retry, :return,
21
+ :self, :super, :then, :true, :undef, :unless, :until, :when, :while, :yield
18
22
  ].freeze
19
23
 
24
+ ALLOWED_VALUE_TO_METHOD_REGEXP = /^[a-z_]\w*[?!]?$/
25
+
20
26
  def setup_enum(enum_name)
21
27
  @values ||= ReeEnum::Values.new(self, enum_name)
22
28
  end
@@ -29,8 +35,13 @@ module ReeEnum::Enumerable
29
35
  @values&.enum_name
30
36
  end
31
37
 
32
- def val(value, mapped_value = value.to_s, method: value.to_sym)
33
- value = value.to_s
38
+ def val(value, mapped_value = nil, method: nil)
39
+ value = value.to_s if value.is_a?(Symbol)
40
+ mapped_value ||= value
41
+
42
+ if method.nil? && value.is_a?(String) && value.match?(ALLOWED_VALUE_TO_METHOD_REGEXP)
43
+ method = value.to_sym
44
+ end
34
45
 
35
46
  if RESTRICTED_METHODS.include?(method)
36
47
  raise ArgumentError.new("#{method.inspect} is not allowed as enum method")
@@ -38,12 +49,16 @@ module ReeEnum::Enumerable
38
49
 
39
50
  enum_value = @values.add(value, mapped_value, method)
40
51
 
41
- define_method(enum_value.method) do
42
- get_values.by_value(enum_value.value)
43
- end
52
+ if !method.nil?
53
+ class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
54
+ def #{method}
55
+ get_values.by_value(#{value.inspect}.freeze)
56
+ end
44
57
 
45
- define_singleton_method(enum_value.method) do
46
- get_values.by_value(enum_value.value)
58
+ def self.#{method}
59
+ get_values.by_value(#{value.inspect}.freeze)
60
+ end
61
+ RUBY
47
62
  end
48
63
 
49
64
  enum_value
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+ require_relative "base_enum_mapper"
3
+
4
+ class ReeEnum::IntegerValueEnumMapper < ReeEnum::BaseEnumMapper
5
+ contract(
6
+ ReeEnum::Value,
7
+ Kwargs[
8
+ name: String,
9
+ role: Nilor[Symbol, ArrayOf[Symbol]]
10
+ ] => Integer
11
+ )
12
+ def serialize(value, name:, role: nil)
13
+ value.value
14
+ end
15
+
16
+ contract(
17
+ Any,
18
+ Kwargs[
19
+ name: String,
20
+ role: Nilor[Symbol, ArrayOf[Symbol]]
21
+ ] => ReeEnum::Value
22
+ ).throws(ReeMapper::CoercionError)
23
+ def cast(value, name:, role: nil)
24
+ enum_value = case value
25
+ when Integer
26
+ @enum.get_values.by_value(value)
27
+ when String
28
+ value = Integer(value, exception: false)
29
+ if !value.nil?
30
+ @enum.get_values.by_value(value)
31
+ end
32
+ when ReeEnum::Value
33
+ @enum.get_values.each.find { _1 == value }
34
+ end
35
+
36
+ if enum_value.nil?
37
+ raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}"
38
+ end
39
+
40
+ enum_value
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+ require_relative "base_enum_mapper"
3
+
4
+ class ReeEnum::StringValueEnumMapper < ReeEnum::BaseEnumMapper
5
+ contract(
6
+ ReeEnum::Value,
7
+ Kwargs[
8
+ name: String,
9
+ role: Nilor[Symbol, ArrayOf[Symbol]]
10
+ ] => String
11
+ )
12
+ def serialize(value, name:, role: nil)
13
+ value.value
14
+ end
15
+
16
+ contract(
17
+ Any,
18
+ Kwargs[
19
+ name: String,
20
+ role: Nilor[Symbol, ArrayOf[Symbol]]
21
+ ] => ReeEnum::Value
22
+ ).throws(ReeMapper::CoercionError)
23
+ def cast(value, name:, role: nil)
24
+ enum_value = case value
25
+ when String
26
+ @enum.get_values.by_value(value)
27
+ when ReeEnum::Value
28
+ @enum.get_values.each.find { _1 == value }
29
+ end
30
+
31
+ if enum_value.nil?
32
+ raise ReeMapper::CoercionError, "`#{name}` should be one of #{enum_inspection}"
33
+ end
34
+
35
+ enum_value
36
+ end
37
+ end
@@ -3,7 +3,7 @@
3
3
  class ReeEnum::Value
4
4
  attr_reader :enum_class, :enum_name, :value, :method, :mapped_value
5
5
 
6
- contract(Class, Symbol, String, Or[Integer, String], Symbol => Any)
6
+ contract(Class, Symbol, Or[String, Integer], Or[Integer, String], Nilor[Symbol] => Any)
7
7
  def initialize(enum_class, enum_name, value, mapped_value, method)
8
8
  @enum_class = enum_class
9
9
  @enum_name = enum_name
@@ -13,25 +13,21 @@ class ReeEnum::Value
13
13
  end
14
14
 
15
15
  def to_s
16
- value
16
+ value.to_s
17
17
  end
18
18
 
19
19
  def as_json(*args)
20
- to_s
20
+ value
21
21
  end
22
22
 
23
23
  contract(Or[ReeEnum::Value, String, Symbol, Integer, Any] => Bool)
24
24
  def ==(compare)
25
25
  if compare.is_a?(self.class)
26
26
  value == compare.value
27
- elsif compare.is_a?(Symbol)
28
- value == compare.to_s
29
- elsif compare.is_a?(String)
30
- value == compare || mapped_value == compare
31
- elsif compare.is_a?(Integer)
32
- mapped_value == compare
27
+ elsif compare.is_a?(Symbol) && value.is_a?(String)
28
+ value.to_sym == compare
33
29
  else
34
- false
30
+ value == compare || mapped_value == compare
35
31
  end
36
32
  end
37
33
 
@@ -11,6 +11,11 @@ class ReeEnum::Values
11
11
  @collection_by_mapped_value = {}
12
12
  end
13
13
 
14
+ def value_type
15
+ raise ArgumentError, "value_type is not defined" unless defined?(@value_type)
16
+ @value_type
17
+ end
18
+
14
19
  def to_a
15
20
  @collection
16
21
  end
@@ -19,12 +24,13 @@ class ReeEnum::Values
19
24
  @collection.each(&)
20
25
  end
21
26
 
22
- contract(Or[Symbol, String] => Nilor[ReeEnum::Value])
27
+ contract(Or[Symbol, String, Integer] => Nilor[ReeEnum::Value])
23
28
  def by_value(value)
24
- @collection_by_value[value.to_s]
29
+ value = value.to_s if value.is_a?(Symbol)
30
+ @collection_by_value[value]
25
31
  end
26
32
 
27
- contract(Or[Symbol, String] => ReeEnum::Value).throws(ArgumentError)
33
+ contract(Or[Symbol, String, Integer] => ReeEnum::Value).throws(ArgumentError)
28
34
  def by_value!(value)
29
35
  by_value(value) ||
30
36
  (raise ArgumentError.new("constant for value #{value.inspect} is not found in #{self.inspect}"))
@@ -45,9 +51,15 @@ class ReeEnum::Values
45
51
  @collection.map(&:inspect).inspect
46
52
  end
47
53
 
48
- contract(String, Or[Integer, String], Symbol => ReeEnum::Value)
54
+ contract(Or[String, Integer], Or[Integer, String], Nilor[Symbol] => ReeEnum::Value)
49
55
  def add(value, mapped_value, method)
50
- if @collection.any? { _1.method == method }
56
+ if @value_type.nil?
57
+ @value_type = value.class
58
+ elsif @value_type != value.class
59
+ raise ArgumentError, "#{@klass}: value types should be the same for all enum values"
60
+ end
61
+
62
+ if !method.nil? && @collection.any? { _1.method == method }
51
63
  raise ArgumentError, "#{@klass}: method #{method.inspect} was already added"
52
64
  end
53
65
 
@@ -37,6 +37,17 @@ RSpec.describe ReeEnum::DSL do
37
37
  register_as_mapper_type
38
38
  end
39
39
 
40
+ class Numbers
41
+ include ReeEnum::DSL
42
+
43
+ enum :numbers
44
+
45
+ val 0, method: :zero
46
+ val 1, method: :one
47
+
48
+ register_as_mapper_type
49
+ end
50
+
40
51
  class Reflexives
41
52
  include ReeEnum::DSL
42
53
 
@@ -46,25 +57,39 @@ RSpec.describe ReeEnum::DSL do
46
57
  val :yourself
47
58
  end
48
59
 
60
+ class ContentTypes
61
+ include ReeEnum::DSL
62
+
63
+ enum :content_types
64
+
65
+ val "video/mp4"
66
+ val "image/png"
67
+
68
+ register_as_mapper_type
69
+ end
70
+
49
71
  class TestMapper
50
72
  include ReeMapper::DSL
51
73
 
52
74
  mapper :test_mapper do
75
+ link :numbers
53
76
  link :states
54
77
  link :types
55
78
  end
56
79
 
57
80
  class Dto
58
- attr_reader :type, :state
59
- def initialize(type, state)
81
+ attr_reader :type, :state, :number
82
+ def initialize(type, state, number)
60
83
  @type = type
61
84
  @state = state
85
+ @number = number
62
86
  end
63
87
  end
64
88
 
65
89
  build_mapper.use(:serialize).use(:cast).use(:db_dump).use(:db_load, dto: Dto) do
66
90
  types :type
67
91
  states :state
92
+ numbers :number
68
93
  end
69
94
  end
70
95
 
@@ -86,6 +111,8 @@ RSpec.describe ReeEnum::DSL do
86
111
  expect(o.second).to eq(1)
87
112
  expect(o.get_values.by_value(:first)).to eq(o.first)
88
113
  expect(o.get_values.by_value(:second)).to eq(o.second)
114
+ expect(o.get_values.by_value("first")).to eq(o.first)
115
+ expect(o.get_values.by_value("second")).to eq(o.second)
89
116
  expect(o.get_values.by_mapped_value(0)).to eq(o.first)
90
117
  expect(o.get_values.by_mapped_value(1)).to eq(o.second)
91
118
  expect(o.get_values.to_a).to eq([o.first, o.second])
@@ -108,11 +135,13 @@ RSpec.describe ReeEnum::DSL do
108
135
  mapper.serialize({
109
136
  state: TestReeEnum::States.first,
110
137
  type: TestReeEnum::Types.account,
138
+ number: TestReeEnum::Numbers.zero,
111
139
  })
112
140
  ).to eq(
113
141
  {
114
142
  state: 'first',
115
- type: 'account'
143
+ type: 'account',
144
+ number: 0,
116
145
  }
117
146
  )
118
147
 
@@ -120,6 +149,7 @@ RSpec.describe ReeEnum::DSL do
120
149
  mapper.cast({
121
150
  state: 'first',
122
151
  type: 'invalid',
152
+ number: 0,
123
153
  })
124
154
  }.to raise_error(ReeMapper::CoercionError, '`type` should be one of ["account"]')
125
155
 
@@ -127,11 +157,13 @@ RSpec.describe ReeEnum::DSL do
127
157
  mapper.cast({
128
158
  state: 'first',
129
159
  type: 'account',
160
+ number: 0,
130
161
  })
131
162
  ).to eq(
132
163
  {
133
164
  state: TestReeEnum::States.first,
134
- type: TestReeEnum::Types.account
165
+ type: TestReeEnum::Types.account,
166
+ number: TestReeEnum::Numbers.zero,
135
167
  }
136
168
  )
137
169
 
@@ -139,11 +171,27 @@ RSpec.describe ReeEnum::DSL do
139
171
  mapper.cast({
140
172
  state: TestReeEnum::States.first,
141
173
  type: TestReeEnum::Types.account,
174
+ number: TestReeEnum::Numbers.zero,
142
175
  })
143
176
  ).to eq(
144
177
  {
145
178
  state: TestReeEnum::States.first,
146
- type: TestReeEnum::Types.account
179
+ type: TestReeEnum::Types.account,
180
+ number: TestReeEnum::Numbers.zero,
181
+ }
182
+ )
183
+
184
+ expect(
185
+ mapper.cast({
186
+ state: TestReeEnum::States.first,
187
+ type: TestReeEnum::Types.account,
188
+ number: TestReeEnum::Numbers.zero,
189
+ })
190
+ ).to eq(
191
+ {
192
+ state: "first",
193
+ type: "account",
194
+ number: 0,
147
195
  }
148
196
  )
149
197
 
@@ -151,24 +199,31 @@ RSpec.describe ReeEnum::DSL do
151
199
  mapper.db_dump({
152
200
  state: TestReeEnum::States.first,
153
201
  type: TestReeEnum::Types.account,
202
+ number: TestReeEnum::Numbers.zero,
154
203
  })
155
204
  ).to eq(
156
205
  {
157
206
  state: 0,
158
- type: "account"
207
+ type: "account",
208
+ number: 0,
159
209
  }
160
210
  )
161
211
 
162
212
  dto = mapper.db_load({
163
213
  state: 0,
164
214
  type: "account",
215
+ number: 0,
165
216
  })
166
217
 
167
218
  expect(dto.state).to eq(TestReeEnum::States.first)
168
219
  expect(dto.state).to be_a(ReeEnum::Value)
169
220
  expect(dto.type).to eq(TestReeEnum::Types.account)
170
221
  expect(dto.type).to be_a(ReeEnum::Value)
222
+ expect(dto.number).to eq(TestReeEnum::Numbers.zero)
223
+ expect(dto.number).to be_a(ReeEnum::Value)
171
224
 
172
225
  expect(TestReeEnum::Reflexives.myself).to eq(:self)
226
+
227
+ expect(TestReeEnum::ContentTypes.method_defined?(:"video/mp4")).to be_falsey
173
228
  }
174
229
  end
@@ -6,14 +6,15 @@ class ReeHash::Slice
6
6
  fn :slice do
7
7
  link :build_filter_keys
8
8
  link 'ree_hash/contracts/hash_keys_contract', -> { HashKeysContract }
9
- def_error { MissingKeyErr }
10
- def_error { InvalidFilterKey }
11
9
  end
12
10
 
11
+ MissingKeyErr = Class.new(ArgumentError)
12
+ InvalidFilterKey = Class.new(ArgumentError)
13
+
13
14
  doc(<<~DOC)
14
15
  Replaces the hash with only the given keys.
15
16
  Returns a hash containing the removed key/value pairs.
16
-
17
+
17
18
  hash = { a: 1, b: {e: 2, f: 1}, c: 3, d: 4 }
18
19
  slice(hash, [:a, :b]) # => {a: 1, b: 2}
19
20
  slice(hash, [:a, b: [:e]]) # => {a: 1, b: {e: 2}}
@@ -17,7 +17,7 @@
17
17
  {
18
18
  "arg": "locale",
19
19
  "arg_type": "req",
20
- "type": "Symbol"
20
+ "type": "Or[Symbol, String]"
21
21
  }
22
22
  ]
23
23
  }
@@ -15,11 +15,11 @@ class ReeMapper::Integer < ReeMapper::AbstractType
15
15
  if value.is_a?(Integer)
16
16
  value
17
17
  elsif value.is_a?(String)
18
- begin
19
- Integer(value)
20
- rescue ArgumentError => e
18
+ value = Integer(value, exception: false)
19
+ if value.nil?
21
20
  raise ReeMapper::CoercionError, "`#{name}` is invalid integer"
22
21
  end
22
+ value
23
23
  else
24
24
  raise ReeMapper::TypeError, "`#{name}` should be an integer"
25
25
  end
@@ -3,9 +3,9 @@
3
3
  class ReeObject::ToHash
4
4
  include Ree::FnDSL
5
5
 
6
- fn :to_hash do
7
- def_error { RecursiveObjectErr }
8
- end
6
+ fn :to_hash
7
+
8
+ RecursiveObjectErr = Class.new(ArgumentError)
9
9
 
10
10
  BASIC_TYPES = [
11
11
  Date, Time, Numeric, String, FalseClass, TrueClass, NilClass, Symbol,
@@ -1,7 +1 @@
1
- Ree.add_error_types(
2
- :invalid_param,
3
- :not_found,
4
- :validation
5
- )
6
-
7
1
  Ree.set_performance_mode
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.72"
4
+ VERSION = "1.0.74"
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.72
4
+ version: 1.0.74
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-08-28 00:00:00.000000000 Z
11
+ date: 2023-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -809,9 +809,12 @@ files:
809
809
  - lib/ree_lib/packages/ree_enum/Package.schema.json
810
810
  - lib/ree_lib/packages/ree_enum/bin/console
811
811
  - lib/ree_lib/packages/ree_enum/package/ree_enum.rb
812
+ - lib/ree_lib/packages/ree_enum/package/ree_enum/base_enum_mapper.rb
812
813
  - lib/ree_lib/packages/ree_enum/package/ree_enum/contractable.rb
813
814
  - lib/ree_lib/packages/ree_enum/package/ree_enum/dsl.rb
814
815
  - lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb
816
+ - lib/ree_lib/packages/ree_enum/package/ree_enum/integer_value_enum_mapper.rb
817
+ - lib/ree_lib/packages/ree_enum/package/ree_enum/string_value_enum_mapper.rb
815
818
  - lib/ree_lib/packages/ree_enum/package/ree_enum/value.rb
816
819
  - lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb
817
820
  - lib/ree_lib/packages/ree_enum/spec/package_schema_spec.rb