Sha256: 7cbe1e6195c7d2c07237a20ab334c87452464288fbea565cf7d1c6e24b71ccc6

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

# The Card#abort method is for cleanly exiting an action without continuing
# to process any further events.
#
# Three statuses are supported:
#
#   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'
  if status == :failure && errors.empty?
    errors.add :abort, msg
  elsif status.is_a?(Hash) && status[:success]
    success << status[:success]
    status = :success
  end
  raise Card::Abort.new(status, msg)
end
module ClassMethods
  def create! opts
    card = Card.new opts
    card.act do
      card.save!
    end
    card
  end

  def create opts
    card = Card.new opts
    card.act do
      card.save
    end
    card
  end
end

def delete
  act do
    super
  end
end

def delete!
  act do
    super
  end
end

def save!(*)
  act do
    super
  end
end

def save(*)
  act do
    super
  end
end

def update_attributes opts
  act do
    super opts
  end
end

def update_attributes! opts
  act do
    super opts
  end
end

def abortable
  yield
rescue Card::Abort => e
  if e.status == :triumph
    @supercard ? raise(e) : true
  elsif e.status == :success
    if @supercard
      @supercard.subcards.delete key
      @supercard.director.subdirectors.delete self
      expire_soft
    end
    true
  end
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
  status = nil
  self.class.transaction do
    add_to_transaction
    status = abortable { yield }
    raise ActiveRecord::Rollback unless status
  end
  status
end

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

def success
  Env.success(cardname)
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
card-1.18.6 mod/01_core/set/all/actify.rb
card-1.18.5 mod/01_core/set/all/actify.rb
card-1.18.4 mod/01_core/set/all/actify.rb
card-1.18.3 mod/01_core/set/all/actify.rb
card-1.18.2 mod/01_core/set/all/actify.rb
card-1.18.1 mod/01_core/set/all/actify.rb