abstractivator 0.0.27 → 0.0.28

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: e8b4b8142e88b9765c903640aebb186dc0c2071c
4
- data.tar.gz: a167c975cb24aef9ef28eec2e33da0b2630921a7
3
+ metadata.gz: eb01795d640d7c7f0d8a422cbe77e0e6f9ce262e
4
+ data.tar.gz: 953bf0c7d6d6fd18e800b7fd22780e5b22f6217a
5
5
  SHA512:
6
- metadata.gz: 24bddba24e33849ba4058c32e20308679dad0999e7d425e6e2c00e8ca0f326c36aef73f979eeff9d698a09fbc8971208d8725f518fd8d34ac2d5e178a40000ca
7
- data.tar.gz: 6cb633bd0551aab119b11c641abf5e9fcd07124306cc41895d66d993ee37d71a1f413fe27a379e2f372a0367646435aa818e904ef4c1b80567c1a34eeff1df4c
6
+ metadata.gz: 0abda16e780a4dc57ddf5873b5a36e09d379b8e14c55e14ff081ba2d00de717fd03e57afc0bd3f90bf7d56202cb43a9551a6fd095a6e9f7c430f6f28345ba224
7
+ data.tar.gz: 022371561b2071ffbe820b25bc3cebddf3c12c169fe391094bb1f8e9c11410fba7fe82ecf225fec010e174054e1ad27a58c4f8fadeea27a2c9c848432544db51
@@ -10,7 +10,7 @@ module Enum
10
10
 
11
11
  module ClassMethods
12
12
  def values
13
- self.constants.map{|sym| self.const_get(sym)}.reject{|x| x == Enum::ClassMethods}
13
+ self.constants.map{|sym| self.const_get(sym)}.reject{|x| x.is_a?(Class) || x.is_a?(Module)}
14
14
  end
15
15
 
16
16
  def name_for(value)
@@ -22,7 +22,7 @@ module Enum
22
22
  end
23
23
 
24
24
  def from(x)
25
- values.find{|v| v == x}
25
+ values.find{|v| v.value == x}
26
26
  end
27
27
 
28
28
  private
@@ -37,23 +37,6 @@ module Enum
37
37
  end
38
38
  end
39
39
 
40
- module EnumMember
41
- attr_accessor :enum_type
42
- end
43
-
44
- class Object
45
- include EnumMember
46
- end
47
-
48
- class WrappedEnumValue < SimpleDelegator
49
- include EnumMember
50
- attr_reader :class # pure evil
51
- def initialize(value)
52
- __setobj__(value)
53
- @class = value.class
54
- end
55
- end
56
-
57
40
  def define_enum(name, *fields)
58
41
  if respond_to?(:const_set)
59
42
  const_set(name, make_enum(*fields))
@@ -67,9 +50,20 @@ def make_enum(*fields)
67
50
  fields = fields.first
68
51
  Module.new do
69
52
  include Enum
53
+ value_class =
54
+ const_set(:Value,
55
+ Class.new do
56
+ attr_reader :enum_type, :value
57
+ define_method(:initialize) do |enum_type, value|
58
+ @enum_type, @value = enum_type, value
59
+ end
60
+ define_method(:inspect) do
61
+ "#<#{self.class.name} #{value.inspect}>"
62
+ end
63
+ alias_method :to_s, :inspect
64
+ end)
70
65
  fields.each_pair do |k, v|
71
- val = v.frozen? ? WrappedEnumValue.new(v) : v
72
- val.enum_type = self
66
+ val = value_class.new(self, v)
73
67
  fld = k.to_s.upcase.to_sym
74
68
  const_set(fld, val)
75
69
  end
@@ -1,3 +1,3 @@
1
1
  module Abstractivator
2
- VERSION = '0.0.27'
2
+ VERSION = '0.0.28'
3
3
  end
@@ -39,21 +39,20 @@ describe Enum do
39
39
  describe '::from' do
40
40
  it 'returns the typed version of the value' do
41
41
  x = 'apple'
42
- expect(x.enum_type).to be_nil
43
42
  result = Container::Fruits.from(x)
44
- expect(result.enum_type).to eql Container::Fruits
43
+ expect(result).to eql Container::Fruits::APPLE
45
44
  end
46
45
  end
47
46
  end
48
47
 
49
48
  describe '#define_enum' do
50
49
  it 'defines an enum given an array of symbols' do
51
- expect(Container::Fruits::APPLE).to eql 'apple'
52
- expect(Container::Fruits::ORANGE).to eql 'orange'
50
+ expect(Container::Fruits::APPLE.value).to eql 'apple'
51
+ expect(Container::Fruits::ORANGE.value).to eql 'orange'
53
52
  end
54
53
  it 'defines an enum given a hash' do
55
- expect(Container::Vegetables::CUCUMBER).to eql 'Cucumis sativus'
56
- expect(Container::Vegetables::EGGPLANT).to eql 8
54
+ expect(Container::Vegetables::CUCUMBER.value).to eql 'Cucumis sativus'
55
+ expect(Container::Vegetables::EGGPLANT.value).to eql 8
57
56
  end
58
57
  it 'values know their parent' do
59
58
  expect(Container::Fruits::APPLE.enum_type).to eql Container::Fruits
@@ -62,7 +61,7 @@ describe '#define_enum' do
62
61
  expect(Container::Vegetables::EGGPLANT.enum_type).to eql Container::Vegetables
63
62
  end
64
63
  it 'can define top level enumerations' do
65
- expect(Meats.values).to eql %w(bacon more_bacon)
64
+ expect(Meats.values.map(&:value)).to eql %w(bacon more_bacon)
66
65
  end
67
66
  it 'raises an error when called with bad arguments' do
68
67
  expect{define_enum(:Stuff, 5)}.to raise_error /Arguments must be/
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abstractivator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.27
4
+ version: 0.0.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Winton