enums 1.1.0 → 1.1.1

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: c1fd2c8d5f02ac6908e4a728c5875e177f3b1d1e
4
- data.tar.gz: cde381d80361a980cc34825a29c897d5f3a604ff
3
+ metadata.gz: fb53c7f0aba659b47bf538728d3c984e10f227c6
4
+ data.tar.gz: 35d975e75d3325e1ae884ed310b11bf73baed647
5
5
  SHA512:
6
- metadata.gz: '09b36ca1dd6f1918839ab56ec2a0884777bb99a57e65aaff09a97e9d962baf3392cbd3907a70356e8226c257086b005ac6133ccdc56f26b8d26699320c6a3f7e'
7
- data.tar.gz: 273c1e400392057321bae3f78776ffad156a32beffa4ad661ea8135f59cb718f861795212036cb63c480f810d13c2a41ae36e87d11d7789c1ffb0d4f871f9a0d
6
+ metadata.gz: d232ae4c94f1a115b71cd9fa172e2b5f6ba607a08a79e13624f4c0d1b69bcc1528e10824d19dc4ac37b78a98b158ca1017fdadbf493fa8ed6fd2a79279701c0d
7
+ data.tar.gz: 0663413b82dff6ebc503219df199f3b1755d74df81515660877d7cf58766fdd0f36b7fc466d61e6e62edba1815b978ba41342d128144066e2a443b7e0250a44c
data/README.md CHANGED
@@ -44,11 +44,11 @@ Why? Why not? Discuss.
44
44
  ## Usage
45
45
 
46
46
  ``` ruby
47
- Enum.new( 'Color', :red, :green, :blue )
47
+ Enum.new( :Color, :red, :green, :blue )
48
48
  # or
49
- enum 'Color', :red, :green, :blue
49
+ enum :Color, :red, :green, :blue
50
50
  # or
51
- enum 'Color', [:red, :green, :blue]
51
+ enum :Color, [:red, :green, :blue]
52
52
  ```
53
53
 
54
54
 
@@ -131,11 +131,11 @@ color.is_a? Color #=> true
131
131
  Let's try another example:
132
132
 
