abstractivator 0.0.29 → 0.0.30
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/abstractivator/enum.rb +19 -22
- data/lib/abstractivator/version.rb +1 -1
- data/spec/lib/abstractivator/enum_spec.rb +10 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34a14dfa085d8a1a7a5d462a509deed9424a9e35
|
4
|
+
data.tar.gz: 511e2fd85e5ab1a828c21f0ca252a3ca686bbb14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f503ac9376e4705618872262a237cb87cfd73fbe0063a7637451d1ad2e9cf5ce5ef556a688819ebaa7c1dc1beec22f8bdeb15ab620ce2d30a89e688196fbf942
|
7
|
+
data.tar.gz: 6ca46af5ec6309781d3b569a555b72325f8b2b98eabacc0f8b5864eca3cb1bff7d9eaa486832663c2c17296e1c05daab43d9252f5e19d18051f5022729c0dc43
|
data/lib/abstractivator/enum.rb
CHANGED
@@ -3,28 +3,37 @@ require 'abstractivator/enumerable_ext'
|
|
3
3
|
require 'delegate'
|
4
4
|
|
5
5
|
module Enum
|
6
|
+
|
7
|
+
attr_reader :value
|
8
|
+
|
9
|
+
def initialize(value)
|
10
|
+
@value = value
|
11
|
+
end
|
12
|
+
|
13
|
+
def inspect
|
14
|
+
"#<#{self.class.name} #{value.inspect}>"
|
15
|
+
end
|
16
|
+
alias_method :to_s, :inspect
|
17
|
+
|
6
18
|
def self.included(base)
|
7
19
|
base.extend ClassMethods
|
8
|
-
# base.extend Dsl
|
9
20
|
end
|
10
21
|
|
11
|
-
module Value; end # used to mark enum values
|
12
|
-
|
13
22
|
module ClassMethods
|
14
23
|
def values
|
15
|
-
|
24
|
+
constants.map{|sym| const_get(sym)}.reject{|x| x == Enum::ClassMethods}
|
16
25
|
end
|
17
26
|
|
18
27
|
def name_for(value)
|
19
|
-
|
28
|
+
constants.detect{|sym| const_get(sym) == value}
|
20
29
|
end
|
21
30
|
|
22
31
|
def from_symbol(sym)
|
23
|
-
safe_constantize("#{
|
32
|
+
safe_constantize("#{name}::#{sym.to_s.upcase}")
|
24
33
|
end
|
25
34
|
|
26
35
|
def from(x)
|
27
|
-
if x.is_a?(Enum
|
36
|
+
if x.is_a?(Enum)
|
28
37
|
x
|
29
38
|
else
|
30
39
|
values.find{|v| v.value == x}
|
@@ -54,23 +63,11 @@ end
|
|
54
63
|
def make_enum(*fields)
|
55
64
|
if fields.size == 1 && fields.first.is_a?(Hash) && fields.first.keys.all?{|f| f.is_a?(Symbol)}
|
56
65
|
fields = fields.first
|
57
|
-
|
66
|
+
Class.new do
|
58
67
|
include Enum
|
59
|
-
|
60
|
-
const_set(:Value,
|
61
|
-
Class.new do
|
62
|
-
include Enum::Value
|
63
|
-
attr_reader :enum_type, :value
|
64
|
-
define_method(:initialize) do |enum_type, value|
|
65
|
-
@enum_type, @value = enum_type, value
|
66
|
-
end
|
67
|
-
define_method(:inspect) do
|
68
|
-
"#<#{self.class.name} #{value.inspect}>"
|
69
|
-
end
|
70
|
-
alias_method :to_s, :inspect
|
71
|
-
end)
|
68
|
+
private_class_method :new
|
72
69
|
fields.each_pair do |k, v|
|
73
|
-
val =
|
70
|
+
val = new(v)
|
74
71
|
fld = k.to_s.upcase.to_sym
|
75
72
|
const_set(fld, val)
|
76
73
|
end
|
@@ -38,14 +38,18 @@ describe Enum do
|
|
38
38
|
end
|
39
39
|
describe '::from' do
|
40
40
|
it 'returns the typed version of the value' do
|
41
|
-
|
42
|
-
result = Container::Fruits.from(x)
|
41
|
+
result = Container::Fruits.from('apple')
|
43
42
|
expect(result).to eql Container::Fruits::APPLE
|
44
43
|
end
|
45
44
|
it 'works if the value is already typed' do
|
46
45
|
expect(Container::Fruits.from(Container::Fruits::APPLE)).to eql Container::Fruits::APPLE
|
47
46
|
end
|
48
47
|
end
|
48
|
+
describe '::new' do
|
49
|
+
it 'cannot be called' do
|
50
|
+
expect{Container::Fruits.new('durian')}.to raise_error NoMethodError
|
51
|
+
end
|
52
|
+
end
|
49
53
|
end
|
50
54
|
|
51
55
|
describe '#define_enum' do
|
@@ -58,10 +62,10 @@ describe '#define_enum' do
|
|
58
62
|
expect(Container::Vegetables::EGGPLANT.value).to eql 8
|
59
63
|
end
|
60
64
|
it 'values know their parent' do
|
61
|
-
expect(Container::Fruits::APPLE
|
62
|
-
expect(Container::Fruits::ORANGE
|
63
|
-
expect(Container::Vegetables::CUCUMBER
|
64
|
-
expect(Container::Vegetables::EGGPLANT
|
65
|
+
expect(Container::Fruits::APPLE).to be_a Container::Fruits
|
66
|
+
expect(Container::Fruits::ORANGE).to be_a Container::Fruits
|
67
|
+
expect(Container::Vegetables::CUCUMBER).to be_a Container::Vegetables
|
68
|
+
expect(Container::Vegetables::EGGPLANT).to be_a Container::Vegetables
|
65
69
|
end
|
66
70
|
it 'can define top level enumerations' do
|
67
71
|
expect(Meats.values.map(&:value)).to eql %w(bacon more_bacon)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abstractivator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Winton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|