class Card::Error

exceptions and errors. (arguably most of these should be Card::Exception)

Constants

KEY_MAP

Attributes

backtrace[W]
card[RW]

Public Class Methods

new(message=nil) click to toggle source
Calls superclass method
# File lib/card/error.rb, line 24
def initialize message=nil
  if message.is_a? Card
    self.card = message
    message = message_from_card
  end
  super message
end
report(exception, card) click to toggle source
# File lib/card/error.rb, line 129
def report exception, card
  e = cardify_exception exception, card
  self.current = e
  e.report
  e
end
rescue_card(card) { || ... } click to toggle source
# File lib/card/error.rb, line 136
def rescue_card card
  yield
rescue StandardError => e
  report e, card
end

Private Class Methods

add_card_errors(card, exception) click to toggle source
# File lib/card/error.rb, line 157
def add_card_errors card, exception
  label = exception.class.to_s.split("::").last
  card.errors.add label, exception.message
end
card_error_class(exception, card) click to toggle source
# File lib/card/error.rb, line 162
def card_error_class exception, card
  # "simple" error messages are visible to end users and are generally not
  # treated as software bugs (though they may be "shark" bugs)
  case exception
  when ActiveRecord::RecordInvalid
    invalid_card_error_class card
  when ActiveRecord::RecordNotFound, ActionController::MissingFile
    Card::Error::NotFound
  else
    Card::Error::ServerError
  end
end
cardify_exception(exception, card) click to toggle source
# File lib/card/error.rb, line 144
def cardify_exception exception, card
  card_exception =
    if exception.is_a? Card::Error
      exception
    else
      card_error_class(exception, card).new exception.message
    end
  card_exception.card ||= card
  card_exception.backtrace ||= exception.backtrace
  add_card_errors card, card_exception if card.errors.empty?
  card_exception
end
invalid_card_error_class(card) click to toggle source
# File lib/card/error.rb, line 175
def invalid_card_error_class card
  KEY_MAP.each do |key, klass|
    return klass if card.errors.key? key
  end
  Card::Error
end

Public Instance Methods

backtrace() click to toggle source
Calls superclass method
# File lib/card/error.rb, line 36
def backtrace
  @backtrace || super
end
card_message_text() click to toggle source
# File lib/card/error.rb, line 40
def card_message_text
  card.errors.first&.message
end
message_from_card() click to toggle source
# File lib/card/error.rb, line 32
def message_from_card
  ::I18n.t :lib_exception_for_card, cardname: card.name, message: card_message_text
end