abstractivator 0.0.27 → 0.0.28

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 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