Sha256: 7c254c57d161fae5fb4488ddf2f463e8ac0360c94e021cdaf91052ebf7c72c07

Contents?: true

Size: 1.96 KB

Versions: 2

Compression:

Stored size: 1.96 KB

Contents

# -*- encoding : utf-8 -*-
class Card; module Set; class All
# Set: All cards (Abort)
#
# The Card#abort method is for cleanly exiting an action without continuing
# to process any further events.
#
# Three statuses are supported:
#
module Abort;
extend Card::Set
def self.source_location; "/Users/ethan/dev/decko/gem/card/mod/core/set/all/abort.rb"; end
#   failure: adds an error, returns false on save
#   success: no error, returns true on save
#   triumph: similar to success, but if called on a subcard
#            it causes the entire action to abort (not just the subcard)
def abort status, msg="action canceled"
  director.abort
  if status == :failure && errors.empty?
    errors.add :abort, msg
  elsif status.is_a?(Hash) && status[:success]
    success << status[:success]
    status = :success
  end
  raise Card::Error::Abort.new(status, msg)
end

def aborting
  yield
  errors.any? ? abort(:failure) : abort(:success)
end

def abortable
  yield
rescue Card::Error::Abort => e
  handle_abort_error e
end

private

def handle_abort_error e
  case e.status
  when :triumph
    @supercard ? raise(e) : true
  when :success
    abort_success
  end
end

def abort_success
  if @supercard
    @supercard.subcards.delete key
    @supercard.director.subdirectors.delete self
    expire :soft
  end
  true
end

# this is an override of standard rails behavior that rescues abort
# makes it so that :success abortions do not rollback
def with_transaction_returning_status &block
  status = nil
  self.class.transaction do
    add_to_transaction
    remember_transaction_record_state
    status = abortable(&block)
    raise ActiveRecord::Rollback unless status
  end
  status
end

# FIXME: these two do not belong here!

public

event :notable_exception_raised do
  error = Card::Error.current
  Rails.logger.debug "#{error.message}\n#{error.backtrace * "\n  "}"
end

def success
  Env.success(name)
end
end;end;end;end;
# ~~ generated from /Users/ethan/dev/decko/gem/card/mod/core/set/all/abort.rb ~~

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
card-1.101.7 tmpsets/set/mod002-core/all/abort.rb
card-1.101.6 tmpsets/set/mod002-core/all/abort.rb