133
133
  ``` ruby
134
- Enum.new( 'State', :fundraising, :expired_refund, :successful )
134
+ Enum.new( :State, :fundraising, :expired_refund, :successful )
135
135
  # or
136
- enum 'State', :fundraising, :expired_refund, :successful
136
+ enum :State, :fundraising, :expired_refund, :successful
137
137
  # or
138
- enum 'State', [:fundraising, :expired_refund, :successful]
138
+ enum :State, [:fundraising, :expired_refund, :successful]
139
139
 
140
140
 
141
141
  State.values #=> [0, 1, 2]
@@ -11,7 +11,7 @@ require 'enums/version' # note: let version always go first
11
11
  ## auto-create/builds enum class.
12
12
  ##
13
13
  ## Example:
14
- ## State = Enum.new( :fundraising, :expired_refund, :successful)
14
+ ## Enum.new( :State, :fundraising, :expired_refund, :successful)
15
15
  ## auto-creates/builds:
16
16
  ##
17
17
  ## class Enum
@@ -46,19 +46,29 @@ require 'enums/version' # note: let version always go first
46
46
  ## pp state.successful? #=> false
47
47
 
48
48
 
49
+
49
50
  module Safe
50
51
 
51
52
  ## note: use ClassMethods pattern for auto-including class methods
53
+ ## note ClassMethods module is called SafeHelper
52
54
  def self.included( klass )
53
- klass.extend( ClassMethods )
55
+ klass.extend( SafeHelper )
54
56
  end
55
- module ClassMethods; end
56
57
 
58
+ module SafeHelper; end
59
+ ## note: also extends (include a helper methods to Safe itself)
60
+ ## lets you use:
61
+ ## module Safe
62
+ ## enum :Color, :red, :green, :blue
63
+ ## end
64
+ extend SafeHelper
57
65
 
58
66
 
59
67
  ## base class for enum
60
68
  class Enum
61
69
  ## return a new Enum read-only class
70
+ attr_reader :key
71
+ attr_reader :value
62
72
 
63
73
  def initialize( key, value )
64
74
  @key = key
@@ -67,10 +77,7 @@ class Enum
67
77
  self
68
78
  end
69
79
 
70
- ## add read-only attribute readers
71
- ## just use attr_reader!!! - why? why not?
72
- def key() @key; end
73
- def value() @value; end
80
+
74
81
 
75
82
  def self.value( index )
76
83
  ## todo/fix: check for out-of-bound / unknown enum
@@ -80,6 +87,8 @@ class Enum
80
87
  members[ index ]
81
88
  end
82
89
 
90
+ def zero?() self == self.class.zero; end
91
+
83
92
  def self.zero
84
93
  members[0]
85
94
  end
@@ -157,14 +166,14 @@ RUBY
157
166
  end
158
167
  RUBY
159
168
 
160
- ## note: use Object for "namespacing"
161
- ## make all enums convenience converters (always) global
169
+ ## note: use Kernel for "namespacing"
170
+ ## make all enums Kernel convenience converters (always) global
162
171
  ## including uppercase methods (e.g. State(), Color(), etc.) does NOT work otherwise (with other module includes)
163
172
 
164
173
  ## add global convenience converter function
165
174
  ## e.g. State(0) is same as State.convert(0)
166
175
  ## Color(0) is same as Color.convert(0)
167
- Object.class_eval( <<RUBY )
176
+ Kernel.class_eval( <<RUBY )
168
177
  def #{class_name}( arg )
169
178
  #{class_name}.convert( arg )
170
179
  end
@@ -175,6 +184,7 @@ RUBY
175
184
  Safe.const_set( class_name, klass ) ## returns klass (plus sets global constant class name)
176
185
  end
177
186
 
187
+
178
188
  class << self
179
189
  alias_method :old_new, :new # note: store "old" orginal version of new
180
190
  alias_method :new, :build_class # replace original version with create
@@ -182,13 +192,13 @@ RUBY
182
192
  end # class Enum
183
193
 
184
194
 
185
- module ClassMethods
195
+ module SafeHelper
186
196
  def enum( class_name, *args )
187
197
  ########################################
188
198
  # note: lets you use:
189
- # enum 'Color', :red, :green, :blue
199
+ # enum :Color, :red, :green, :blue
190
200
  # -or-
191
- # enum 'Color', [:red, :green, :blue]
201
+ # enum :Color, [:red, :green, :blue]
192
202
  if args[0].is_a?( Array )
193
203
  keys = args[0]
194
204
  else
@@ -197,7 +207,7 @@ module ClassMethods
197
207
 
198
208
  Enum.new( class_name, *keys )
199
209
  end
200
- end # module ClassMethods
210
+ end # module SafeHelper
201
211
  end # module Safe
202
212
 
203
213
 
@@ -1,11 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
- ## note: use a (new) class Enums (with s!! at the end) for version info
4
- class Enums
3
+ ## note: use a (new) module Enums (with s!! at the end) for version info
4
+ ## why? avoids "pollution" Enum namespace with (library) version info etc.
5
+ module Enums
5
6
 
6
7
  MAJOR = 1
7
8
  MINOR = 1
8
- PATCH = 0
9
+ PATCH = 1
9
10
  VERSION = [MAJOR,MINOR,PATCH].join('.')
10
11
 
11
12
  def self.version
@@ -20,4 +21,4 @@ class Enums
20
21
  "#{File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )}"
21
22
  end
22
23
 
23
- end # class Enums
24
+ end # module Enums
@@ -8,28 +8,30 @@
8
8
  require 'helper'
9
9
 
10
10
 
11
- class TestEnum < MiniTest::Test
11
+ module Safe
12
+ ## Enum.new( 'State', :fundraising, :expired_refund, :successful )
13
+ enum :State, :fundraising, :expired_refund, :successful
12
14
 
13
- include Safe ## make all enums (and "convenience" converters) global
15
+ pp State
16
+ pp State(0)
14
17
 
18
+ puts "Safe.constants:"
19
+ pp Safe.constants #=> [:SafeHelper, :Enum, :State, :Color]
20
+ puts "Enum.constants:"
21
+ pp Enum.constants #=> []
22
+ end
15
23
 
16
- ## Enum.new( 'State', :fundraising, :expired_refund, :successful )
17
- enum 'State', :fundraising, :expired_refund, :successful
18
24
 
19
- pp State
20
- pp State(0)
25
+ class TestEnum < MiniTest::Test
26
+
27
+ include Safe ## make all enums (and "convenience" converters) global
21
28
 
22
29
  ## Enum.new( 'Color', :red, :green, :blue )
23
- enum 'Color', :red, :green, :blue
30
+ enum :Color, :red, :green, :blue
24
31
 
25
32
  pp Color
26
33
  pp Color(0)
27
34
 
28
- puts "Safe.constants:"
29
- pp Safe.constants #=> [:ClassMethods, :Enum, :State, :Color]
30
- puts "Enum.constants:"
31
- pp Enum.constants #=> []
32
-
33
35
 
34
36
  def test_state
35
37
  assert_equal [:FUNDRAISING, :EXPIRED_REFUND, :SUCCESSFUL], State.constants
@@ -71,6 +73,11 @@ def test_state
71
73
  assert_equal true, State(0) == State.zero
72
74
  assert_equal false, State(1) == State.zero
73
75
 
76
+ assert_equal true, State(0).zero?
77
+ assert_equal true, State.zero.zero?
78
+ assert_equal false, State(1).zero?
79
+ assert_equal false, State(2).zero?
80
+
74
81
  assert_equal State.fundraising, State.value(0)
75
82
  assert_equal State.fundraising, State.key(:fundraising)
76
83
  assert_equal State.fundraising, State[:fundraising]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enums
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerald Bauer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-07 00:00:00.000000000 Z
11
+ date: 2019-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc