Sha256: b924d894dd436fdf7e3426258b8d2bd6c9c03a43b99d259ccef4814fd6c88a9e

Contents?: true

Size: 1.22 KB

Versions: 10

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true

module Phlexi
  module Field
    module Options
      module Validators
        private

        def has_validators?
          @has_validators ||= object.class.respond_to?(:validators_on)
        end

        def attribute_validators
          object.class.validators_on(key)
        end

        def association_reflection_validators
          association_reflection ? object.class.validators_on(association_reflection.name) : []
        end

        def valid_validator?(validator)
          !conditional_validators?(validator) && action_validator_match?(validator)
        end

        def conditional_validators?(validator)
          validator.options.include?(:if) || validator.options.include?(:unless)
        end

        def action_validator_match?(validator)
          return true unless validator.options.include?(:on)

          case validator.options[:on]
          when :save
            true
          when :create
            !object.persisted?
          when :update
            object.persisted?
          end
        end

        def find_validator(kind)
          attribute_validators.find { |v| v.kind == kind && valid_validator?(v) } if has_validators?
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
phlexi-field-0.0.11 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.10 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.9 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.8 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.7 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.6 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.5 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.4 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.3 lib/phlexi/field/options/validators.rb
phlexi-field-0.0.2 lib/phlexi/field/options/validators.rb