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
42
43
44
45
|
# File 'lib/delegate_attributes/models/active_record_extension.rb', line 12
def delegate_attributes(*args)
options = args.
errors_option = options.delete(:errors)
writer_option = options.delete(:writer)
writer_regexp = /=\z/
readers = args.select {|a| a.to_s !=~ writer_regexp}
writers = args.select {|a| a.to_s =~ writer_regexp}
if writer_option == true
writers += readers.map {|a| "#{a}="}
end
class_eval do
delegate *(readers + writers), options.dup
end
unless errors_option == false
class_eval " validate do\n object = \#{options[:to]}\n \#{\"object.instance_variable_set(:@errors, DelegateAttributes::FakeErrors.new(object))\" if errors_option.to_s == \"fit\"}\n if !object.valid?\n object.errors.messages.each do |attribute, suberrors|\n if attribute.to_s.in? %w{\#{readers.join(\" \")}}\n suberrors.each do |suberror|\n errors.add(attribute, suberror)\n end\n end\n end\n end\n end\n EOV\n end\nend\n"
|