enumerate_it 0.7.4 → 0.7.5
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/Gemfile.lock +2 -1
- data/README.rdoc +20 -0
- data/lib/enumerate_it.rb +18 -2
- data/lib/version.rb +1 -1
- data/spec/enumerate_it_spec.rb +52 -0
- metadata +7 -7
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -135,6 +135,26 @@ This will create:
|
|
135
135
|
p.married? #=> true
|
136
136
|
p.divorced? #=> false
|
137
137
|
|
138
|
+
* If you pass the :create_scopes option as 'true', it will create a scope method for each enumeration option (this option defaults to false):
|
139
|
+
|
140
|
+
class Person < ActiveRecord::Base
|
141
|
+
has_enumeration_for :relationship_status, :with => RelationshipStatus, :create_scopes => true
|
142
|
+
end
|
143
|
+
|
144
|
+
Person.married.to_sql # => SELECT "people".* FROM "people" WHERE "people"."relationship_status" = 1
|
145
|
+
|
146
|
+
NOTE: The :create_scopes option can only be used for Rails.version >= 3.0.0.
|
147
|
+
|
148
|
+
* If you pass the :create_scopes option as 'true', it will create a scope method for each enumeration option (this option defaults to false):
|
149
|
+
|
150
|
+
class Person < ActiveRecord::Base
|
151
|
+
has_enumeration_for :relationship_status, :with => RelationshipStatus, :create_scopes => true
|
152
|
+
end
|
153
|
+
|
154
|
+
Person.married.to_sql # => SELECT "people".* FROM "people" WHERE "people"."relationship_status" = 1
|
155
|
+
|
156
|
+
NOTE: The :create_scopes option can only be used for Rails.version >= 3.0.0.
|
157
|
+
|
138
158
|
* If your class can manage validations and responds to :validates_inclusion_of, it will create this validation:
|
139
159
|
|
140
160
|
class Person < ActiveRecord::Base
|
data/lib/enumerate_it.rb
CHANGED
@@ -234,8 +234,12 @@ module EnumerateIt
|
|
234
234
|
create_enumeration_humanize_method options[:with], attribute
|
235
235
|
store_enumeration options[:with], attribute
|
236
236
|
if options[:create_helpers]
|
237
|
-
create_helper_methods
|
238
|
-
create_mutator_methods
|
237
|
+
create_helper_methods options[:with], attribute
|
238
|
+
create_mutator_methods options[:with], attribute
|
239
|
+
end
|
240
|
+
|
241
|
+
if options[:create_scopes]
|
242
|
+
create_scopes options[:with], attribute
|
239
243
|
end
|
240
244
|
end
|
241
245
|
|
@@ -269,6 +273,18 @@ module EnumerateIt
|
|
269
273
|
end
|
270
274
|
end
|
271
275
|
|
276
|
+
def create_scopes(klass, attribute_name)
|
277
|
+
klass.enumeration.keys.each do |option|
|
278
|
+
if defined?(Rails)
|
279
|
+
if Rails.version >= "3.0.0"
|
280
|
+
scope option, where(attribute_name => klass.enumeration[option].first)
|
281
|
+
else
|
282
|
+
raise StandardError, "EnumerateIt cannot create scopes if Rails.version < 3.0.0"
|
283
|
+
end
|
284
|
+
end
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
272
288
|
def create_mutator_methods(klass, attribute_name)
|
273
289
|
class_eval do
|
274
290
|
klass.enumeration.each_pair do |key, values|
|
data/lib/version.rb
CHANGED
data/spec/enumerate_it_spec.rb
CHANGED
@@ -130,6 +130,58 @@ describe EnumerateIt do
|
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
133
|
+
describe "using the :create_scopes option" do
|
134
|
+
def setup_enumeration
|
135
|
+
TestClass.send(:has_enumeration_for, :foobar, :with => TestEnumeration, :create_scopes => true)
|
136
|
+
end
|
137
|
+
|
138
|
+
context "when using Rails" do
|
139
|
+
before { module Rails; end }
|
140
|
+
|
141
|
+
context "with version >= 3.0.0" do
|
142
|
+
before do
|
143
|
+
module Rails
|
144
|
+
def self.version; "3.0.0"; end
|
145
|
+
end
|
146
|
+
|
147
|
+
class TestClass
|
148
|
+
def self.where(whatever); end
|
149
|
+
def self.scope(name, whatever); end
|
150
|
+
end
|
151
|
+
|
152
|
+
setup_enumeration
|
153
|
+
end
|
154
|
+
|
155
|
+
it "creates a scope for each enumeration value" do
|
156
|
+
TestEnumeration.enumeration do |symbol, pair|
|
157
|
+
TestClass.should respond_to(symbol)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
it "when called, the scopes create the correct query" do
|
162
|
+
TestEnumeration.enumeration do |symbol, pair|
|
163
|
+
TestClass.should_receive(:where).with(:foobar => pair.firs)
|
164
|
+
TestClass.send symbol
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "with version < 3.0.0" do
|
170
|
+
before :each do
|
171
|
+
module Rails
|
172
|
+
def self.version; "2.3.9"; end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
it "raises an error telling that scopes creation are ony supported for Rails >= 3.0.0" do
|
177
|
+
expect {
|
178
|
+
setup_enumeration
|
179
|
+
}.to raise_error("EnumerateIt cannot create scopes if Rails.version < 3.0.0")
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
133
185
|
describe EnumerateIt::Base do
|
134
186
|
it "creates constants for each enumeration value" do
|
135
187
|
[TestEnumeration::VALUE_1, TestEnumeration::VALUE_2, TestEnumeration::VALUE_3].each_with_index do |constant, idx|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: enumerate_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- "C\xC3\xA1ssio Marques"
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-04-24 00:00:00 -03:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -36,15 +36,15 @@ dependencies:
|
|
36
36
|
type: :development
|
37
37
|
version_requirements: *id002
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
39
|
+
name: activesupport
|
40
40
|
prerelease: false
|
41
41
|
requirement: &id003 !ruby/object:Gem::Requirement
|
42
42
|
none: false
|
43
43
|
requirements:
|
44
|
-
- - "
|
44
|
+
- - ">="
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 3.
|
47
|
-
type: :
|
46
|
+
version: 2.3.2
|
47
|
+
type: :runtime
|
48
48
|
version_requirements: *id003
|
49
49
|
description: 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.
|
50
50
|
email: cassiommc@gmail.com
|
@@ -95,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
95
|
requirements: []
|
96
96
|
|
97
97
|
rubyforge_project:
|
98
|
-
rubygems_version: 1.
|
98
|
+
rubygems_version: 1.6.1
|
99
99
|
signing_key:
|
100
100
|
specification_version: 3
|
101
101
|
summary: Ruby Enumerations
|