module DelegateAttributes::ActiveRecordExtension::ClassMethods
Public Instance Methods
delegate_attributes(*args)
click to toggle source
# File lib/delegate_attributes/models/active_record_extension.rb, line 12 def delegate_attributes(*args) options = args.extract_options! 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 <<-EOV validate do object = #{options[:to]} #{"object.instance_variable_set(:@errors, DelegateAttributes::FakeErrors.new(object))" if errors_option.to_s == "fit"} if !object.valid? object.errors.messages.each do |attribute, suberrors| if attribute.to_s.in? %w{#{readers.join(" ")}} suberrors.each do |suberror| errors.add(attribute, suberror) end end end end end EOV end end