ruby-enum 0.7.1 → 0.7.2

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: ff88e3a9dd8dc2188f929ad3e84cc86a0fd313c3
4
- data.tar.gz: 66f8dd956d3eeb27fd2457c56f76a144c30a1518
3
+ metadata.gz: 47e52bdfbc7d70944470141e18c1629d058326c0
4
+ data.tar.gz: 3992c7e739aea0799d6adc820e03b6bba5f17357
5
5
  SHA512:
6
- metadata.gz: 8b4196088d70c8cfabf6e2adfe15a99744343dabc8b4275b26340314186a755375efac54900d1b4e61957ed13d7e818fcac860fd7dac6a04350efdbbf479f79d
7
- data.tar.gz: 409a290aa4ed199c6ec84fba971b33b4e176625c400ba313de111d7dacb3180f32a5ba83ace957f7e01875483b00de50ea7c9f884483f6df0b1d4d6c295c9685
6
+ metadata.gz: 79c51dec06a07ccb4b6bcbbfd18101798e885674bf0d3f6e95e7833f70c8d99485a87739d6e6b644f3f7d34e8488417b116aa3a6d4c2311343cb8fdd597eca46
7
+ data.tar.gz: a532c64b93a9ec0a44b68db66a81f6b206ee9d65c40f156ce91da89fd00a6124a61e2b59a1bc902ace03580cb79a74b4a09fdb77a4e5c0a2172c8f7dca81c035
@@ -1,3 +1,7 @@
1
+ ### 0.7.2 (15/3/2017)
2
+
3
+ * [#18](https://github.com/dblock/ruby-enum/pull/18): Adds support for non constant definition - [@laertispappas](https://github.com/laertispappas).
4
+
1
5
  ### 0.7.1 (23/2/2017)
2
6
 
3
7
  * [#16](https://github.com/dblock/ruby-enum/pull/16): Replaces const_missing method in favor of const_set - [@laertispappas](https://github.com/laertispappas).
@@ -1,20 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-enum (0.7.1)
4
+ ruby-enum (0.7.2)
5
5
  i18n
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- ast (2.3.0)
11
- diff-lcs (1.3)
12
- i18n (0.8.0)
13
- parser (2.4.0.0)
14
- ast (~> 2.2)
10
+ ast (2.4.0)
11
+ concurrent-ruby (1.0.5)
12
+ diff-lcs (1.2.5)
13
+ i18n (1.0.0)
14
+ concurrent-ruby (~> 1.0)
15
+ parser (2.4.0.2)
16
+ ast (~> 2.3)
15
17
  powerpack (0.1.1)
16
- rainbow (2.2.1)
17
- rake (10.5.0)
18
+ rainbow (2.2.2)
19
+ rake
20
+ rake (11.3.0)
18
21
  rspec (3.4.0)
19
22
  rspec-core (~> 3.4.0)
20
23
  rspec-expectations (~> 3.4.0)
@@ -34,8 +37,8 @@ GEM
34
37
  rainbow (>= 1.99.1, < 3.0)
35
38
  ruby-progressbar (~> 1.7)
36
39
  unicode-display_width (~> 1.0, >= 1.0.1)
37
- ruby-progressbar (1.8.1)
38
- unicode-display_width (1.1.3)
40
+ ruby-progressbar (1.9.0)
41
+ unicode-display_width (1.3.0)
39
42
 
40
43
  PLATFORMS
41
44
  ruby
@@ -47,4 +50,4 @@ DEPENDENCIES
47
50
  ruby-enum!
48
51
 
49
52
  BUNDLED WITH
50
- 1.14.4
53
+ 1.15.3
data/README.md CHANGED
@@ -10,6 +10,10 @@ Enum-like behavior for Ruby, heavily inspired by [this](http://www.rubyfleebie.c
10
10
 
11
11
  ## Usage
12
12
 
13
+ Enums can be defined and accessed either as constants or class methods. For example below we have two Ruby::Enum classes
14
+ where the first one (Colors) defines its enums and references them as constants. The second class (State) defines and
15
+ references its enums as class methods.
16
+
13
17
  ``` ruby
14
18
  class Colors
15
19
  include Ruby::Enum
@@ -17,6 +21,14 @@ class Colors
17
21
  define :RED, "red"
18
22
  define :GREEN, "green"
19
23
  end
24
+
25
+ # or for versions >= 0.7.2
26
+ class State
27
+ include Ruby::Enum
28
+
29
+ define :created, 'Created'
30
+ define :published, 'Published'
31
+ end
20
32
  ```
21
33
 
22
34
  ### Referencing
@@ -28,6 +40,13 @@ Colors::UNDEFINED # raises Ruby::Enum::Errors::UninitializedConstantError
28
40
  Colors.keys # [ :RED, :GREEN ]
29
41
  Colors.values # [ "red", "green" ]
30
42
  Colors.to_h # { :RED => "red", :GREEN => "green" }
43
+
44
+ State.created # "Created"
45
+ State.published # "Published"
46
+ State.undefined # NoMethodError is raised
47
+ State.keys # [ :created, :published ]
48
+ State.values # ["Created", "Published"]
49
+ State.to_h # { :created => 'Created', :published => 'Published' }
31
50
  ```
32
51
 
33
52
  ### All `Enumerable` methods are supported.
@@ -27,23 +27,19 @@ module Ruby
27
27
  validate_key!(key)
28
28
  validate_value!(value)
29
29
 
30
- new_instance = new(key, value)
31
- @_enum_hash[key] = new_instance
32
- @_enums_by_value[value] = new_instance
33
-
34
- const_set key, value
35
- end
36
-
37
- def validate_key!(key)
38
- return unless @_enum_hash.key?(key)
30
+ store_new_instance(key, value)
39
31
 
40
- raise Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
32
+ if upper?(key.to_s)
33
+ const_set key, value
34
+ else
35
+ define_singleton_method(key) { value }
36
+ end
41
37
  end
42
38
 
43
- def validate_value!(value)
44
- return unless @_enums_by_value.key?(value)
45
-
46
- raise Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
39
+ def store_new_instance(key, value)
40
+ new_instance = new(key, value)
41
+ @_enum_hash[key] = new_instance
42
+ @_enums_by_value[value] = new_instance
47
43
  end
48
44
 
49
45
  def const_missing(key)
@@ -128,6 +124,24 @@ module Ruby
128
124
  [key, enum.value]
129
125
  end]
130
126
  end
127
+
128
+ private
129
+
130
+ def upper?(s)
131
+ !/[[:upper:]]/.match(s).nil?
132
+ end
133
+
134
+ def validate_key!(key)
135
+ return unless @_enum_hash.key?(key)
136
+
137
+ raise Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
138
+ end
139
+
140
+ def validate_value!(value)
141
+ return unless @_enums_by_value.key?(value)
142
+
143
+ raise Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
144
+ end
131
145
  end
132
146
  end
133
147
  end
@@ -1,5 +1,5 @@
1
1
  module Ruby
2
2
  module Enum
3
- VERSION = '0.7.1'.freeze
3
+ VERSION = '0.7.2'.freeze
4
4
  end
5
5
  end
Binary file
@@ -16,29 +16,6 @@ class SecondSubclass < FirstSubclass
16
16
  end
17
17
 
18
18
  describe Ruby::Enum do
19
- describe 'Subclass behavior' do
20
- it 'contains the enums defined in the parent class' do
21
- expect(FirstSubclass::GREEN).to eq 'green'
22
- expect(FirstSubclass::RED).to eq 'red'
23
- end
24
-
25
- it 'contains its own enums' do
26
- expect(FirstSubclass::ORANGE).to eq 'orange'
27
- end
28
- it 'parent class should not have enums defined in child classes' do
29
- expect { Colors::ORANGE }.to raise_error Ruby::Enum::Errors::UninitializedConstantError
30
- end
31
- context 'Given a 2 level depth subclass' do
32
- subject { SecondSubclass }
33
- it 'contains its own enums and all the enums defined in the parent classes' do
34
- expect(subject::RED).to eq 'red'
35
- expect(subject::GREEN).to eq 'green'
36
- expect(subject::ORANGE).to eq 'orange'
37
- expect(subject::PINK).to eq 'pink'
38
- end
39
- end
40
- end
41
-
42
19
  it 'returns an enum value' do
43
20
  expect(Colors::RED).to eq 'red'
44
21
  expect(Colors::GREEN).to eq 'green'
@@ -177,4 +154,46 @@ describe Ruby::Enum do
177
154
 
178
155
  it { expect(Colors::RED).to eq 'red' }
179
156
  end
157
+
158
+ describe 'Subclass behavior' do
159
+ it 'contains the enums defined in the parent class' do
160
+ expect(FirstSubclass::GREEN).to eq 'green'
161
+ expect(FirstSubclass::RED).to eq 'red'
162
+ end
163
+
164
+ it 'contains its own enums' do
165
+ expect(FirstSubclass::ORANGE).to eq 'orange'
166
+ end
167
+ it 'parent class should not have enums defined in child classes' do
168
+ expect { Colors::ORANGE }.to raise_error Ruby::Enum::Errors::UninitializedConstantError
169
+ end
170
+ context 'Given a 2 level depth subclass' do
171
+ subject { SecondSubclass }
172
+ it 'contains its own enums and all the enums defined in the parent classes' do
173
+ expect(subject::RED).to eq 'red'
174
+ expect(subject::GREEN).to eq 'green'
175
+ expect(subject::ORANGE).to eq 'orange'
176
+ expect(subject::PINK).to eq 'pink'
177
+ end
178
+ end
179
+ end
180
+
181
+ describe 'non constant definitions' do
182
+ class States
183
+ include Ruby::Enum
184
+ define :created, 'Created'
185
+ define :published, 'Published'
186
+ end
187
+ subject { States }
188
+ it 'behaves like an enum' do
189
+ expect(subject.created).to eq 'Created'
190
+ expect(subject.published).to eq 'Published'
191
+
192
+ expect(subject.key?(:created)).to be true
193
+ expect(subject.key('Created')).to eq :created
194
+
195
+ expect(subject.value?('Created')).to be true
196
+ expect(subject.value(:created)).to eq 'Created'
197
+ end
198
+ end
180
199
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-22 00:00:00.000000000 Z
11
+ date: 2018-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -47,13 +47,11 @@ files:
47
47
  - lib/ruby-enum/errors/uninitialized_constant_error.rb
48
48
  - lib/ruby-enum/version.rb
49
49
  - lib/ruby_enum.rb
50
- - pkg/ruby-enum-0.7.0.gem
51
- - pkg/ruby-enum-0.7.1.gem
50
+ - pkg/ruby-enum-0.6.0.gem
52
51
  - ruby-enum.gemspec
53
52
  - spec/ruby-enum/enum_spec.rb
54
53
  - spec/ruby-enum/version_spec.rb
55
54
  - spec/spec_helper.rb
56
- - tags
57
55
  homepage: http://github.com/dblock/ruby-enum
58
56
  licenses:
59
57
  - MIT
@@ -74,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
72
  version: 1.3.6
75
73
  requirements: []
76
74
  rubyforge_project:
77
- rubygems_version: 2.4.5.1
75
+ rubygems_version: 2.6.13
78
76
  signing_key:
79
77
  specification_version: 4
80
78
  summary: Enum-like behavior for Ruby.
Binary file
Binary file
data/tags DELETED
@@ -1,54 +0,0 @@
1
- !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
2
- !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
3
- !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/
4
- !_TAG_PROGRAM_NAME Exuberant Ctags //
5
- !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/
6
- !_TAG_PROGRAM_VERSION 5.9~svn20110310 //
7
- Base lib/ruby-enum/errors/base.rb /^ class Base < StandardError$/;" c class:Ruby.Enum.Errors
8
- ClassMethods lib/ruby-enum/enum.rb /^ module ClassMethods$/;" m class:Ruby.Enum
9
- Colors spec/ruby-enum/enum_spec.rb /^class Colors$/;" c
10
- DuplicateKeyError lib/ruby-enum/errors/duplicate_key_error.rb /^ class DuplicateKeyError < Base$/;" c class:Ruby.Enum.Errors
11
- DuplicateValueError lib/ruby-enum/errors/duplicate_value_error.rb /^ class DuplicateValueError < Base$/;" c class:Ruby.Enum.Errors
12
- EmptyEnums spec/ruby-enum/enum_spec.rb /^ class EmptyEnums$/;" c
13
- Enum lib/ruby-enum/enum.rb /^ module Enum$/;" m class:Ruby
14
- Enum lib/ruby-enum/errors/base.rb /^ module Enum$/;" m class:Ruby
15
- Enum lib/ruby-enum/errors/duplicate_key_error.rb /^ module Enum$/;" m class:Ruby
16
- Enum lib/ruby-enum/errors/duplicate_value_error.rb /^ module Enum$/;" m class:Ruby
17
- Enum lib/ruby-enum/errors/uninitialized_constant_error.rb /^ module Enum$/;" m class:Ruby
18
- Enum lib/ruby-enum/version.rb /^ module Enum$/;" m class:Ruby
19
- Errors lib/ruby-enum/errors/base.rb /^ module Errors$/;" m class:Ruby.Enum
20
- Errors lib/ruby-enum/errors/duplicate_key_error.rb /^ module Errors$/;" m class:Ruby.Enum
21
- Errors lib/ruby-enum/errors/duplicate_value_error.rb /^ module Errors$/;" m class:Ruby.Enum
22
- Errors lib/ruby-enum/errors/uninitialized_constant_error.rb /^ module Errors$/;" m class:Ruby.Enum
23
- FirstSubclass spec/ruby-enum/enum_spec.rb /^class FirstSubclass < Colors$/;" c
24
- Ruby lib/ruby-enum/enum.rb /^module Ruby$/;" m
25
- Ruby lib/ruby-enum/errors/base.rb /^module Ruby$/;" m
26
- Ruby lib/ruby-enum/errors/duplicate_key_error.rb /^module Ruby$/;" m
27
- Ruby lib/ruby-enum/errors/duplicate_value_error.rb /^module Ruby$/;" m
28
- Ruby lib/ruby-enum/errors/uninitialized_constant_error.rb /^module Ruby$/;" m
29
- Ruby lib/ruby-enum/version.rb /^module Ruby$/;" m
30
- SecondSubclass spec/ruby-enum/enum_spec.rb /^class SecondSubclass < FirstSubclass$/;" c
31
- UninitializedConstantError lib/ruby-enum/errors/uninitialized_constant_error.rb /^ class UninitializedConstantError < Base$/;" c class:Ruby.Enum.Errors
32
- compose_message lib/ruby-enum/errors/base.rb /^ def compose_message(key, attributes = {})$/;" f class:Ruby.Enum.Errors.Base
33
- const_missing lib/ruby-enum/enum.rb /^ def const_missing(key)$/;" f class:Ruby.Enum.ClassMethods
34
- create_problem lib/ruby-enum/errors/base.rb /^ def create_problem(key, attributes)$/;" f class:Ruby.Enum.Errors.Base
35
- create_resolution lib/ruby-enum/errors/base.rb /^ def create_resolution(key, attributes)$/;" f class:Ruby.Enum.Errors.Base
36
- create_summary lib/ruby-enum/errors/base.rb /^ def create_summary(key, attributes)$/;" f class:Ruby.Enum.Errors.Base
37
- define lib/ruby-enum/enum.rb /^ def define(key, value)$/;" f class:Ruby.Enum.ClassMethods
38
- each lib/ruby-enum/enum.rb /^ def each(&block)$/;" f class:Ruby.Enum.ClassMethods
39
- included lib/ruby-enum/enum.rb /^ def self.included(base)$/;" F class:Ruby.Enum
40
- initialize lib/ruby-enum/enum.rb /^ def initialize(key, value)$/;" f class:Ruby.Enum
41
- initialize lib/ruby-enum/errors/duplicate_key_error.rb /^ def initialize(attrs)$/;" f class:Ruby.Enum.Errors.DuplicateKeyError
42
- initialize lib/ruby-enum/errors/duplicate_value_error.rb /^ def initialize(attrs)$/;" f class:Ruby.Enum.Errors.DuplicateValueError
43
- initialize lib/ruby-enum/errors/uninitialized_constant_error.rb /^ def initialize(attrs)$/;" f class:Ruby.Enum.Errors.UninitializedConstantError
44
- key lib/ruby-enum/enum.rb /^ def key(v)$/;" f class:Ruby.Enum.ClassMethods
45
- key? lib/ruby-enum/enum.rb /^ def key?(k)$/;" f class:Ruby.Enum.ClassMethods
46
- keys lib/ruby-enum/enum.rb /^ def keys$/;" f class:Ruby.Enum.ClassMethods
47
- parse lib/ruby-enum/enum.rb /^ def parse(k)$/;" f class:Ruby.Enum.ClassMethods
48
- to_h lib/ruby-enum/enum.rb /^ def to_h$/;" f class:Ruby.Enum.ClassMethods
49
- translate lib/ruby-enum/errors/base.rb /^ def translate(key, options)$/;" f class:Ruby.Enum.Errors.Base
50
- validate_key! lib/ruby-enum/enum.rb /^ def validate_key!(key)$/;" f class:Ruby.Enum.ClassMethods
51
- validate_value! lib/ruby-enum/enum.rb /^ def validate_value!(value)$/;" f class:Ruby.Enum.ClassMethods
52
- value lib/ruby-enum/enum.rb /^ def value(k)$/;" f class:Ruby.Enum.ClassMethods
53
- value? lib/ruby-enum/enum.rb /^ def value?(v)$/;" f class:Ruby.Enum.ClassMethods
54
- values lib/ruby-enum/enum.rb /^ def values$/;" f class:Ruby.Enum.ClassMethods