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