ruby-enum 0.7.1 → 0.7.2

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