acts_as_constant 1.0.3 → 1.0.4

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.
Files changed (2) hide show
  1. data/lib/acts_as_constant.rb +55 -32
  2. metadata +2 -2
@@ -17,55 +17,78 @@ module ActiveRecord #:nodoc:
17
17
  const = klass.upcase.gsub("::", "_")
18
18
  #puts "const = #{const}"
19
19
 
20
+ class_eval %{
21
+ def self.constant_class_name
22
+ "#{const}"
23
+ end
24
+
25
+ def self.constant_column
26
+ "#{col}"
27
+ end
28
+ }
29
+
20
30
  # create a constant array to hold the values
21
31
  # create a nice get method to pull from the constant array
22
32
  class_eval %{
23
33
  private
24
- #{const}_CONSTANTS = []
34
+ #{self.constant_class_name}_CONSTANTS = []
25
35
 
26
36
  public
27
37
  def self.get(id)
28
38
  return nil if id.blank?
29
- #{const}_CONSTANTS[id]
39
+ #{self.constant_class_name}_CONSTANTS[id]
30
40
  end
31
41
 
32
42
  def self.CONSTANTS
33
- #{const}_CONSTANTS
43
+ #{self.constant_class_name}_CONSTANTS
34
44
  end
35
- }
36
-
37
- # let's build methods for everything in the database.
38
- rows = eval "#{klass}.find(:all)"
45
+
46
+ }
39
47
 
40
- rows.each do |rec|
41
- #puts rec.inspect
42
- name = rec.send(col)
43
-
44
- unless name.nil?
48
+ class_eval do
49
+ def self.reload_constants!
50
+ self.CONSTANTS.clear
45
51
 
46
- # let's sanitize the name a bit.
47
- name = name.downcase
48
- name = name.gsub(' ', '_')
49
-
50
- # let's create two methods an all downcase method for accessing the constant and an upper case one
51
- class_eval %{
52
- # by using .freeze we can prevent the object from being modified.
53
- #{const}_CONSTANTS[#{rec.id}] = rec.freeze
54
-
55
- def self.#{name}
56
- #{const}_CONSTANTS[#{rec.id}]
57
- end
58
-
59
- def self.#{name.upcase}
60
- #{const}_CONSTANTS[#{rec.id}]
52
+ rows = eval "#{self.to_s}.find(:all)"
53
+
54
+ rows.each do |rec|
55
+ #puts rec.inspect
56
+ name = rec.send(self.constant_column)
57
+
58
+ unless name.nil?
59
+
60
+ # let's sanitize the name a bit.
61
+ name = name.downcase
62
+ name = name.gsub(' ', '_')
63
+
64
+ self.instance_eval do
65
+
66
+ define_method("constant_name") do
67
+ self.send(self.constant_column).downcase.gsub(' ', '_')
68
+ end
69
+
70
+ end
71
+
72
+ # let's create two methods an all downcase method for accessing the constant and an upper case one
73
+ class_eval %{
74
+ # by using .freeze we can prevent the object from being modified.
75
+ #{self.constant_class_name}_CONSTANTS[#{rec.id}] = rec.freeze
76
+
77
+ def self.#{name}
78
+ #{self.constant_class_name}_CONSTANTS[#{rec.id}]
79
+ end
80
+
81
+ def self.#{name.upcase}
82
+ #{self.constant_class_name}_CONSTANTS[#{rec.id}]
83
+ end
84
+ }
61
85
  end
62
- }
86
+ end
63
87
  end
64
88
  end
65
- class_eval %{
66
- # by using .freeze we can prevent the constants array from being modified.
67
- #{const}_CONSTANTS.freeze
68
- }
89
+
90
+ self.reload_constants!
91
+
69
92
  rescue => ex
70
93
  #puts "Error in acts_as_constant: #{ex.message}"
71
94
  #puts ex.backtrace
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: acts_as_constant
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.3
7
- date: 2007-03-05 00:00:00 -05:00
6
+ version: 1.0.4
7
+ date: 2007-03-15 00:00:00 -04:00
8
8
  summary: Acts as Constant
9
9
  require_paths:
10
10
  - lib