Sha256: 75296f032704b5a5ac4e5cb9c2045e9395656fcc9c370d83a7a470978afb40cb

Contents?: true

Size: 981 Bytes

Versions: 6

Compression:

Stored size: 981 Bytes

Contents

require 'action_logic/errors'
require 'action_logic/action_validation/base_validation'

module ActionLogic
  module ActionValidation
    class TypeValidation < BaseValidation

      def self.validate!(validation_rules, context)
        return unless validation_rules.values.find { |expected_validation| expected_validation[:type] }

        type_errors = validation_rules.reduce([]) do |collection, (expected_attribute, expected_validation)|
          next unless expected_validation[:type]

          if context.to_h[expected_attribute].class != expected_validation[:type]
            collection << "Attribute: #{expected_attribute} with value: #{context.to_h[expected_attribute]} was expected to be of type #{expected_validation[:type]} but is #{context.to_h[expected_attribute].class}"
          end
          collection
        end

        raise ActionLogic::AttributeTypeError.new(error_message_format(type_errors.join(", "))) if type_errors.any?
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
action_logic-0.2.8 lib/action_logic/action_validation/type_validation.rb
action_logic-0.2.7 lib/action_logic/action_validation/type_validation.rb
action_logic-0.2.6 lib/action_logic/action_validation/type_validation.rb
action_logic-0.2.5 lib/action_logic/action_validation/type_validation.rb
action_logic-0.2.4 lib/action_logic/action_validation/type_validation.rb
action_logic-0.2.3 lib/action_logic/action_validation/type_validation.rb