Module: Validation::Validatable::ClassMethods
- Defined in:
- lib/validation/validatable/classmethods.rb
Instance Method Summary collapse
- #attr_accessor_with_validation(name, pattern, writer_validation: true, reader_validation: true, &adjuster) ⇒ Array<Symbol>
- #attr_reader_with_validation(name, pattern) ⇒ Symbol
- #attr_writer_with_validation(name, pattern, &adjuster) ⇒ Symbol
Instance Method Details
#attr_accessor_with_validation(name, pattern, writer_validation: true, reader_validation: true, &adjuster) ⇒ Array<Symbol>
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# 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) ⇒ Symbol
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 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) ⇒ Symbol
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# 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 |