module Validation::Validatable::ClassMethods
Public Instance Methods
attr_accessor_with_validation(name, pattern, writer_validation: true, reader_validation: true, &adjuster)
click to toggle source
@param name [Symbol, String] @param pattern [Proc, Method, ===] @param [Boolean] reader_validation @param [Boolean] writer_validation @return [Array<Symbol>]
# File lib/validation/validatable/classmethods.rb, line 61 def attr_accessor_with_validation(name, pattern, writer_validation: true, reader_validation: true, &adjuster) reader_name = ( if reader_validation attr_reader_with_validation(name, pattern) else attr_reader(name) end ) writer_name = ( if writer_validation attr_writer_with_validation(name, pattern, &adjuster) else attr_writer(name) end ) [reader_name, writer_name] end
attr_reader_with_validation(name, pattern)
click to toggle source
@param name [Symbol, String] @param pattern [Proc, Method, ===] @return [Symbol]
# File lib/validation/validatable/classmethods.rb, line 10 def attr_reader_with_validation(name, pattern) define_method(name) do ivar = :"@#{name}" unless instance_variable_defined?(ivar) instance_variable_set(ivar, nil) end value = instance_variable_get(ivar) unless _valid?(pattern, value) raise InvalidReadingError, "#{value.inspect} is deficient for #{name} in #{self.class}" end value end end
attr_writer_with_validation(name, pattern, &adjuster)
click to toggle source
@param name [Symbol, String] @param pattern [Proc, Method, ===] @return [Symbol]
# File lib/validation/validatable/classmethods.rb, line 31 def attr_writer_with_validation(name, pattern, &adjuster) if adjuster adjustment = true end define_method(:"#{name}=") do |value| raise "can't modify frozen #{self.class}" if frozen? if adjustment begin value = instance_exec(value, &adjuster) rescue Exception => err raise InvalidAdjustingError, err end end if _valid?(pattern, value) instance_variable_set(:"@#{name}", value) else raise InvalidWritingError, "#{value.inspect} is deficient for #{name} in #{self.class}" end end end