7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/enumeration.rb', line 7
def enum(name, map_or_list)
c = Collection.new(map_or_list)
class_methods = Module.new do
define_method(name.to_s+'_collection') { c.data }
define_method(name.to_s+'_set') { c.set }
define_method(name) {|k| class_variable_get("@@#{name}")[k]} if c.map?
end
class_eval do
class_variable_set("@@#{name}", c)
extend class_methods
end
define_method("#{name}=") do |value|
c = self.class.send(:class_variable_get, "@@#{name}")
instance_variable_set("@#{name}", c[value])
end
define_method(name) { instance_variable_get("@#{name}") }
define_method(name.to_s+'_key') do
c = self.class.send(:class_variable_get, "@@#{name}")
c.key(instance_variable_get("@#{name}"))
end
end
|