ruby-enum 0.6.0 → 0.7.0

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