enumerate_it 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.rdoc +19 -9
- data/VERSION +1 -1
- data/enumerate_it.gemspec +55 -0
- data/lib/enumerate_it.rb +25 -0
- data/spec/enumerate_it_spec.rb +18 -0
- metadata +3 -4
- data/spec/renun_spec.rb +0 -79
data/.gitignore
CHANGED
data/README.rdoc
CHANGED
@@ -66,7 +66,7 @@ This will create some nice stuff:
|
|
66
66
|
|
67
67
|
RelationshipStatus.to_a # [["Divorced", 4],["Married", 2],["Single", 1],["Widow", 3]]
|
68
68
|
|
69
|
-
* You can manipulate the
|
69
|
+
* You can manipulate the hash used to create the enumeration:
|
70
70
|
|
71
71
|
RelationshipStatus.enumeration # returns the exact hash used to define the enumeration
|
72
72
|
|
@@ -90,16 +90,26 @@ This will create:
|
|
90
90
|
p.relationship_status = RelationshipStatus::DIVORCED
|
91
91
|
p.relationsip_status_humanize # => 'Divorced'
|
92
92
|
|
93
|
-
* If
|
94
|
-
validation:
|
93
|
+
* If you pass the :create_helpers option as 'true', it will create a helper method for each enumeration option (this option defaults to false):
|
95
94
|
|
96
|
-
|
97
|
-
|
98
|
-
|
95
|
+
class Person < ActiveRecord::Base
|
96
|
+
has_enumeration_for :relationship_status, :with => RelationshipStatus, :create_helpers => true
|
97
|
+
end
|
98
|
+
|
99
|
+
p = Person.new
|
100
|
+
p.relationship_status = RelationshipStatus::MARRIED
|
101
|
+
p.married? #=> true
|
102
|
+
p.divorced? #=> false
|
103
|
+
|
104
|
+
* If your class can manage validations and responds to :validates_inclusion_of, it will create this validation:
|
105
|
+
|
106
|
+
class Person < ActiveRecord::Base
|
107
|
+
has_enumeration_for :relationship_status, :with => RelationshipStatus
|
108
|
+
end
|
99
109
|
|
100
|
-
|
101
|
-
|
102
|
-
|
110
|
+
p = Person.new :relationship_status => 6 # => there is no '6' value in the enumeration
|
111
|
+
p.valid? # => false
|
112
|
+
p.errors[:relationship_status] # => "is not included in the list"
|
103
113
|
|
104
114
|
Remember that in Rails 3 you can add validations to any kind of class and not only to those derived from
|
105
115
|
ActiveRecord::Base.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{enumerate_it}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["C\303\241ssio Marques"]
|
12
|
+
s.date = %q{2010-03-16}
|
13
|
+
s.description = %q{Have a legacy database and need some enumerations in your models to match those stupid '4 rows/2 columns' tables with foreign keys and stop doing joins just to fetch a simple description? Or maybe use some integers instead of strings as the code for each value of your enumerations? Here's EnumerateIt.}
|
14
|
+
s.email = %q{cassiommc@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"enumerate_it.gemspec",
|
27
|
+
"lib/enumerate_it.rb",
|
28
|
+
"spec/enumerate_it_spec.rb",
|
29
|
+
"spec/spec.opts",
|
30
|
+
"spec/spec_helper.rb"
|
31
|
+
]
|
32
|
+
s.homepage = %q{http://github.com/cassiomarques/enumerate_it}
|
33
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = %q{1.3.6}
|
36
|
+
s.summary = %q{Ruby Enumerations}
|
37
|
+
s.test_files = [
|
38
|
+
"spec/enumerate_it_spec.rb",
|
39
|
+
"spec/spec_helper.rb"
|
40
|
+
]
|
41
|
+
|
42
|
+
if s.respond_to? :specification_version then
|
43
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
44
|
+
s.specification_version = 3
|
45
|
+
|
46
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
47
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
48
|
+
else
|
49
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
data/lib/enumerate_it.rb
CHANGED
@@ -89,6 +89,18 @@
|
|
89
89
|
# p = Person.new
|
90
90
|
# p.relationship_status = RelationshipStatus::DIVORCED
|
91
91
|
# p.relationsip_status_humanize # => 'Divorced'
|
92
|
+
#
|
93
|
+
# - If you pass the :create_helpers option as 'true', it will create a helper method for each enumeration
|
94
|
+
# option (this option defaults to false):
|
95
|
+
#
|
96
|
+
# class Person < ActiveRecord::Base
|
97
|
+
# has_enumeration_for :relationship_status, :with => RelationshipStatus, :create_helpers => true
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# p = Person.new
|
101
|
+
# p.relationship_status = RelationshipStatus::MARRIED
|
102
|
+
# p.married? #=> true
|
103
|
+
# p.divorced? #=> false
|
92
104
|
#
|
93
105
|
# - If your class can manage validations and responds to :validates_inclusion_of, it will create this
|
94
106
|
# validation:
|
@@ -164,6 +176,9 @@ module EnumerateIt
|
|
164
176
|
validates_inclusion_of attribute, :in => options[:with].list, :allow_blank => true
|
165
177
|
end
|
166
178
|
create_enumeration_humanize_method options[:with], attribute
|
179
|
+
if options[:create_helpers]
|
180
|
+
create_helper_methods options[:with], attribute
|
181
|
+
end
|
167
182
|
end
|
168
183
|
|
169
184
|
private
|
@@ -175,6 +190,16 @@ module EnumerateIt
|
|
175
190
|
end
|
176
191
|
end
|
177
192
|
end
|
193
|
+
|
194
|
+
def create_helper_methods(klass, attribute_name)
|
195
|
+
class_eval do
|
196
|
+
klass.enumeration.keys.each do |option|
|
197
|
+
define_method "#{option}?" do
|
198
|
+
self.send(attribute_name) == klass.enumeration[option].first
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
178
203
|
end
|
179
204
|
|
180
205
|
def self.included(receiver)
|
data/spec/enumerate_it_spec.rb
CHANGED
@@ -33,6 +33,24 @@ describe EnumerateIt do
|
|
33
33
|
@target.foobar = nil
|
34
34
|
@target.foobar_humanize.should be_nil
|
35
35
|
end
|
36
|
+
|
37
|
+
it "defaults to not creating helper methods" do
|
38
|
+
@target.should_not respond_to(:value_1?)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "using the option :create_helpers option" do
|
43
|
+
before :each do
|
44
|
+
class TestClass
|
45
|
+
has_enumeration_for :foobar, :with => TestEnumeration, :create_helpers => true
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "creates helpers methods with question marks for each enumeration option" do
|
50
|
+
target = TestClass.new(TestEnumeration::VALUE_2)
|
51
|
+
target.should be_value_2
|
52
|
+
target.should_not be_value_1
|
53
|
+
end
|
36
54
|
end
|
37
55
|
|
38
56
|
describe EnumerateIt::Base do
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- "C\xC3\xA1ssio Marques"
|
@@ -47,9 +47,9 @@ files:
|
|
47
47
|
- README.rdoc
|
48
48
|
- Rakefile
|
49
49
|
- VERSION
|
50
|
+
- enumerate_it.gemspec
|
50
51
|
- lib/enumerate_it.rb
|
51
52
|
- spec/enumerate_it_spec.rb
|
52
|
-
- spec/renun_spec.rb
|
53
53
|
- spec/spec.opts
|
54
54
|
- spec/spec_helper.rb
|
55
55
|
has_rdoc: true
|
@@ -84,5 +84,4 @@ specification_version: 3
|
|
84
84
|
summary: Ruby Enumerations
|
85
85
|
test_files:
|
86
86
|
- spec/enumerate_it_spec.rb
|
87
|
-
- spec/renun_spec.rb
|
88
87
|
- spec/spec_helper.rb
|
data/spec/renun_spec.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
#encoding: utf-8
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
3
|
-
|
4
|
-
class TestEnumeration < EnumerateIt::Base
|
5
|
-
associate_values(
|
6
|
-
:value_1 => ['1', 'Hey, I am 1!'],
|
7
|
-
:value_2 => ['2', 'Hey, I am 2!'],
|
8
|
-
:value_3 => ['3', 'Hey, I am 3!']
|
9
|
-
)
|
10
|
-
end
|
11
|
-
|
12
|
-
describe EnumerateIt do
|
13
|
-
before :each do
|
14
|
-
class TestClass
|
15
|
-
include EnumerateIt
|
16
|
-
attr_accessor :foobar
|
17
|
-
has_enumeration_for :foobar, :with => TestEnumeration
|
18
|
-
|
19
|
-
def initialize(foobar)
|
20
|
-
@foobar = foobar
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
@target = TestClass.new(TestEnumeration::VALUE_2)
|
25
|
-
end
|
26
|
-
|
27
|
-
context "associating an enumeration with a class attribute" do
|
28
|
-
it "creates an humanized description for the attribute's value" do
|
29
|
-
@target.foobar_humanize.should == 'Hey, I am 2!'
|
30
|
-
end
|
31
|
-
|
32
|
-
it "if the attribute is blank, the humanize description is nil" do
|
33
|
-
@target.foobar = nil
|
34
|
-
@target.foobar_humanize.should be_nil
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe EnumerateIt::Base do
|
39
|
-
it "creates constants for each enumeration value" do
|
40
|
-
[TestEnumeration::VALUE_1, TestEnumeration::VALUE_2, TestEnumeration::VALUE_3].each_with_index do |constant, idx|
|
41
|
-
constant.should == (idx + 1).to_s
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it "creates a method that returns the allowed values in the enumeration's class" do
|
46
|
-
TestEnumeration.list.should == ['1', '2', '3']
|
47
|
-
end
|
48
|
-
|
49
|
-
it "creates a method that returns the enumeration specification" do
|
50
|
-
TestEnumeration.enumeration.should == {
|
51
|
-
:value_1 => ['1', 'Hey, I am 1!'],
|
52
|
-
:value_2 => ['2', 'Hey, I am 2!'],
|
53
|
-
:value_3 => ['3', 'Hey, I am 3!']
|
54
|
-
}
|
55
|
-
end
|
56
|
-
|
57
|
-
describe ".to_a" do
|
58
|
-
it "returns an array with the values and human representations" do
|
59
|
-
TestEnumeration.to_a.should == [['Hey, I am 1!', '1'], ['Hey, I am 2!', '2'], ['Hey, I am 3!', '3']]
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when included in ActiveRecord::Base" do
|
64
|
-
before :each do
|
65
|
-
class ActiveRecordStub; attr_accessor :bla; end
|
66
|
-
ActiveRecordStub.stub!(:respond_to?).with(:validates_inclusion_of).and_return(true)
|
67
|
-
ActiveRecordStub.stub!(:validates_inclusion_of).and_return(true)
|
68
|
-
ActiveRecordStub.send :include, EnumerateIt
|
69
|
-
end
|
70
|
-
|
71
|
-
it "creates a validation for inclusion" do
|
72
|
-
ActiveRecordStub.should_receive(:validates_inclusion_of).with(:bla, :in => TestEnumeration.list, :allow_blank => true)
|
73
|
-
class ActiveRecordStub
|
74
|
-
has_enumeration_for :bla, :with => TestEnumeration
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|