38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/simple_record/callbacks.rb', line 38
def self.included(base)
base.instance_eval "\n def callbacks\n @callbacks ||= {}\n @callbacks\n end\n\n\n endofeval\n\n @@callbacks.each do |callback|\n base.class_eval <<-endofeval\n\n def run_\#{callback}\n # puts 'CLASS CALLBACKS for ' + self.inspect + ' = ' + self.class.callbacks.inspect\n return true if self.class.callbacks.nil?\n cnames = self.class.callbacks['\#{callback}']\n cnames = [] if cnames.nil?\n # cnames += super.class.callbacks['\#{callback}'] unless super.class.callbacks.nil?\n # puts 'cnames for \#{callback} = ' + cnames.inspect\n return true if cnames.nil?\n cnames.each { |name|\n #puts 'run_ \#{name}'\n if eval(name) == false # nil should be an ok return, only looking for false\n return false\n end\n }\n # super.run_\#{callback}\n return true\n end\n\n endofeval\n\n #this bit of code creates a \"run_blank\" function for everything value in the @@callbacks array.\n #this function can then be inserted in the appropriate place in the save, new, destroy, etc overrides\n #basically, this is how we recreate the callback functions\n base.instance_eval <<-endofeval\n\n# puts 'defining callback=' + callback + ' for ' + self.inspect\n #we first have to make an initialized array for each of the callbacks, to prevent problems if they are not called\n\n def \#{callback}(*args)\n# puts 'callback called in ' + self.inspect + ' with ' + args.inspect\n\n #make_dirty(arg_s, value)\n #self[arg.to_s]=value\n #puts 'value in callback \#{callback}=' + value.to_s\n args.each do |arg|\n cnames = callbacks['\#{callback}']\n #puts '\\tcnames1=' + cnames.inspect + ' for class ' + self.inspect\n cnames = [] if cnames.nil?\n cnames << arg.to_s if cnames.index(arg.to_s).nil?\n #puts '\\tcnames2=' + cnames.inspect\n callbacks['\#{callback}'] = cnames\n end\n end\n\n endofeval\n end\nend\n"
|