ruby-enum 0.6.0 → 0.7.0

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: 4fc128cc7839208ced2d3cf393b21c82f3ebdfe6
4
- data.tar.gz: ce5e04b5b1d5e9756a4b4f761bb1d8f127d9e24c
3
+ metadata.gz: 971c1b5b0f1efc517293ebe5adfaed75bd2ef8cd
4
+ data.tar.gz: a7d4f6c03985bcd6ddee0e09938b4cd8dc860d1e
5
5
  SHA512:
6
- metadata.gz: 56ad33d14d0cf9e59f2237387e79422ce7b4cfbaf65fa47162bf1d60e6e3efeb843e321b0fa56f69059bfcef0506f4b6f3faab5d0168cdc756f8ef6ca760f291
7
- data.tar.gz: 4a5a8d5bf5b64eeb155f9d3f8b20d271e8d752dc52287e9623efff4db795ed23424cf084545946220b89724c3ac7882205c38bb604b98f79e0bf160f0e82455a
6
+ metadata.gz: 20ac5e36b84f00a29ae233b6e100747ae18e06264037ef98223d4026b900614f5522e7afc97dce9b8e4c9b2828b2c4de610ece759fb688d452df32b07b113d4c
7
+ data.tar.gz: e00bdf6c6296e281285da12c1bd92eb5a293adae78fe3e8faf24db098b237db9ab353fe6076f1cee4302107f5d0e1a6f72d14486825cdf279c762a1a3f5bda93
@@ -1,3 +1,7 @@
1
+ ### 0.7.0 (21/2/2017)
2
+
3
+ * [#3](https://github.com/dblock/ruby-enum/pull/13): Adds support for sub classing an Enum - [@laertispappas](https://github.com/laertispappas).
4
+
1
5
  ### 0.6.0 (12/5/2016)
2
6
 
3
7
  * [#12](https://github.com/dblock/ruby-enum/pull/12): A `Ruby::Enum::Errors::DuplicateKeyError` or a `Ruby::Enum::Errors::DuplciateKeyValyeError` will now be raised when duplicate keys / values are defined - [@laertispappas](https://github.com/laertispappas).
data/Gemfile CHANGED
@@ -2,6 +2,6 @@ source 'http://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rspec', '~> 3.4.0'
6
5
  gem 'rake'
7
- gem 'rubocop', '0.35.1'
6
+ gem 'rspec', '~> 3.4.0'
7
+ gem 'rubocop', '0.47.1'
@@ -1,22 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-enum (0.6.0)
4
+ ruby-enum (0.7.0)
5
5
  i18n
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
10
  ast (2.3.0)
11
- astrolabe (1.3.1)
12
- parser (~> 2.2)
13
- diff-lcs (1.2.5)
14
- i18n (0.7.0)
15
- parser (2.3.3.1)
11
+ diff-lcs (1.3)
12
+ i18n (0.8.0)
13
+ parser (2.4.0.0)
16
14
  ast (~> 2.2)
17
15
  powerpack (0.1.1)
18
- rainbow (2.1.0)
19
- rake (11.3.0)
16
+ rainbow (2.2.1)
17
+ rake (10.5.0)
20
18
  rspec (3.4.0)
21
19
  rspec-core (~> 3.4.0)
22
20
  rspec-expectations (~> 3.4.0)
@@ -30,15 +28,14 @@ GEM
30
28
  diff-lcs (>= 1.2.0, < 2.0)
31
29
  rspec-support (~> 3.4.0)
32
30
  rspec-support (3.4.1)
33
- rubocop (0.35.1)
34
- astrolabe (~> 1.3)
35
- parser (>= 2.2.3.0, < 3.0)
31
+ rubocop (0.47.1)
32
+ parser (>= 2.3.3.1, < 3.0)
36
33
  powerpack (~> 0.1)
37
34
  rainbow (>= 1.99.1, < 3.0)
38
35
  ruby-progressbar (~> 1.7)
39
- tins (<= 1.6.0)
36
+ unicode-display_width (~> 1.0, >= 1.0.1)
40
37
  ruby-progressbar (1.8.1)
41
- tins (1.6.0)
38
+ unicode-display_width (1.1.3)
42
39
 
43
40
  PLATFORMS
44
41
  ruby
@@ -46,8 +43,8 @@ PLATFORMS
46
43
  DEPENDENCIES
47
44
  rake
48
45
  rspec (~> 3.4.0)
49
- rubocop (= 0.35.1)
46
+ rubocop (= 0.47.1)
50
47
  ruby-enum!
51
48
 
52
49
  BUNDLED WITH
53
- 1.13.6
50
+ 1.14.4
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2013-2015 Daniel Doubrovkine.
3
+ Copyright (c) 2013-2016 Daniel Doubrovkine.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining
6
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -121,10 +121,10 @@ Colors.key('yellow')
121
121
  ```
122
122
 
123
123
 
124
- ## Duplicate enumerator keys or duplicate values
124
+ ### Duplicate enumerator keys or duplicate values
125
125
 
126
126
  Defining duplicate enums will raise a `Ruby::Enum::Errors::DuplicateKeyError`. Moreover a duplicate
127
- value is not allowed. Defining a duplicate value will raise a `Ruby::Enum::Errors::DuplicateKeyError`.
127
+ value is not allowed. Defining a duplicate value will raise a `Ruby::Enum::Errors::DuplicateValueError`.
128
128
  The following declarations will both raise an exception:
129
129
 
130
130
  ```ruby
@@ -136,7 +136,7 @@ The following declarations will both raise an exception:
136
136
  end
137
137
 
138
138
  # The following will raise a DuplicateValueError
139
- class Colots
139
+ class Colors
140
140
  include Ruby::Enum
141
141
 
142
142
  define :RED, 'red'
@@ -145,7 +145,12 @@ The following declarations will both raise an exception:
145
145
  ```
146
146
 
147
147
  The `DuplicateValueError` exception is thrown to be consistent with the unique key constraint.
148
- Since keys are unique there is no way to map values to keys using `Colors.key('red')`
148
+ Since keys are unique there is no way to map values to keys using `Colors.value('red')`
149
+
150
+ ### Inheritance behavior
151
+
152
+ Inheriting from a `Ruby::Enum` class, all defined enums in the parent class will be accessible in sub classes as well.
153
+ Sub classes can also provide extra enums as usual.
149
154
 
150
155
  ## Contributing
151
156
 
@@ -153,7 +158,7 @@ You're encouraged to contribute to this gem. See [CONTRIBUTING](CONTRIBUTING.md)
153
158
 
154
159
  ## Copyright and License
155
160
 
156
- Copyright (c) 2013-2015, Daniel Doubrovkine and [Contributors](CHANGELOG.md).
161
+ Copyright (c) 2013-2016, Daniel Doubrovkine and [Contributors](CHANGELOG.md).
157
162
 
158
163
  This project is licensed under the [MIT License](LICENSE.md).
159
164
 
@@ -10,6 +10,8 @@ module Ruby
10
10
  def self.included(base)
11
11
  base.extend Enumerable
12
12
  base.extend ClassMethods
13
+
14
+ base.private_class_method(:new)
13
15
  end
14
16
 
15
17
  module ClassMethods
@@ -33,20 +35,23 @@ module Ruby
33
35
  def validate_key!(key)
34
36
  return unless @_enum_hash.key?(key)
35
37
 
36
- fail Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
38
+ raise Ruby::Enum::Errors::DuplicateKeyError, name: name, key: key
37
39
  end
38
40
 
39
41
  def validate_value!(value)
40
42
  return unless @_enums_by_value.key?(value)
41
43
 
42
- fail Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
44
+ raise Ruby::Enum::Errors::DuplicateValueError, name: name, value: value
43
45
  end
44
46
 
45
47
  def const_missing(key)
46
- if @_enum_hash[key]
48
+ enum_instance = @_enum_hash && @_enum_hash[key]
49
+ if enum_instance
47
50
  @_enum_hash[key].value
51
+ elsif superclass.instance_variable_get(:@_enum_hash)
52
+ superclass.send(:const_missing, key)
48
53
  else
49
- fail Ruby::Enum::Errors::UninitializedConstantError, name: name, key: key
54
+ raise Ruby::Enum::Errors::UninitializedConstantError, name: name, key: key
50
55
  end
51
56
  end
52
57
 
@@ -26,7 +26,7 @@ module Ruby
26
26
 
27
27
  private
28
28
 
29
- BASE_KEY = 'ruby.enum.errors.messages' #:nodoc:
29
+ BASE_KEY = 'ruby.enum.errors.messages'.freeze #:nodoc:
30
30
 
31
31
  # Given the key of the specific error and the options hash, translate the
32
32
  # message.
@@ -1,5 +1,5 @@
1
1
  module Ruby
2
2
  module Enum
3
- VERSION = '0.6.0'
3
+ VERSION = '0.7.0'.freeze
4
4
  end
5
5
  end
Binary file
@@ -7,7 +7,38 @@ class Colors
7
7
  define :GREEN, 'green'
8
8
  end
9
9
 
10
+ class FirstSubclass < Colors
11
+ define :ORANGE, 'orange'
12
+ end
13
+
14
+ class SecondSubclass < FirstSubclass
15
+ define :PINK, 'pink'
16
+ end
17
+
10
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
+
11
42
  it 'returns an enum value' do
12
43
  expect(Colors::RED).to eq 'red'
13
44
  expect(Colors::GREEN).to eq 'green'
@@ -129,4 +160,13 @@ describe Ruby::Enum do
129
160
  end.to raise_error Ruby::Enum::Errors::DuplicateValueError, /The value red has already been defined./
130
161
  end
131
162
  end
163
+
164
+ describe 'Given a class that has not defined any enums' do
165
+ class EmptyEnums
166
+ include Ruby::Enum
167
+ end
168
+ it do
169
+ expect { EmptyEnums::ORANGE }.to raise_error Ruby::Enum::Errors::UninitializedConstantError
170
+ end
171
+ end
132
172
  end
data/tags ADDED
@@ -0,0 +1,54 @@
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
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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-05 00:00:00.000000000 Z
11
+ date: 2017-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -47,10 +47,12 @@ 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
50
51
  - ruby-enum.gemspec
51
52
  - spec/ruby-enum/enum_spec.rb
52
53
  - spec/ruby-enum/version_spec.rb
53
54
  - spec/spec_helper.rb
55
+ - tags
54
56
  homepage: http://github.com/dblock/ruby-enum
55
57
  licenses:
56
58
  - MIT
@@ -71,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
73
  version: 1.3.6
72
74
  requirements: []
73
75
  rubyforge_project:
74
- rubygems_version: 2.5.1
76
+ rubygems_version: 2.4.5.1
75
77
  signing_key:
76
78
  specification_version: 4
77
79
  summary: Enum-like behavior for Ruby.