rasti-types 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/lib/rasti/types.rb +2 -0
- data/lib/rasti/types/enum.rb +1 -4
- data/lib/rasti/types/typed_enum.rb +45 -0
- data/lib/rasti/types/version.rb +1 -1
- data/rasti-types.gemspec +2 -0
- data/spec/enum_spec.rb +2 -1
- data/spec/minitest_helper.rb +16 -0
- data/spec/typed_enum_spec.rb +27 -0
- metadata +33 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee88a26c1db0346a2be756ce54e9cb5f61cdb1cb251745c790d59427dcaeb2f2
|
4
|
+
data.tar.gz: f8c66a79f42446f8d64cc273a2457483b6722b0332c4dc68ccd7725f1cb8df37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9828d21e82cfbbc25c772d0988e1dbbb2a783227cd4404ff3becf2e2cd6305dc3ff4d50977b5167bf7f41450c19d885a134e9526edcb55f3bdf9aa11fa0437f9
|
7
|
+
data.tar.gz: 193f841ad283e619c53608a0de291f0352f7e5d73f769dbf9e9607e378b3e1245bb158b6d2e41fb77c1326f682f7bbe758ce766ca31ede1eb3d21103f9c8c3cc
|
data/lib/rasti/types.rb
CHANGED
data/lib/rasti/types/enum.rb
CHANGED
@@ -34,10 +34,7 @@ module Rasti
|
|
34
34
|
|
35
35
|
def define_getters
|
36
36
|
values.each do |value|
|
37
|
-
|
38
|
-
define_singleton_method getter_name do
|
39
|
-
value
|
40
|
-
end
|
37
|
+
define_singleton_method(Inflecto.underscore(value)) { value }
|
41
38
|
end
|
42
39
|
end
|
43
40
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Rasti
|
2
|
+
module Types
|
3
|
+
class TypedEnum
|
4
|
+
|
5
|
+
include Castable
|
6
|
+
|
7
|
+
def self.[](enum)
|
8
|
+
new enum
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(enum)
|
12
|
+
@enum = enum
|
13
|
+
define_getters
|
14
|
+
end
|
15
|
+
|
16
|
+
def values
|
17
|
+
enum.values
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"#{self.class}[#{enum}]"
|
22
|
+
end
|
23
|
+
alias_method :inspect, :to_s
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :enum
|
28
|
+
|
29
|
+
def valid?(value)
|
30
|
+
enum.include? value
|
31
|
+
end
|
32
|
+
|
33
|
+
def transform(value)
|
34
|
+
enum[value]
|
35
|
+
end
|
36
|
+
|
37
|
+
def define_getters
|
38
|
+
values.each do |value|
|
39
|
+
define_singleton_method(Inflecto.underscore(value)) { value }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/rasti/types/version.rb
CHANGED
data/rasti-types.gemspec
CHANGED
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'multi_require', '~> 1.0'
|
22
|
+
spec.add_runtime_dependency 'inflecto', '~> 0.0'
|
23
|
+
spec.add_runtime_dependency 'rasti-enum', '~> 1.0'
|
22
24
|
|
23
25
|
spec.add_development_dependency 'rake', '~> 12.0'
|
24
26
|
spec.add_development_dependency 'minitest', '~> 5.0', '< 5.11'
|
data/spec/enum_spec.rb
CHANGED
@@ -17,12 +17,13 @@ describe Rasti::Types::Enum do
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
it '
|
20
|
+
it 'Values' do
|
21
21
|
enum = Rasti::Types::Enum[:first_value, 'SecondValue', 'THIRD_VALUE']
|
22
22
|
|
23
23
|
enum.first_value.must_equal 'first_value'
|
24
24
|
enum.second_value.must_equal 'SecondValue'
|
25
25
|
enum.third_value.must_equal 'THIRD_VALUE'
|
26
|
+
enum.values.must_equal ['first_value', 'SecondValue', 'THIRD_VALUE']
|
26
27
|
end
|
27
28
|
|
28
29
|
end
|
data/spec/minitest_helper.rb
CHANGED
@@ -34,4 +34,20 @@ class Point
|
|
34
34
|
raise Rasti::Types::CompoundError, errors if errors.any?
|
35
35
|
end
|
36
36
|
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
module Colors
|
41
|
+
|
42
|
+
extend Rasti::Enum
|
43
|
+
|
44
|
+
class Red < Rasti::Enum::Value
|
45
|
+
end
|
46
|
+
|
47
|
+
class Green < Rasti::Enum::Value
|
48
|
+
end
|
49
|
+
|
50
|
+
class Blue < Rasti::Enum::Value
|
51
|
+
end
|
52
|
+
|
37
53
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Rasti::Types::TypedEnum do
|
4
|
+
|
5
|
+
let(:enum) { Rasti::Types::TypedEnum[Colors] }
|
6
|
+
|
7
|
+
['BLUE', 'GREEN', 'RED'].each do |value|
|
8
|
+
it "#{value.inspect} -> #{value}" do
|
9
|
+
enum.cast(value).must_equal Colors[value]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new, nil].each do |value|
|
14
|
+
it "#{value.inspect} -> CastError" do
|
15
|
+
error = proc { enum.cast(value) }.must_raise Rasti::Types::CastError
|
16
|
+
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::TypedEnum[Colors]"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'Values' do
|
21
|
+
enum.blue.must_equal Colors::Blue.new
|
22
|
+
enum.green.must_equal Colors::Green.new
|
23
|
+
enum.red.must_equal Colors::Red.new
|
24
|
+
enum.values.must_equal [enum.blue, enum.green, enum.red]
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasti-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_require
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: inflecto
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rasti-enum
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: rake
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -160,6 +188,7 @@ files:
|
|
160
188
|
- lib/rasti/types/string.rb
|
161
189
|
- lib/rasti/types/symbol.rb
|
162
190
|
- lib/rasti/types/time.rb
|
191
|
+
- lib/rasti/types/typed_enum.rb
|
163
192
|
- lib/rasti/types/uuid.rb
|
164
193
|
- lib/rasti/types/version.rb
|
165
194
|
- rasti-types.gemspec
|
@@ -178,6 +207,7 @@ files:
|
|
178
207
|
- spec/string_spec.rb
|
179
208
|
- spec/symbol_spec.rb
|
180
209
|
- spec/time_spec.rb
|
210
|
+
- spec/typed_enum_spec.rb
|
181
211
|
- spec/uuid_spec.rb
|
182
212
|
homepage: https://github.com/gabynaiman/rasti-types
|
183
213
|
licenses:
|
@@ -218,4 +248,5 @@ test_files:
|
|
218
248
|
- spec/string_spec.rb
|
219
249
|
- spec/symbol_spec.rb
|
220
250
|
- spec/time_spec.rb
|
251
|
+
- spec/typed_enum_spec.rb
|
221
252
|
- spec/uuid_spec.rb
|