ruby-enum 0.6.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +32 -6
  3. data/Dangerfile +4 -0
  4. data/Gemfile +14 -2
  5. data/Gemfile.lock +116 -33
  6. data/LICENSE.md +1 -1
  7. data/README.md +176 -64
  8. data/RELEASING.md +5 -12
  9. data/Rakefile +3 -1
  10. data/UPGRADING.md +44 -0
  11. data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc.png +0 -0
  12. data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_asc_disabled.png +0 -0
  13. data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_both.png +0 -0
  14. data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc.png +0 -0
  15. data/coverage/assets/0.12.3/DataTables-1.10.20/images/sort_desc_disabled.png +0 -0
  16. data/coverage/assets/0.12.3/application.css +1 -0
  17. data/coverage/assets/0.12.3/application.js +7 -0
  18. data/coverage/assets/0.12.3/colorbox/border.png +0 -0
  19. data/coverage/assets/0.12.3/colorbox/controls.png +0 -0
  20. data/coverage/assets/0.12.3/colorbox/loading.gif +0 -0
  21. data/coverage/assets/0.12.3/colorbox/loading_background.png +0 -0
  22. data/coverage/assets/0.12.3/favicon_green.png +0 -0
  23. data/coverage/assets/0.12.3/favicon_red.png +0 -0
  24. data/coverage/assets/0.12.3/favicon_yellow.png +0 -0
  25. data/coverage/assets/0.12.3/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  26. data/coverage/assets/0.12.3/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  27. data/coverage/assets/0.12.3/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  28. data/coverage/assets/0.12.3/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  29. data/coverage/assets/0.12.3/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  30. data/coverage/assets/0.12.3/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  31. data/coverage/assets/0.12.3/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  32. data/coverage/assets/0.12.3/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  33. data/coverage/assets/0.12.3/images/ui-icons_222222_256x240.png +0 -0
  34. data/coverage/assets/0.12.3/images/ui-icons_2e83ff_256x240.png +0 -0
  35. data/coverage/assets/0.12.3/images/ui-icons_454545_256x240.png +0 -0
  36. data/coverage/assets/0.12.3/images/ui-icons_888888_256x240.png +0 -0
  37. data/coverage/assets/0.12.3/images/ui-icons_cd0a0a_256x240.png +0 -0
  38. data/coverage/assets/0.12.3/loading.gif +0 -0
  39. data/coverage/assets/0.12.3/magnify.png +0 -0
  40. data/coverage/index.html +3841 -0
  41. data/lib/ruby-enum.rb +2 -0
  42. data/lib/ruby-enum/enum.rb +59 -21
  43. data/lib/ruby-enum/errors/base.rb +3 -1
  44. data/lib/ruby-enum/errors/duplicate_key_error.rb +2 -0
  45. data/lib/ruby-enum/errors/duplicate_value_error.rb +2 -0
  46. data/lib/ruby-enum/errors/uninitialized_constant_error.rb +2 -0
  47. data/lib/ruby-enum/version.rb +3 -1
  48. data/lib/ruby_enum.rb +2 -0
  49. data/pkg/ruby-enum-0.8.0.gem +0 -0
  50. data/ruby-enum.gemspec +3 -1
  51. data/spec/ruby-enum/enum_spec.rb +125 -9
  52. data/spec/ruby-enum/version_spec.rb +2 -0
  53. data/spec/spec_helper.rb +6 -0
  54. metadata +40 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 4fc128cc7839208ced2d3cf393b21c82f3ebdfe6
4
- data.tar.gz: ce5e04b5b1d5e9756a4b4f761bb1d8f127d9e24c
2
+ SHA256:
3
+ metadata.gz: 26cee9efd34000cd0b004832d0eaae6ba5b90a3668c039b7490c3b7c0605e965
4
+ data.tar.gz: 4d5b7744d335dc558f3953d0b9ad27d38d44b7a40219cbd29ad3f360e7d54100
5
5
  SHA512:
