Module: ErrorMerger

Defined in:
lib/error_merger/version.rb,
lib/error_merger/error_merger.rb

Constant Summary collapse

VERSION =
'1.0.1'

Instance Method Summary collapse

Instance Method Details

#full_sentence(attribute, message) ⇒ Object



43
44
45
46
# File 'lib/error_merger/error_merger.rb', line 43

def full_sentence(attribute, message)
  m = full_message(attribute, message)
  m.end_with?('.') ? m : "#{m}."
end

#full_sentencesObject



32
33
34
35
36
37
38
39
40
41
# File 'lib/error_merger/error_merger.rb', line 32

def full_sentences
  if defined?(ActiveModel::Error)
    map do |error|
      m = error.full_message
      m.end_with?('.') ? m : "#{m}."
    end
  else
    map{ |attr, m| full_sentence(attr, m) }
  end
end

#join_sentencesObject Also known as: as_sentences



48
49
50
# File 'lib/error_merger/error_merger.rb', line 48

def join_sentences
  full_sentences.join ' '
end

#merge(assoc_or_errors, prefix = nil, attribute: :base) ⇒ Object

merges an association’s Errors set into the current set eg: @user.errors.merge @account

@user.errors.merge @account, "Account ##{@account.id}:"
@user.errors.merge @account, attribute: :account


7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/error_merger/error_merger.rb', line 7

def merge(assoc_or_errors, prefix=nil, attribute: :base)
  if assoc_or_errors.respond_to?(:errors) && assoc_or_errors.errors.is_a?(ActiveModel::Errors)
    errors = assoc_or_errors.errors
  else
    errors = assoc_or_errors
  end

  if attribute == :base && prefix.nil? && errors.instance_variable_defined?(:@base)
    prefix = "#{errors.instance_variable_get(:@base).class.model_name.human}: "
  else
    prefix ||= nil
  end
  prefix = "#{prefix} " if prefix =~ /[a-z0-9]$/i

  if errors.respond_to? :full_messages
    errors = errors.full_messages
  elsif errors.is_a? Hash
    errors = errors.values.flatten
  end

  errors.each do |error|
    add attribute, "#{prefix}#{error}"
  end
end