Sha256: 07539e1b0b527366ba46ae9901878668a3c82aceccf442ba86e1d8bc81ea9a71
Contents?: true
Size: 1.36 KB
Versions: 4
Compression:
Stored size: 1.36 KB
Contents
class ValidationAssertionCollector def self.gather(klass, &block) collector = self.new(klass) collector.instance_eval(&block) collector.assertions end def self.define_method_for_validation_method(validation_method, validatable_class) define_method validation_method.gsub(/^validates_/,'').to_sym do |attribute| assertions << ValidationAssertion.new(self.klass, validatable_class, attribute) define_methods_on_assertion_to_collect_options validatable_class, assertions.last end end Validatable::ClassMethods.public_instance_methods.sort.grep(/^validates_/).each do |validation_method| next if validation_method == 'validates_true_for' validatable_class = Validatable.const_get(validation_method.split(/_/).collect { |word| word.capitalize}.join) define_method_for_validation_method(validation_method, validatable_class) end attr_accessor :klass def initialize(klass) self.klass = klass end def define_methods_on_assertion_to_collect_options(validatable_class, assertion) validatable_class.all_understandings.each do |option| next if option == :if class << assertion; self; end.instance_eval do define_method option do |value| self.options.merge!(option=>value) self end end end assertion end def assertions @assertions ||= [] end end
Version data entries
4 entries across 4 versions & 1 rubygems