6
- metadata.gz: 56ad33d14d0cf9e59f2237387e79422ce7b4cfbaf65fa47162bf1d60e6e3efeb843e321b0fa56f69059bfcef0506f4b6f3faab5d0168cdc756f8ef6ca760f291
7
- data.tar.gz: 4a5a8d5bf5b64eeb155f9d3f8b20d271e8d752dc52287e9623efff4db795ed23424cf084545946220b89724c3ac7882205c38bb604b98f79e0bf160f0e82455a
6
+ metadata.gz: 982371ddb8393adf84259e32f20df8e69de71c2084e5dcd49d52e30a3c17941a5321dcac5ecb6f2aa194486963037e61034609d05ec1c3e1681599fe59fdd936
7
+ data.tar.gz: a69948eefae40413871fc3f4c4d49b218428c86a13eeeaba256d903337fb7e1d972fb4689bd6bd8ab9c4c58ac44e414d49a4ee3ee2bdddaf9e23deed47fbcbc4
@@ -1,24 +1,50 @@
1
- ### 0.6.0 (12/5/2016)
1
+ ### 0.9.0 (2021/01/21)
2
+
3
+ * [#34](https://github.com/dblock/ruby-enum/pull/34): Added support for Ruby 3.0 - [@dblock](https://github.com/dblock).
4
+ * [#29](https://github.com/dblock/ruby-enum/pull/29): Added superclass values when enumerating with `Ruby::Enum#values` - [@gi](https://github.com/gi).
5
+ * [#30](https://github.com/dblock/ruby-enum/pull/30): Default value to key - [@gi](https://github.com/gi).
6
+ * [#34](https://github.com/dblock/ruby-enum/pull/34): Replaced Travis-CI with Github Actions, added Danger PR linter - [@dblock](https://github.com/dblock).
7
+ * [#37](https://github.com/dblock/ruby-enum/pull/37): Added code coverage - [@dblock](https://github.com/dblock).
8
+
9
+ ### 0.8.0 (2020/03/27)
10
+
11
+ * [#22](https://github.com/dblock/ruby-enum/pull/22): Added `Ruby::Enum#each_key` and `Ruby::Enum#each_value` - [@dblock](https://github.com/dblock).
12
+ * [#22](https://github.com/dblock/ruby-enum/pull/22): Dropped support for Ruby 2.2 - [@dblock](https://github.com/dblock).
13
+ * [#22](https://github.com/dblock/ruby-enum/pull/22): Upgraded RuboCop to 0.80.1 - [@dblock](https://github.com/dblock).
14
+
15
+ ### 0.7.2 (2017/03/15)
16
+
17
+ * [#18](https://github.com/dblock/ruby-enum/pull/18): Added support for non constant definition - [@laertispappas](https://github.com/laertispappas).
18
+
19
+ ### 0.7.1 (2017/02/23)
20
+
21
+ * [#16](https://github.com/dblock/ruby-enum/pull/16): Replaced `const_missing` with `const_set` - [@laertispappas](https://github.com/laertispappas).
22
+
23
+ ### 0.7.0 (2017/02/21)
24
+
25
+ * [#3](https://github.com/dblock/ruby-enum/pull/13): Added support for subclassing an Enum - [@laertispappas](https://github.com/laertispappas).
26
+
27
+ ### 0.6.0 (2016/05/12)
2
28
 
3
29
  * [#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).
4
30
 
5
- ### 0.5.0 (11/20/2015)
31
+ ### 0.5.0 (2015/11/20)
6
32
 
7
33
  * [#8](https://github.com/dblock/ruby-enum/pull/8): Added `Ruby::Enum#key`, `Ruby::Enum#value`, `Ruby::Enum#key?`, and `Ruby::Enum#value?` - [@dmolesUC3](https://github.com/dmolesUC3).
8
34
 
9
- ### 0.4.0 (6/29/2014)
35
+ ### 0.4.0 (2014/06/29)
10
36
 
11
37
  * [#5](https://github.com/dblock/ruby-enum/pull/5): Mixed in `Enumerable` - [@kgann](https://github.com/kgann).
12
38
 
13
- ### 0.3.0 (5/19/2014)
39
+ ### 0.3.0 (2014/05/19)
14
40
 
15
41
  * [#4](https://github.com/dblock/ruby-enum/pull/4): Added `Ruby::Enum#map` - [@ArnaudRinquin](https://github.com/ArnaudRinquin).
16
42
 
17
- ### 0.2.1 (5/15/2013)
43
+ ### 0.2.1 (2013/05/15)
18
44
 
19
45
  * Added `Ruby::Enum#values`, `Ruby::Enum#keys` and `Ruby::Enum#to_h` - [@dblock](https://github.com/dblock).
20
46
  * A `Ruby::Enum::Errors::UninitializedConstantError` will now be raised when referencing an undefined enum - [@dblock](https://github.com/dblock).
21
47
 
22
- ### 0.1.0 (5/14/2013)
48
+ ### 0.1.0 (2013/05/14)
23
49
 
24
50
  * Initial public release, live-coded during [May 2013 NYC.rb](http://code.dblock.org/your-first-ruby-gem) - [@dblock](https://github.com/dblock).
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ changelog.check!
4
+ toc.check!
data/Gemfile CHANGED
@@ -1,7 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'http://rubygems.org'
2
4
 
3
5
  gemspec
4
6
 
5
- gem 'rspec', '~> 3.4.0'
6
7
  gem 'rake'
7
- gem 'rubocop', '0.35.1'
8
+
9
+ group :development, :test do
10
+ gem 'danger'
11
+ gem 'danger-changelog', '0.6.1'
12
+ gem 'danger-toc', '0.2.0'
13
+ gem 'rspec', '~> 3.0'
14
+ gem 'rubocop', '0.80.1'
15
+ end
16
+
17
+ group :test do
18
+ gem 'simplecov', require: false
19
+ end
@@ -1,53 +1,136 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-enum (0.6.0)
4
+ ruby-enum (0.9.0)
5
5
  i18n
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
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)
16
- ast (~> 2.2)
17
- powerpack (0.1.1)
18
- rainbow (2.1.0)
19
- rake (11.3.0)
20
- rspec (3.4.0)
21
- rspec-core (~> 3.4.0)
22
- rspec-expectations (~> 3.4.0)
23
- rspec-mocks (~> 3.4.0)
24
- rspec-core (3.4.4)
25
- rspec-support (~> 3.4.0)
26
- rspec-expectations (3.4.0)
10
+ activesupport (6.1.0)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 1.6, < 2)
13
+ minitest (>= 5.1)
14
+ tzinfo (~> 2.0)
15
+ zeitwerk (~> 2.3)
16
+ addressable (2.7.0)
17
+ public_suffix (>= 2.0.2, < 5.0)
18
+ ast (2.4.2)
19
+ claide (1.0.3)
20
+ claide-plugins (0.9.2)
21
+ cork
22
+ nap
23
+ open4 (~> 1.3)
24
+ colored2 (3.1.2)
25
+ concurrent-ruby (1.1.7)
26
+ cork (0.3.0)
27
+ colored2 (~> 3.1)
28
+ danger (8.2.1)
29
+ claide (~> 1.0)
30
+ claide-plugins (>= 0.9.2)
31
+ colored2 (~> 3.1)
32
+ cork (~> 0.1)
33
+ faraday (>= 0.9.0, < 2.0)
34
+ faraday-http-cache (~> 2.0)
35
+ git (~> 1.7)
36
+ kramdown (~> 2.3)
37
+ kramdown-parser-gfm (~> 1.0)
38
+ no_proxy_fix
39
+ octokit (~> 4.7)
40
+ terminal-table (~> 1)
41
+ danger-changelog (0.6.1)
42
+ danger-plugin-api (~> 1.0)
43
+ danger-plugin-api (1.0.0)
44
+ danger (> 2.0)
45
+ danger-toc (0.2.0)
46
+ activesupport
47
+ danger-plugin-api (~> 1.0)
48
+ kramdown
49
+ diff-lcs (1.3)
50
+ docile (1.3.5)
51
+ faraday (1.3.0)
52
+ faraday-net_http (~> 1.0)
53
+ multipart-post (>= 1.2, < 3)
54
+ ruby2_keywords
55
+ faraday-http-cache (2.2.0)
56
+ faraday (>= 0.8)
57
+ faraday-net_http (1.0.0)
58
+ git (1.8.1)
59
+ rchardet (~> 1.8)
60
+ i18n (1.8.7)
61
+ concurrent-ruby (~> 1.0)
62
+ jaro_winkler (1.5.4)
63
+ kramdown (2.3.0)
64
+ rexml
65
+ kramdown-parser-gfm (1.1.0)
66
+ kramdown (~> 2.0)
67
+ minitest (5.14.3)
68
+ multipart-post (2.1.1)
69
+ nap (1.1.0)
70
+ no_proxy_fix (0.1.2)
71
+ octokit (4.20.0)
72
+ faraday (>= 0.9)
73
+ sawyer (~> 0.8.0, >= 0.5.3)
74
+ open4 (1.3.4)
75
+ parallel (1.20.1)
76
+ parser (3.0.0.0)
77
+ ast (~> 2.4.1)
78
+ public_suffix (4.0.6)
79
+ rainbow (3.0.0)
80
+ rake (13.0.1)
81
+ rchardet (1.8.0)
82
+ rexml (3.2.4)
83
+ rspec (3.9.0)
84
+ rspec-core (~> 3.9.0)
85
+ rspec-expectations (~> 3.9.0)
86
+ rspec-mocks (~> 3.9.0)
87
+ rspec-core (3.9.1)
88
+ rspec-support (~> 3.9.1)
89
+ rspec-expectations (3.9.1)
27
90
  diff-lcs (>= 1.2.0, < 2.0)
28
- rspec-support (~> 3.4.0)
29
- rspec-mocks (3.4.1)
91
+ rspec-support (~> 3.9.0)
92
+ rspec-mocks (3.9.1)
30
93
  diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.4.0)
32
- rspec-support (3.4.1)
33
- rubocop (0.35.1)
34
- astrolabe (~> 1.3)
35
- parser (>= 2.2.3.0, < 3.0)
36
- powerpack (~> 0.1)
37
- rainbow (>= 1.99.1, < 3.0)
94
+ rspec-support (~> 3.9.0)
95
+ rspec-support (3.9.2)
96
+ rubocop (0.80.1)
97
+ jaro_winkler (~> 1.5.1)
98
+ parallel (~> 1.10)
99
+ parser (>= 2.7.0.1)
100
+ rainbow (>= 2.2.2, < 4.0)
101
+ rexml
38
102
  ruby-progressbar (~> 1.7)
39
- tins (<= 1.6.0)
40
- ruby-progressbar (1.8.1)
41
- tins (1.6.0)
103
+ unicode-display_width (>= 1.4.0, < 1.7)
104
+ ruby-progressbar (1.11.0)
105
+ ruby2_keywords (0.0.2)
106
+ sawyer (0.8.2)
107
+ addressable (>= 2.3.5)
108
+ faraday (> 0.8, < 2.0)
109
+ simplecov (0.21.2)
110
+ docile (~> 1.1)
111
+ simplecov-html (~> 0.11)
112
+ simplecov_json_formatter (~> 0.1)
113
+ simplecov-html (0.12.3)
114
+ simplecov_json_formatter (0.1.2)
115
+ terminal-table (1.8.0)
116
+ unicode-display_width (~> 1.1, >= 1.1.1)
117
+ tzinfo (2.0.4)
118
+ concurrent-ruby (~> 1.0)
119
+ unicode-display_width (1.6.1)
120
+ zeitwerk (2.4.2)
42
121
 
43
122
  PLATFORMS
44
123
  ruby
45
124
 
46
125
  DEPENDENCIES
126
+ danger
127
+ danger-changelog (= 0.6.1)
128
+ danger-toc (= 0.2.0)
47
129
  rake
48
- rspec (~> 3.4.0)
49
- rubocop (= 0.35.1)
130
+ rspec (~> 3.0)
131
+ rubocop (= 0.80.1)
50
132
  ruby-enum!
133
+ simplecov
51
134
 
52
135
  BUNDLED WITH
53
- 1.13.6
136
+ 2.1.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-2021 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
@@ -2,158 +2,270 @@ Ruby::Enum
2
2
  ==========
3
3
 
4
4
  [![Gem Version](http://img.shields.io/gem/v/ruby-enum.svg)](http://badge.fury.io/rb/ruby-enum)
5
- [![Build Status](http://img.shields.io/travis/dblock/ruby-enum.svg)](https://travis-ci.org/dblock/ruby-enum)
6
- [![Dependency Status](https://gemnasium.com/dblock/ruby-enum.svg)](https://gemnasium.com/dblock/ruby-enum)
5
+ [![Build Status](https://github.com/dblock/ruby-enum/workflows/test/badge.svg?branch=master)](https://github.com/dblock/ruby-enum/actions)
7
6
  [![Code Climate](https://codeclimate.com/github/dblock/ruby-enum.svg)](https://codeclimate.com/github/dblock/ruby-enum)
8
7
 
9
- Enum-like behavior for Ruby, heavily inspired by [this](http://www.rubyfleebie.com/enumerations-and-ruby) and improved upon [another blog post](http://code.dblock.org/how-to-define-enums-in-ruby).
8
+ Enum-like behavior for Ruby, heavily inspired by [this](http://www.rubyfleebie.com/enumerations-and-ruby), and improved upon [another blog post](http://code.dblock.org/how-to-define-enums-in-ruby).
9
+
10
+ ## Table of Contents
11
+
12
+ - [Usage](#usage)
13
+ - [Constants](#constants)
14
+ - [Class Methods](#class-methods)
15
+ - [Default Value](#default-value)
16
+ - [Enumerating](#enumerating)
17
+ - [Iterating](#iterating)
18
+ - [Mapping](#mapping)
19
+ - [Reducing](#reducing)
20
+ - [Sorting](#sorting)
21
+ - [Hashing](#hashing)
22
+ - [Retrieving keys and values](#retrieving-keys-and-values)
23
+ - [Mapping keys to values](#mapping-keys-to-values)
24
+ - [Mapping values to keys](#mapping-values-to-keys)
25
+ - [Duplicate enumerator keys or duplicate values](#duplicate-enumerator-keys-or-duplicate-values)
26
+ - [Inheritance](#inheritance)
27
+ - [Contributing](#contributing)
28
+ - [Copyright and License](#copyright-and-license)
29
+ - [Related Projects](#related-projects)
10
30
 
11
31
  ## Usage
12
32
 
33
+ Enums can be defined and accessed either as constants, or class methods, which is a matter of preference.
34
+
35
+ ### Constants
36
+
37
+ Define enums, and reference them as constants.
38
+
13
39
  ``` ruby
14
- class Colors
40
+ class OrderState
15
41
  include Ruby::Enum
16
42
 
17
- define :RED, "red"
18
- define :GREEN, "green"
43
+ define :CREATED, 'created'
44
+ define :PAID, 'paid'
19
45
  end
20
46
  ```
21
47
 
22
- ### Referencing
48
+ ``` ruby
49
+ OrderState::CREATED # 'created'
50
+ OrderState::PAID # 'paid'
51
+ OrderState::UNKNOWN # raises Ruby::Enum::Errors::UninitializedConstantError
52
+ OrderState.keys # [ :CREATED, :PAID ]
53
+ OrderState.values # [ 'created', 'paid' ]
54
+ OrderState.to_h # { :CREATED => 'created', :PAID => 'paid' }
55
+ ```
56
+
57
+ ### Class Methods
58
+
59
+ Define enums, and reference them as class methods.
23
60
 
24
61
  ``` ruby
25
- Colors::RED # "red"
26
- Colors::GREEN # "green"
27
- Colors::UNDEFINED # raises Ruby::Enum::Errors::UninitializedConstantError
28
- Colors.keys # [ :RED, :GREEN ]
29
- Colors.values # [ "red", "green" ]
30
- Colors.to_h # { :RED => "red", :GREEN => "green" }
62
+ class OrderState
63
+ include Ruby::Enum
64
+
65
+ define :created, 'created'
66
+ define :paid, 'paid'
67
+ end
31
68
  ```
32
69
 
33
- ### All `Enumerable` methods are supported.
70
+ ```ruby
71
+ OrderState.created # 'created'
72
+ OrderState.paid # 'paid'
73
+ OrderState.undefined # NoMethodError is raised
74
+ OrderState.keys # [ :created, :paid ]
75
+ OrderState.values # ['created', 'paid']
76
+ OrderState.to_h # { :created => 'created', :paid => 'paid' }
77
+ ```
78
+
79
+ ### Default Value
80
+
81
+ The value is optional. If unspecified, the value will default to the key.
82
+
83
+ ``` ruby
84
+ class OrderState
85
+ include Ruby::Enum
86
+
87
+ define :UNSPECIFIED
88
+ define :unspecified
89
+ end
90
+ ```
91
+
92
+ ``` ruby
93
+ OrderState::UNSPECIFIED # :UNSPECIFIED
94
+ OrderState.unspecified # :unspecified
95
+ ```
96
+
97
+ ### Enumerating
98
+
99
+ Enums support all `Enumerable` methods.
34
100
 
35
101
  #### Iterating
36
102
 
37
103
  ``` ruby
38
- Colors.each do |key, enum|
39
- # key and enum.key is :RED, :GREEN
40
- # enum.value is "red", "green"
104
+ OrderState.each do |key, enum|
105
+ # key and enum.key are :CREATED, :PAID
106
+ # enum.value is 'created', 'paid'
107
+ end
108
+ ```
109
+
110
+ ``` ruby
111
+ OrderState.each_key do |key|
112
+ # :CREATED, :PAID
113
+ end
114
+ ```
115
+
116
+ ``` ruby
117
+ OrderState.each_value do |value|
118
+ # 'created', 'paid'
41
119
  end
42
120
  ```
43
121
 
44
122
  #### Mapping
45
123
 
46
124
  ``` ruby
47
- Colors.map do |key, enum|
48
- # key and enum.key is :RED, :GREEN
49
- # enum.value is "red", "green"
125
+ OrderState.map do |key, enum|
126
+ # key and enum.key are :CREATED, :PAID
127
+ # enum.value is 'created', 'paid'
50
128
  [enum.value, key]
51
129
  end
52
130
 
53
- # => [ ['red', :RED], ['green', :GREEN] ]
131
+ # => [ ['created', :CREATED], ['paid', :PAID] ]
54
132
  ```
55
133
 
56
134
  #### Reducing
57
135
 
58
136
  ``` ruby
59
- Colors.reduce([]) do |arr, (key, enum)|
60
- # key and enum.key is :RED, :GREEN
61
- # enum.value is "red", "green"
137
+ OrderState.reduce([]) do |arr, (key, enum)|
138
+ # key and enum.key are :CREATED, :PAID
139
+ # enum.value is 'created', 'paid'
62
140
  arr << [enum.value, key]
63
141
  end
64
142
 
65
- # => [ ['red', :RED], ['green', :GREEN] ]
143
+ # => [ ['created', :CREATED], ['paid', :PAID] ]
66
144
  ```
67
145
 
68
146
  #### Sorting
147
+
69
148
  ``` ruby
70
- Colors.sort_by do |key, enum|
71
- # key and enum.key is :RED, :GREEN
72
- # enum.value is "red", "green"
73
- enum.value
149
+ OrderState.sort_by do |key, enum|
150
+ # key and enum.key are :CREATED, :PAID
151
+ # enum.value is 'created', 'paid'
152
+ enum.value.length
74
153
  end
75
154
 
76
- # => [ [:GREEN, #<Colors:...>], [:RED, #<Colors:...>] ]
155
+ # => [[:PAID, #<OrderState:0x0 @key=:PAID, @value="paid">], [:CREATED, #<OrderState:0x1 @key=:CREATED, @value="created">]]
77
156
  ```
78
157
 
79
- ### Several hash-like methods are supported.
158
+ ### Hashing
159
+
160
+ Several hash-like methods are supported.
80
161
 
81
162
  #### Retrieving keys and values
82
163
 
83
164
  ``` ruby
84
- Colors.keys
85
- # => [:RED, :GREEN]
165
+ OrderState.keys
166
+ # => [:CREATED, :PAID]
86
167
 
87
- Colors.values
88
- # => ["red", "green"]
168
+ OrderState.values
169
+ # => ['created', 'paid']
89
170
  ```
90
171
 
91
172
  #### Mapping keys to values
92
173
 
93
174
  ``` ruby
94
- Colors.key?(:RED)
175
+ OrderState.key?(:CREATED)
95
176
  # => true
96
177
 
97
- Colors.value(:RED)
98
- # => "red"
178
+ OrderState.value(:CREATED)
179
+ # => 'created'
99
180
 
100
- Colors.key?(:BLUE)
181
+ OrderState.key?(:FAILED)
101
182
  # => false
102
183
 
103
- Colors.value(:BLUE)
184
+ OrderState.value(:FAILED)
104
185
  # => nil
105
186
  ```
106
187
 
107
188
  #### Mapping values to keys
108
189
 
109
190
  ``` ruby
110
- Colors.value?('green')
191
+ OrderState.value?('paid')
111
192
  # => true
112
193
 
113
- Colors.key('green')
114
- # => :GREEN
194
+ OrderState.key('paid')
195
+ # => :PAID
115
196
 
116
- Colors.value?('yellow')
197
+ OrderState.value?('failed')
117
198
  # => false
118
199
 
119
- Colors.key('yellow')
200
+ OrderState.key('failed')
120
201
  # => nil
121
202
  ```
122
203
 
204
+ ### Duplicate enumerator keys or duplicate values
123
205
 
124
- ## Duplicate enumerator keys or duplicate values
206
+ Defining duplicate enums raises `Ruby::Enum::Errors::DuplicateKeyError`.
125
207
 
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`.
128
- The following declarations will both raise an exception:
208
+ ```ruby
209
+ class OrderState
210
+ include Ruby::Enum
211
+
212
+ define :CREATED, 'created'
213
+ define :CREATED, 'recreated' # raises DuplicateKeyError
214
+ end
215
+ ```
216
+
217
+ Defining a duplicate value raises `Ruby::Enum::Errors::DuplicateValueError`.
129
218
 
130
219
  ```ruby
131
- class Colors
132
- include Ruby::Enum
220
+ class OrderState
221
+ include Ruby::Enum
133
222
 
134
- define :RED, "red"
135
- define :RED, "my red" # will raise a DuplicateKeyError exception
136
- end
223
+ define :CREATED, 'created'
224
+ define :RECREATED, 'created' # raises DuplicateValueError
225
+ end
226
+ ```
137
227
 
138
- # The following will raise a DuplicateValueError
139
- class Colots
140
- include Ruby::Enum
228
+ The `DuplicateValueError` exception is raised to be consistent with the unique key constraint. Since keys are unique, there needs to be a way to map values to keys using `OrderState.value('created')`.
141
229
 
142
- define :RED, 'red'
143
- define :SOME, 'red' # Boom
144
- end
230
+ ### Inheritance
231
+
232
+ When inheriting from a `Ruby::Enum` class, all defined enums in the parent class will be accessible in sub classes as well. Sub classes can also provide extra enums, as usual.
233
+
234
+ ``` ruby
235
+ class OrderState
236
+ include Ruby::Enum
237
+
238
+ define :CREATED, 'CREATED'
239
+ define :PAID, 'PAID'
240
+ end
241
+
242
+ class ShippedOrderState < OrderState
243
+ define :PREPARED, 'PREPARED'
244
+ define :SHIPPED, 'SHIPPED'
245
+ end
246
+ ```
247
+
248
+ ``` ruby
249
+ ShippedOrderState::CREATED # 'CREATED'
250
+ ShippedOrderState::PAID # 'PAID'
251
+ ShippedOrderState::PREPARED # 'PREPARED'
252
+ ShippedOrderState::SHIPPED # 'SHIPPED'
145
253
  ```
146
254
 
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')`
255
+ The `values` class method will enumerate the values from all base classes.
256
+
257
+ ``` ruby
258
+ OrderState.values # ['CREATED', 'PAID']
259
+ ShippedOrderState.values # ['CREATED', 'PAID', 'PREPARED', SHIPPED']
260
+ ```
149
261
 
150
262
  ## Contributing
151
263
 
152
- You're encouraged to contribute to this gem. See [CONTRIBUTING](CONTRIBUTING.md) for details.
264
+ You're encouraged to contribute to ruby-enum. See [CONTRIBUTING](CONTRIBUTING.md) for details.
153
265
 
154
266
  ## Copyright and License
155
267
 
156
- Copyright (c) 2013-2015, Daniel Doubrovkine and [Contributors](CHANGELOG.md).
268
+ Copyright (c) 2013-2021, Daniel Doubrovkine and [Contributors](CHANGELOG.md).
157
269
 
158
270
  This project is licensed under the [MIT License](LICENSE.md).
159
271