module ComposedValidations class WithValidatedProperty < ::SimpleDelegator attr_reader :property, :validator def initialize(resource, property, validator) super(resource) @property = ComposedValidations::ValidatedProperty(property) @validator = validator end def class __getobj__.class end def valid?(*args) __getobj__.valid?(*args) unless validator.valid?(result) errors.add(property.validated_property, validator.message) end errors.blank? end def save(*args) return false unless valid? __getobj__.save(*args) end private def result __send__(property.property_accessor) end end end