ree_lib 1.0.73 → 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 +4 -4
- data/lib/ree_lib/packages/ree_enum/package/ree_enum/enumerable.rb +23 -11
- data/lib/ree_lib/packages/ree_enum/package/ree_enum/value.rb +1 -1
- data/lib/ree_lib/packages/ree_enum/package/ree_enum/values.rb +2 -2
- data/lib/ree_lib/packages/ree_enum/spec/ree_enum/dsl_spec.rb +14 -1
- data/lib/ree_lib/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db0e9f5e3c64d69ff4f6d4d4550ab6563bfe0bc9529333e21a1251503ad562b2
|
4
|
+
data.tar.gz: 02abcd3afb9f8155666b98abdb5a9f833b3affca8038c19b2322ab60be82e2db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07f42d6c784721984a1729cd38412c946fd8924982d98eff0158a91c4ce9f5c80ef94561e0ea9801a0e1df3baa177ef6bf7ae0db5c177c1f2960f118a339d797
|
7
|
+
data.tar.gz: 25c0ae598cdbfee90f4ea991705fd73328188f64f33bd2895635bff5d98dc527c2a209b40fa286208d327f0f50cd6e03e36b192b3b8ea2076166d685b9c227ac
|
@@ -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
|
-
:
|
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,25 +35,31 @@ module ReeEnum::Enumerable
|
|
29
35
|
@values&.enum_name
|
30
36
|
end
|
31
37
|
|
32
|
-
def val(value, mapped_value = nil, method:
|
38
|
+
def val(value, mapped_value = nil, method: nil)
|
33
39
|
value = value.to_s if value.is_a?(Symbol)
|
34
40
|
mapped_value ||= value
|
35
41
|
|
42
|
+
if method.nil? && value.is_a?(String) && value.match?(ALLOWED_VALUE_TO_METHOD_REGEXP)
|
43
|
+
method = value.to_sym
|
44
|
+
end
|
45
|
+
|
36
46
|
if RESTRICTED_METHODS.include?(method)
|
37
47
|
raise ArgumentError.new("#{method.inspect} is not allowed as enum method")
|
38
48
|
end
|
39
49
|
|
40
50
|
enum_value = @values.add(value, mapped_value, method)
|
41
51
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
52
|
+
if !method.nil?
|
53
|
+
class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
54
|
+
def #{method}
|
55
|
+
get_values.by_value(#{value.inspect}.freeze)
|
56
|
+
end
|
46
57
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
58
|
+
def self.#{method}
|
59
|
+
get_values.by_value(#{value.inspect}.freeze)
|
60
|
+
end
|
61
|
+
RUBY
|
62
|
+
end
|
51
63
|
|
52
64
|
enum_value
|
53
65
|
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, Or[String, Integer], 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
|
@@ -51,7 +51,7 @@ class ReeEnum::Values
|
|
51
51
|
@collection.map(&:inspect).inspect
|
52
52
|
end
|
53
53
|
|
54
|
-
contract(Or[String, Integer], Or[Integer, String], Symbol => ReeEnum::Value)
|
54
|
+
contract(Or[String, Integer], Or[Integer, String], Nilor[Symbol] => ReeEnum::Value)
|
55
55
|
def add(value, mapped_value, method)
|
56
56
|
if @value_type.nil?
|
57
57
|
@value_type = value.class
|
@@ -59,7 +59,7 @@ class ReeEnum::Values
|
|
59
59
|
raise ArgumentError, "#{@klass}: value types should be the same for all enum values"
|
60
60
|
end
|
61
61
|
|
62
|
-
if @collection.any? { _1.method == method }
|
62
|
+
if !method.nil? && @collection.any? { _1.method == method }
|
63
63
|
raise ArgumentError, "#{@klass}: method #{method.inspect} was already added"
|
64
64
|
end
|
65
65
|
|
@@ -57,13 +57,24 @@ RSpec.describe ReeEnum::DSL do
|
|
57
57
|
val :yourself
|
58
58
|
end
|
59
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
|
+
|
60
71
|
class TestMapper
|
61
72
|
include ReeMapper::DSL
|
62
73
|
|
63
74
|
mapper :test_mapper do
|
75
|
+
link :numbers
|
64
76
|
link :states
|
65
77
|
link :types
|
66
|
-
link :numbers
|
67
78
|
end
|
68
79
|
|
69
80
|
class Dto
|
@@ -212,5 +223,7 @@ RSpec.describe ReeEnum::DSL do
|
|
212
223
|
expect(dto.number).to be_a(ReeEnum::Value)
|
213
224
|
|
214
225
|
expect(TestReeEnum::Reflexives.myself).to eq(:self)
|
226
|
+
|
227
|
+
expect(TestReeEnum::ContentTypes.method_defined?(:"video/mp4")).to be_falsey
|
215
228
|
}
|
216
229
|
end
|
data/lib/ree_lib/version.rb
CHANGED