Sha256: 4976aa7bded144e4b7222f5b6dfee608c90957339dec9f19cffc9d2cc6a7802c

Contents?: true

Size: 1.96 KB

Versions: 3

Compression:

Stored size: 1.96 KB

Contents

module BusinessCentral
  module Object
    class Validation
      def initialize(validation_rules = [], object_params = {})
        @validation_rules = validation_rules
        @object_params = object_params
        @errors = []
      end

      def valid?
        @validation_rules.each do |rules_key, rules_value|
          rules_value.each do |validation_key, validation_value|
            if required?(validation_key, validation_value, @object_params[rules_key].to_s)
              @errors << { field: rules_key, message: 'is a required field'}
            end

            if exceeds_maximum_length?(validation_key, validation_value, @object_params[rules_key].to_s)
              @errors << { field: rules_key, message: "has exceeded the maximum length #{validation_value}"}
            end

            if not_inclusive_of?(validation_key, validation_value, @object_params[rules_key].to_s)
              @errors << { field: rules_key, message: "is not one of #{validation_value.join(', ')}"}
            end

            if date_type?(validation_key, validation_value, @object_params[rules_key])
              @errors << { field: rules_key, message: 'is not a date'}
            end
          end
        end

        raise InvalidObjectException.new(@errors) if @errors.any?
        return true
      end

      private

      def required?(validation_rule, validation_value, value)
        validation_rule == :required && validation_value == true && value.blank?
      end

      def exceeds_maximum_length?(validation_rule, validation_value, value)
        validation_rule == :maximum_length && value.length > validation_value
      end

      def not_inclusive_of?(validation_rule, validation_value, value)
        validation_rule == :inclusion_of && !validation_value.include?(value) && !value.blank?
      end

      def date_type?(validation_rule, validation_value, value)
        validation_rule == :date && validation_value == true && !value.is_a?(Date) && !value.nil?
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
business-central-1.0.3 lib/business_central/object/validation.rb
business-central-1.0.2 lib/business_central/object/validation.rb
business-central-1.0.1 lib/business_central/object/validation.rb