Sha256: e32faf8892de073bb29ea61ebdb786bace58563bc6a5e3f07ed5dcf61c6221d9

Contents?: true

Size: 1.6 KB

Versions: 19

Compression:

Stored size: 1.6 KB

Contents

module ActiveMerchant #:nodoc:
  module Validateable #:nodoc:
    def valid?
      errors.clear

      before_validate if respond_to?(:before_validate, true)
      validate if respond_to?(:validate, true)

      errors.empty?
    end

    def initialize(attributes = {})
      self.attributes = attributes
    end

    def errors
      @errors ||= Errors.new(self)
    end

    private

    def attributes=(attributes)
      unless attributes.nil?
        for key, value in attributes
          send("#{key}=", value )
        end
      end
    end

    # This hash keeps the errors of the object
    class Errors < HashWithIndifferentAccess

      def initialize(base)
        super() { |h, k|  h[k] = [] ; h[k] }
        @base = base
      end

      def count
        size
      end

      def empty?
        all? { |k, v| v && v.empty? }
      end

      # returns a specific fields error message.
      # if more than one error is available we will only return the first. If no error is available
      # we return an empty string
      def on(field)
        self[field].to_a.first
      end

      def add(field, error)
        self[field] << error
      end

      def add_to_base(error)
        add(:base, error)
      end

      def each_full
        full_messages.each { |msg| yield msg }
      end

      def full_messages
        result = []

        self.each do |key, messages|
          next if messages.blank?
          if key == 'base'
            result << "#{messages.first}"
          else
            result << "#{key.to_s.humanize} #{messages.first}"
          end
        end

        result
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 4 rubygems

Version Path
solidus_backend-1.0.0.pre vendor/bundle/gems/active_utils-2.2.3/lib/active_utils/common/validateable.rb
tanga_active_utils-2.2.3.1 lib/active_utils/common/validateable.rb
tanga_active_utils-2.2.3 lib/active_utils/common/validateable.rb
active_utils-2.2.3 lib/active_utils/common/validateable.rb
active_utils-2.2.2 lib/active_utils/common/validateable.rb
active_utils-2.2.1 lib/active_utils/common/validateable.rb
active_utils-2.2.0 lib/active_utils/common/validateable.rb
active_utils-2.1.1 lib/active_utils/common/validateable.rb
active_utils-2.1.0 lib/active_utils/common/validateable.rb
active_utils-2.0.2 lib/active_utils/common/validateable.rb
active_utils-2.0.1 lib/active_utils/common/validateable.rb
active_utils-2.0.0 lib/active_utils/common/validateable.rb
active_utils-1.0.5 lib/active_utils/common/validateable.rb
active_utils-1.0.4 lib/active_utils/common/validateable.rb
active_utils-1.0.3 lib/active_utils/common/validateable.rb
active_utils-1.0.2 lib/active_utils/common/validateable.rb
am_credit_card-0.0.1 lib/active_merchant/validateable.rb
active_utils-1.0.1 lib/active_utils/common/validateable.rb
active_utils-1.0.0 lib/active_utils/common/validateable.rb