abstractivator 0.0.29 → 0.0.30

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 348cdacd93250cedbb2e44760733ff5662432374
4
- data.tar.gz: eca9b1d0b3d908d82859e4842d2f709b263010f4
3
+ metadata.gz: 34a14dfa085d8a1a7a5d462a509deed9424a9e35
4
+ data.tar.gz: 511e2fd85e5ab1a828c21f0ca252a3ca686bbb14
5
5
  SHA512:
6
- metadata.gz: 814f84087892a9570caaeeb0158b964d6ff863281ffeb5a4e3ae3fc6dbbc5db0ea1706667fcad7275bea13efec1e1bc917c5fbeac47b143b348c0cf21ba851ab
7
- data.tar.gz: 31f49dfb24f94e2736227a3c65265a464e0eeac8398e5f1c189559f3a1a605f1e8df978e0337cc5941db5fd0da49c695a20883680e134290c90053ac8ddd9932
6
+ metadata.gz: f503ac9376e4705618872262a237cb87cfd73fbe0063a7637451d1ad2e9cf5ce5ef556a688819ebaa7c1dc1beec22f8bdeb15ab620ce2d30a89e688196fbf942
7
+ data.tar.gz: 6ca46af5ec6309781d3b569a555b72325f8b2b98eabacc0f8b5864eca3cb1bff7d9eaa486832663c2c17296e1c05daab43d9252f5e19d18051f5022729c0dc43
@@ -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
- self.constants.map{|sym| self.const_get(sym)}.reject{|x| x.is_a?(Class) || x.is_a?(Module)}
24
+ constants.map{|sym| const_get(sym)}.reject{|x| x == Enum::ClassMethods}
16
25
  end
17
26
 
18
27
  def name_for(value)
19
- self.constants.detect{|sym| self.const_get(sym) == value}
28
+ constants.detect{|sym| const_get(sym) == value}
20
29
  end
21
30
 
22
31
  def from_symbol(sym)
23
- safe_constantize("#{self.name}::#{sym.to_s.upcase}")
32
+ safe_constantize("#{name}::#{sym.to_s.upcase}")
24
33
  end
25
34
 
26
35
  def from(x)
27
- if x.is_a?(Enum::Value)
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
- Module.new do
66
+ Class.new do
58
67
  include Enum
59
- value_class =
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 = value_class.new(self, v)
70
+ val = new(v)
74
71
  fld = k.to_s.upcase.to_sym
75
72
  const_set(fld, val)
76
73
  end
@@ -1,3 +1,3 @@
1
1
  module Abstractivator
2
- VERSION = '0.0.29'
2
+ VERSION = '0.0.30'
3
3
  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
- x = 'apple'
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.enum_type).to eql Container::Fruits
62
- expect(Container::Fruits::ORANGE.enum_type).to eql Container::Fruits
63
- expect(Container::Vegetables::CUCUMBER.enum_type).to eql Container::Vegetables
64
- expect(Container::Vegetables::EGGPLANT.enum_type).to eql Container::Vegetables
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.29
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-17 00:00:00.000000000 Z
11
+ date: 2015-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler