class CMDx::Errors

def add(key, value)

def add(key, value)
  errors[key] ||= []
  errors[key] << value
  errors[key].uniq!
end

def added?(key, val)

def added?(key, val)
  return false unless key?(key)
  errors[key].include?(val)
end

def each

def each
  errors.each_key do |key|
    errors[key].each { |val| yield(key, val) }
  end
end

def full_message(key, value)

def full_message(key, value)
  "#{key} #{value}"
end

def full_messages

def full_messages
  errors.each_with_object([]) do |(key, arr), memo|
    arr.each { |val| memo << full_message(key, val) }
  end
end

def full_messages_for(key)

def full_messages_for(key)
  return [] unless key?(key)
  errors[key].map { |val| full_message(key, val) }
end

def initialize

def initialize
  @errors = {}
end

def invalid?

def invalid?
  !valid?
end

def merge!(hash)

def merge!(hash)
  errors.merge!(hash) do |_, arr1, arr2|
    arr3 = arr1 + arr2
    arr3.uniq!
    arr3
  end
end

def messages_for(key)

def messages_for(key)
  return [] unless key?(key)
  errors[key]
end

def present?

def present?
  !blank?
end

def to_hash(full_messages = false)

def to_hash(full_messages = false)
  return errors unless full_messages
  errors.each_with_object({}) do |(key, arr), memo|
    memo[key] = arr.map { |val| full_message(key, val) }
  end
end