Sha256: bb1d49d3e7e313840890d15c3da3950b7b74115cc5e9c6b20602f09096eab19b

Contents?: true

Size: 1.3 KB

Versions: 1

Compression:

Stored size: 1.3 KB

Contents

require "vanguard"

module Fortnox
  module API
    module Validator

      module Mixin
        class << self
          def included( base )
            base.extend ClassMethods
          end
        end

        module ClassMethods
          def using_validations &block
            @validators ||= []
            @validators << Vanguard::Validator.build( &block )
          end

          def validators
            @validators || []
          end
        end
      end

      class Base

        include Mixin

        def validate( instance )
          raise_error_if_no_validator

          valid = true

          validators.each do |validator|
            validation_result = validator.call( instance )
            violations.merge( validation_result.violations )
            valid = valid && validation_result.valid?
          end

          return valid
        end

        def violations
          raise_error_if_no_validator

          @violations ||= Set.new
        end

        def instance
          raise_error_if_no_validator

          self
        end

      private

        def validators
          self.class.validators
        end

        def raise_error_if_no_validator
          return if validators.length > 0
          raise ArgumentError, "No validator given"
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fortnox-api-0.1.0 lib/fortnox/api/validators/base.rb