power_enum 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/README.markdown CHANGED
@@ -3,7 +3,7 @@
3
3
  https://github.com/albertosaurus/power_enum
4
4
 
5
5
  [![Build Status](https://travis-ci.org/albertosaurus/power_enum.png)](https://travis-ci.org/albertosaurus/power_enum)
6
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/albertosaurus/power_enum)
6
+ [![Code Climate](https://codeclimate.com/github/albertosaurus/power_enum.png)](https://codeclimate.com/github/albertosaurus/power_enum)
7
7
 
8
8
  Enumerations for Rails 3.1/3.2 Done Right.
9
9
 
@@ -54,13 +54,35 @@ module ActiveRecord # :nodoc:
54
54
  #
55
55
  # config.define :booking_status, :connector_type, :color, :order => :name
56
56
  #
57
- # STI is also supported:
57
+ # Single Table Inheritance is also supported:
58
58
  #
59
59
  # Example:
60
60
  #
61
61
  # config.define :base_enum, :name_column => ;foo
62
62
  # config.define :booking_status, :connector_type, :color, :extends => :base_enum
63
- module VirtualEnumerations # :nodoc:
63
+ module VirtualEnumerations
64
+
65
+ # Patches Module#const_missing to enable us to dynamically create enum
66
+ # classes at runtime.
67
+ def self.patch_const_lookup
68
+
69
+ # patch Module to support VirtualEnumerations
70
+ ::Module.module_eval do
71
+
72
+ alias_method :enumerations_original_const_missing, :const_missing
73
+
74
+ # Override const_missing to see if VirtualEnumerations can create it.
75
+ def const_missing(const_id)
76
+ # let rails have a go at loading it
77
+ enumerations_original_const_missing(const_id)
78
+ rescue NameError
79
+ # now it's our turn
80
+ ActiveRecord::VirtualEnumerations.synthesize_if_defined(const_id) or raise
81
+ end
82
+
83
+ end
84
+
85
+ end
64
86
 
65
87
  # Defines enumeration classes. Passes a config object to the given block
66
88
  # which is used to define the virtual enumerations. Call config.define for
data/lib/power_enum.rb CHANGED
@@ -14,27 +14,11 @@ class PowerEnum < Rails::Engine
14
14
  include PowerEnum::Schema::SchemaStatements
15
15
  end
16
16
 
17
- if defined?(ActiveRecord::Migration::CommandRecorder)
18
- ActiveRecord::Migration::CommandRecorder.class_eval do
19
- include PowerEnum::Migration::CommandRecorder
20
- end
17
+ ActiveRecord::Migration::CommandRecorder.class_eval do
18
+ include PowerEnum::Migration::CommandRecorder
21
19
  end
22
20
 
23
- # patch Module to support VirtualEnumerations
24
- ::Module.module_eval do
25
-
26
- alias_method :enumerations_original_const_missing, :const_missing
27
-
28
- # Override const_missing to see if VirtualEnumerations can create it.
29
- def const_missing(const_id)
30
- # let rails have a go at loading it
31
- enumerations_original_const_missing(const_id)
32
- rescue NameError
33
- # now it's our turn
34
- ActiveRecord::VirtualEnumerations.synthesize_if_defined(const_id) or raise
35
- end
36
-
37
- end
21
+ ActiveRecord::VirtualEnumerations.patch_const_lookup
38
22
  end
39
23
 
40
24
  end
@@ -143,13 +143,6 @@ module PowerEnum::Enumerated
143
143
  @all = load_all.collect{|val| val.freeze}.freeze
144
144
  end
145
145
 
146
- def load_all
147
- conditions = self.acts_enumerated_conditions
148
- order = self.acts_enumerated_order
149
- where(conditions).order(order)
150
- end
151
- private :load_all
152
-
153
146
  # Returns all the active enum values. See the 'active?' instance method.
154
147
  def active
155
148
  return @all_active if @all_active
@@ -176,22 +169,7 @@ module PowerEnum::Enumerated
176
169
  nil
177
170
  when 1
178
171
  arg = args.first
179
- case arg
180
- when Symbol
181
- return_val = lookup_name(arg.id2name) and return return_val
182
- when String
183
- return_val = lookup_name(arg) and return return_val
184
- when Fixnum
185
- return_val = lookup_id(arg) and return return_val
186
- when self
187
- return arg
188
- when nil
189
- nil
190
- else
191
- raise TypeError, "#{self.name}[]: argument should be a String, Symbol or Fixnum but got a: #{arg.class.name}"
192
- end
193
-
194
- handle_lookup_failure(arg)
172
+ lookup_enum_by_type(arg) || handle_lookup_failure(arg)
195
173
  else
196
174
  args.map{ |item| self[item] }.uniq
197
175
  end
@@ -216,21 +194,6 @@ module PowerEnum::Enumerated
216
194
  end
217
195
  end
218
196
 
219
- # Deals with a lookup failure for the given argument.
220
- def handle_lookup_failure(arg)
221
- if (lookup_failure_handler = self.acts_enumerated_on_lookup_failure)
222
- case lookup_failure_handler
223
- when Proc
224
- lookup_failure_handler.call(arg)
225
- else
226
- self.send(lookup_failure_handler, arg)
227
- end
228
- else
229
- self.send(:enforce_none, arg)
230
- end
231
- end
232
- private :handle_lookup_failure
233
-
234
197
  # Enum lookup by id
235
198
  def lookup_id(arg)
236
199
  all_by_id[arg]
@@ -312,6 +275,48 @@ module PowerEnum::Enumerated
312
275
 
313
276
  # ---Private methods---
314
277
 
278
+ def load_all
279
+ conditions = self.acts_enumerated_conditions
280
+ order = self.acts_enumerated_order
281
+ where(conditions).order(order)
282
+ end
283
+ private :load_all
284
+
285
+ # Looks up the enum based on the type of the argument.
286
+ def lookup_enum_by_type(arg)
287
+ case arg
288
+ when Symbol
289
+ lookup_name(arg.id2name)
290
+ when String
291
+ lookup_name(arg)
292
+ when Fixnum
293
+ lookup_id(arg)
294
+ when self
295
+ arg
296
+ when nil
297
+ nil
298
+ else
299
+ raise TypeError, "#{self.name}[]: argument should"\
300
+ " be a String, Symbol or Fixnum but got a: #{arg.class.name}"
301
+ end
302
+ end
303
+ private :lookup_enum_by_type
304
+
305
+ # Deals with a lookup failure for the given argument.
306
+ def handle_lookup_failure(arg)
307
+ if (lookup_failure_handler = self.acts_enumerated_on_lookup_failure)
308
+ case lookup_failure_handler
309
+ when Proc
310
+ lookup_failure_handler.call(arg)
311
+ else
312
+ self.send(lookup_failure_handler, arg)
313
+ end
314
+ else
315
+ self.send(:enforce_none, arg)
316
+ end
317
+ end
318
+ private :handle_lookup_failure
319
+
315
320
  # Returns a hash of all enumeration members keyed by their ids.
316
321
  def all_by_id
317
322
  @all_by_id ||= all_by_attribute( :id )
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: power_enum
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -40,7 +40,7 @@ cert_chain:
40
40
  amZaYUtWM2wwYTFkR2wyUVNMa2pScFFaRDFiRCtVSDdnT3F5N1piZGNzUkJM
41
41
  NEg3VTV6VQpibEtkZEg2dXhDckRTTTdLYWJrelNPVmYKLS0tLS1FTkQgQ0VS
42
42
  VElGSUNBVEUtLS0tLQo=
43
- date: 2013-02-03 00:00:00.000000000 Z
43
+ date: 2013-02-17 00:00:00.000000000 Z
44
44
  dependencies:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: rails
@@ -170,6 +170,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
170
170
  - - ! '>='
171
171
  - !ruby/object:Gem::Version
172
172
  version: '0'
173
+ segments:
174
+ - 0
175
+ hash: -4180923029060958212
173
176
  required_rubygems_version: !ruby/object:Gem::Requirement
174
177
  none: false
175
178
  requirements:
@@ -178,7 +181,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
181
  version: '0'
179
182
  requirements: []
180
183
  rubyforge_project:
181
- rubygems_version: 1.8.24
184
+ rubygems_version: 1.8.25
182
185
  signing_key:
183
186
  specification_version: 3
184
187
  summary: Allows you to treat instances of your ActiveRecord models as though they
metadata.gz.sig CHANGED
Binary file