renum 1.0.2 → 1.2.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.
- data/{website/index.txt → README.textile} +19 -0
- data/Rakefile +20 -5
- data/VERSION +1 -0
- data/lib/renum.rb +7 -0
- data/lib/renum/enumerated_value.rb +10 -0
- data/lib/renum/enumerated_value_type_factory.rb +5 -4
- data/renum.gemspec +47 -0
- data/spec/renum_spec.rb +77 -34
- metadata +15 -38
- data/History.txt +0 -23
- data/License.txt +0 -20
- data/Manifest.txt +0 -28
- data/README.txt +0 -1
- data/config/hoe.rb +0 -71
- data/config/requirements.rb +0 -17
- data/lib/renum/version.rb +0 -9
- data/log/debug.log +0 -0
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/script/txt2html +0 -74
- data/setup.rb +0 -1585
- data/spec/spec.opts +0 -1
- data/tasks/deployment.rake +0 -34
- data/tasks/environment.rake +0 -7
- data/tasks/rspec.rake +0 -26
- data/tasks/website.rake +0 -17
- data/website/index.html +0 -183
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/screen.css +0 -138
- data/website/template.rhtml +0 -52
@@ -115,6 +115,25 @@ h2. License
|
|
115
115
|
|
116
116
|
This code is free to use under the terms of the MIT license.
|
117
117
|
|
118
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
119
|
+
a copy of this software and associated documentation files (the
|
120
|
+
"Software"), to deal in the Software without restriction, including
|
121
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
122
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
123
|
+
permit persons to whom the Software is furnished to do so, subject to
|
124
|
+
the following conditions:
|
125
|
+
|
126
|
+
The above copyright notice and this permission notice shall be
|
127
|
+
included in all copies or substantial portions of the Software.
|
128
|
+
|
129
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
130
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
131
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
132
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
133
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
134
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
135
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
136
|
+
|
118
137
|
h2. Contact
|
119
138
|
|
120
139
|
Renum was created by John D. Hume. Comments are welcome. Send an email to duelin dot markers at gmail or "contact me via my blog":http://elhumidor.blogspot.com/.
|
data/Rakefile
CHANGED
@@ -1,7 +1,22 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec/rake/spectask'
|
3
3
|
|
4
|
-
|
4
|
+
Spec::Rake::SpecTask.new do |t|
|
5
|
+
end
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
begin
|
10
|
+
require 'jeweler'
|
11
|
+
Jeweler::Tasks.new do |s|
|
12
|
+
s.name = "renum"
|
13
|
+
s.summary = "provides a readable but terse enum facility for Ruby"
|
14
|
+
s.email = "duelin.markers@gmail.com"
|
15
|
+
s.homepage = "http://github.com/duelinmarkers/renum"
|
16
|
+
s.description = "provides a readable but terse enum facility for Ruby"
|
17
|
+
s.authors = ["John Hume"]
|
18
|
+
s.rubyforge_project = "renum"
|
19
|
+
end
|
20
|
+
rescue LoadError
|
21
|
+
puts "Jeweler or a dependency not available. To install: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
22
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.2.0
|
data/lib/renum.rb
CHANGED
@@ -1,7 +1,14 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
2
|
require 'renum/enumerated_value_type_factory'
|
3
3
|
|
4
|
+
# Requiring 'renum' mixes the Renum module into both the main Object and
|
5
|
+
# Module, so it can be called from anywhere that you might reasonably
|
6
|
+
# define an enumeration with an implicit receiver.
|
4
7
|
module Renum
|
8
|
+
|
9
|
+
# Figures out whether the new enumeration will live in Object or the
|
10
|
+
# receiving Module, then delegates to EnumeratedValueTypeFactory#create for
|
11
|
+
# all the real work.
|
5
12
|
def enum type_name, values = :defined_in_block, &block
|
6
13
|
nest = self.is_a?(Module) ? self : Object
|
7
14
|
EnumeratedValueTypeFactory.create(nest, type_name, values, &block)
|
@@ -1,6 +1,11 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
|
3
3
|
module Renum
|
4
|
+
|
5
|
+
# This is the superclass of all enumeration classes.
|
6
|
+
# An enumeration class is Enumerable over its values and also delegates []
|
7
|
+
# to the values array.
|
8
|
+
# Values are also comparable, sorting into the order in which they're declared.
|
4
9
|
class EnumeratedValue
|
5
10
|
|
6
11
|
class << self
|
@@ -9,6 +14,7 @@ module Renum
|
|
9
14
|
|
10
15
|
def_delegators :values, :each, :[]
|
11
16
|
|
17
|
+
# Returns an array of values in the order they're declared.
|
12
18
|
def values
|
13
19
|
@values ||= []
|
14
20
|
end
|
@@ -25,10 +31,14 @@ module Renum
|
|
25
31
|
self.class.values << self
|
26
32
|
end
|
27
33
|
|
34
|
+
# Returns the fully qualified constant referring to this value.
|
35
|
+
# Don't override this if you're using Renum with the constantize_attribute
|
36
|
+
# plugin, which relies on this behavior.
|
28
37
|
def to_s
|
29
38
|
"#{self.class}::#{name}"
|
30
39
|
end
|
31
40
|
|
41
|
+
# Sorts enumerated values into the order in which they're declared.
|
32
42
|
def <=> other
|
33
43
|
index <=> other.index
|
34
44
|
end
|
@@ -18,10 +18,11 @@ module Renum
|
|
18
18
|
setup_for_definition_in_block(klass) if values == :defined_in_block
|
19
19
|
klass.class_eval &block if block_given?
|
20
20
|
if values == :defined_in_block
|
21
|
-
klass.block_defined_values.each do |value_name, init_args|
|
21
|
+
klass.block_defined_values.each do |value_name, init_args, instance_block|
|
22
22
|
value = klass.new(value_name)
|
23
23
|
klass.const_set(value_name, value)
|
24
|
-
value.
|
24
|
+
value.instance_eval &instance_block if instance_block
|
25
|
+
value.init *init_args if value.respond_to? :init
|
25
26
|
end
|
26
27
|
teardown_from_definition_in_block(klass)
|
27
28
|
else
|
@@ -37,8 +38,8 @@ module Renum
|
|
37
38
|
@block_defined_values ||= []
|
38
39
|
end
|
39
40
|
|
40
|
-
def self.method_missing value_name, *init_args
|
41
|
-
block_defined_values << [value_name, init_args]
|
41
|
+
def self.method_missing value_name, *init_args, &instance_block
|
42
|
+
block_defined_values << [value_name, init_args, instance_block]
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
data/renum.gemspec
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{renum}
|
5
|
+
s.version = "1.2.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["John Hume"]
|
9
|
+
s.date = %q{2009-09-01}
|
10
|
+
s.description = %q{provides a readable but terse enum facility for Ruby}
|
11
|
+
s.email = %q{duelin.markers@gmail.com}
|
12
|
+
s.extra_rdoc_files = [
|
13
|
+
"README.textile"
|
14
|
+
]
|
15
|
+
s.files = [
|
16
|
+
"README.textile",
|
17
|
+
"Rakefile",
|
18
|
+
"VERSION",
|
19
|
+
"lib/renum.rb",
|
20
|
+
"lib/renum/enumerated_value.rb",
|
21
|
+
"lib/renum/enumerated_value_type_factory.rb",
|
22
|
+
"renum.gemspec",
|
23
|
+
"spec/renum_spec.rb",
|
24
|
+
"spec/spec_helper.rb"
|
25
|
+
]
|
26
|
+
s.has_rdoc = true
|
27
|
+
s.homepage = %q{http://github.com/duelinmarkers/renum}
|
28
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
29
|
+
s.require_paths = ["lib"]
|
30
|
+
s.rubyforge_project = %q{renum}
|
31
|
+
s.rubygems_version = %q{1.3.1}
|
32
|
+
s.summary = %q{provides a readable but terse enum facility for Ruby}
|
33
|
+
s.test_files = [
|
34
|
+
"spec/renum_spec.rb",
|
35
|
+
"spec/spec_helper.rb"
|
36
|
+
]
|
37
|
+
|
38
|
+
if s.respond_to? :specification_version then
|
39
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
40
|
+
s.specification_version = 2
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
43
|
+
else
|
44
|
+
end
|
45
|
+
else
|
46
|
+
end
|
47
|
+
end
|
data/spec/renum_spec.rb
CHANGED
@@ -2,34 +2,6 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
enum :Status, [ :NOT_STARTED, :IN_PROGRESS, :COMPLETE ]
|
4
4
|
|
5
|
-
module MyNamespace
|
6
|
-
enum :FooValue, %w( Bar Baz Bat )
|
7
|
-
end
|
8
|
-
|
9
|
-
enum :Color, [ :RED, :GREEN, :BLUE ] do
|
10
|
-
def abbr
|
11
|
-
name[0..0]
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
enum :Size do
|
16
|
-
Small("Really really tiny")
|
17
|
-
Medium("Sort of in the middle")
|
18
|
-
Large("Quite big")
|
19
|
-
|
20
|
-
attr_reader :description
|
21
|
-
|
22
|
-
def init description
|
23
|
-
@description = description
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
enum :HairColor do
|
28
|
-
BLONDE()
|
29
|
-
BRUNETTE()
|
30
|
-
RED()
|
31
|
-
end
|
32
|
-
|
33
5
|
describe "basic enum" do
|
34
6
|
|
35
7
|
it "creates a class for the value type" do
|
@@ -67,25 +39,54 @@ describe "basic enum" do
|
|
67
39
|
end
|
68
40
|
end
|
69
41
|
|
42
|
+
module MyNamespace
|
43
|
+
enum :FooValue, %w( Bar Baz Bat )
|
44
|
+
end
|
45
|
+
|
70
46
|
describe "nested enum" do
|
71
47
|
it "is namespaced in the containing module or class" do
|
72
48
|
MyNamespace::FooValue::Bar.class.should == MyNamespace::FooValue
|
73
49
|
end
|
74
50
|
end
|
75
51
|
|
52
|
+
enum :Color, [ :RED, :GREEN, :BLUE ] do
|
53
|
+
def abbr
|
54
|
+
name[0..0]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
76
58
|
describe "enum with a block" do
|
77
59
|
it "can define additional instance methods" do
|
78
60
|
Color::RED.abbr.should == "R"
|
79
61
|
end
|
80
62
|
end
|
81
63
|
|
64
|
+
enum :Size do
|
65
|
+
Small("Really really tiny")
|
66
|
+
Medium("Sort of in the middle")
|
67
|
+
Large("Quite big")
|
68
|
+
Unknown()
|
69
|
+
|
70
|
+
attr_reader :description
|
71
|
+
|
72
|
+
def init description = nil
|
73
|
+
@description = description || "NO DESCRIPTION GIVEN"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
enum :HairColor do
|
78
|
+
BLONDE()
|
79
|
+
BRUNETTE()
|
80
|
+
RED()
|
81
|
+
end
|
82
|
+
|
82
83
|
describe "enum with no values array and values declared in the block" do
|
83
|
-
it "provides
|
84
|
+
it "provides another way to declare values where an init method can take extra params" do
|
84
85
|
Size::Small.description.should == "Really really tiny"
|
85
86
|
end
|
86
87
|
|
87
88
|
it "works the same as the basic form with respect to ordering" do
|
88
|
-
Size.values.should == [Size::Small, Size::Medium, Size::Large]
|
89
|
+
Size.values.should == [Size::Small, Size::Medium, Size::Large, Size::Unknown]
|
89
90
|
end
|
90
91
|
|
91
92
|
it "responds as expected to arbitrary method calls, in spite of using method_missing for value definition" do
|
@@ -95,14 +96,56 @@ describe "enum with no values array and values declared in the block" do
|
|
95
96
|
it "supports there being no extra data and no init() method defined, if you don't need them" do
|
96
97
|
HairColor::BLONDE.name.should == "BLONDE"
|
97
98
|
end
|
99
|
+
|
100
|
+
it "calls the init method even if no arguments are provided" do
|
101
|
+
Size::Unknown.description.should == "NO DESCRIPTION GIVEN"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
enum :Rating do
|
106
|
+
NotRated()
|
107
|
+
|
108
|
+
ThumbsDown do
|
109
|
+
def description
|
110
|
+
"real real bad"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
ThumbsUp do
|
115
|
+
def description
|
116
|
+
"so so good"
|
117
|
+
end
|
118
|
+
|
119
|
+
def thumbs_up_only_method
|
120
|
+
"this method is only defined on ThumbsUp"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def description
|
125
|
+
raise NotImplementedError
|
126
|
+
end
|
98
127
|
end
|
99
128
|
|
100
|
-
|
101
|
-
|
102
|
-
|
129
|
+
describe "an enum with instance-specific method definitions" do
|
130
|
+
it "allows each instance to have its own behavior" do
|
131
|
+
Rating::ThumbsDown.description.should == "real real bad"
|
132
|
+
Rating::ThumbsUp.description.should == "so so good"
|
133
|
+
end
|
134
|
+
|
135
|
+
it "uses the implementation given at the top level if no alternate definition is given for an instance" do
|
136
|
+
lambda { Rating::NotRated.description }.should raise_error(NotImplementedError)
|
137
|
+
end
|
138
|
+
|
139
|
+
it "allows definition of a method on just one instance" do
|
140
|
+
Rating::ThumbsUp.thumbs_up_only_method.should == "this method is only defined on ThumbsUp"
|
141
|
+
lambda { Rating::NotRated.thumbs_up_only_method }.should raise_error(NoMethodError)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "<=> comparison issue that at one time was causing segfaults on MRI" do
|
103
146
|
it "doesn't cause the ruby process to bomb!" do
|
104
147
|
Color::RED.should < Color::GREEN
|
105
148
|
Color::RED.should_not > Color::GREEN
|
106
149
|
Color::RED.should < Color::BLUE
|
107
150
|
end
|
108
|
-
end
|
151
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: renum
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Hume
|
@@ -9,57 +9,33 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-09-01 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
17
|
-
email: duelin
|
16
|
+
description: provides a readable but terse enum facility for Ruby
|
17
|
+
email: duelin.markers@gmail.com
|
18
18
|
executables: []
|
19
19
|
|
20
20
|
extensions: []
|
21
21
|
|
22
22
|
extra_rdoc_files:
|
23
|
-
-
|
24
|
-
- License.txt
|
25
|
-
- Manifest.txt
|
26
|
-
- README.txt
|
27
|
-
- website/index.txt
|
23
|
+
- README.textile
|
28
24
|
files:
|
29
|
-
-
|
30
|
-
- License.txt
|
31
|
-
- Manifest.txt
|
32
|
-
- README.txt
|
25
|
+
- README.textile
|
33
26
|
- Rakefile
|
34
|
-
-
|
35
|
-
- config/requirements.rb
|
27
|
+
- VERSION
|
36
28
|
- lib/renum.rb
|
37
29
|
- lib/renum/enumerated_value.rb
|
38
30
|
- lib/renum/enumerated_value_type_factory.rb
|
39
|
-
-
|
40
|
-
- log/debug.log
|
41
|
-
- script/destroy
|
42
|
-
- script/generate
|
43
|
-
- script/txt2html
|
44
|
-
- setup.rb
|
31
|
+
- renum.gemspec
|
45
32
|
- spec/renum_spec.rb
|
46
|
-
- spec/spec.opts
|
47
33
|
- spec/spec_helper.rb
|
48
|
-
- tasks/deployment.rake
|
49
|
-
- tasks/environment.rake
|
50
|
-
- tasks/rspec.rake
|
51
|
-
- tasks/website.rake
|
52
|
-
- website/index.html
|
53
|
-
- website/index.txt
|
54
|
-
- website/javascripts/rounded_corners_lite.inc.js
|
55
|
-
- website/stylesheets/screen.css
|
56
|
-
- website/template.rhtml
|
57
34
|
has_rdoc: true
|
58
|
-
homepage: http://renum
|
35
|
+
homepage: http://github.com/duelinmarkers/renum
|
59
36
|
post_install_message:
|
60
37
|
rdoc_options:
|
61
|
-
- --
|
62
|
-
- README.txt
|
38
|
+
- --charset=UTF-8
|
63
39
|
require_paths:
|
64
40
|
- lib
|
65
41
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -77,9 +53,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
77
53
|
requirements: []
|
78
54
|
|
79
55
|
rubyforge_project: renum
|
80
|
-
rubygems_version: 1.
|
56
|
+
rubygems_version: 1.3.1
|
81
57
|
signing_key:
|
82
58
|
specification_version: 2
|
83
|
-
summary:
|
84
|
-
test_files:
|
85
|
-
|
59
|
+
summary: provides a readable but terse enum facility for Ruby
|
60
|
+
test_files:
|
61
|
+
- spec/renum_spec.rb
|
62
|
+
- spec/spec_helper.rb
|
data/History.txt
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
== 1.0.2 2008-11-07
|
2
|
-
|
3
|
-
* Documentation updates regarding Rails integration
|
4
|
-
* Tiny typo fix in specs
|
5
|
-
|
6
|
-
== 1.0.0 2008-01-25
|
7
|
-
|
8
|
-
* New fancy syntax supporting extra member variables in enums
|
9
|
-
|
10
|
-
== 0.1.0 ???
|
11
|
-
|
12
|
-
* Add in a missing require
|
13
|
-
|
14
|
-
== 0.0.3 2007-11-02
|
15
|
-
|
16
|
-
* Support nesting enums inside other modules.
|
17
|
-
* Add Comparable
|
18
|
-
|
19
|
-
== 0.0.1 2007-11-01
|
20
|
-
|
21
|
-
* 1 major enhancement:
|
22
|
-
* Initial release
|
23
|
-
|