Module: Card::Set::All::Actify

Extended by:
Card::Set
Defined in:
tmpsets/set/mod001-core/all/actify.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Methods included from I18nScope

#mod_name, #scope

Methods included from Loader

#clean_empty_module_from_hash, #clean_empty_modules, #extended, #pattern_and_modules_from_path, #process_base_modules, #register_set, #tmp_file_frame, #tmp_file_template, #tmp_file_wrapped_content, #write_tmp_file

Methods included from Helpers

#abstract_set?, #all_set?, #shortname

Methods included from Card::Set::AdvancedApi

#attachment, #ensure_set, #stage_method

Methods included from Format

#all_set_format_mod!, #define_on_format, #format, #register_set_format, #view

Methods included from Inheritance

#include_set, #include_set_formats

Methods included from Basket

#abstract_basket, #add_to_basket, #basket

Methods included from Trait

#card_accessor, #card_reader, #card_writer

Methods included from Event

#event

Instance Method Details

#abort(status, msg = "action canceled") ⇒ Object

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)

Raises:



14
15
16
17
18
19
20
21
22
23
# File 'tmpsets/set/mod001-core/all/actify.rb', line 14

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

#abortableObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'tmpsets/set/mod001-core/all/actify.rb', line 63

def abortable
  yield
rescue Card::Error::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

#saveObject



47
48
49
# File 'tmpsets/set/mod001-core/all/actify.rb', line 47

def save(*)
  act { super }
end

#save!Object



43
44
45
# File 'tmpsets/set/mod001-core/all/actify.rb', line 43

def save!(*)
  act { super }
end

#successObject



95
96
97
# File 'tmpsets/set/mod001-core/all/actify.rb', line 95

def success
  Env.success(cardname)
end

#update_attributes(*args) ⇒ Object



55
56
57
# File 'tmpsets/set/mod001-core/all/actify.rb', line 55

def update_attributes *args
  act(*args) { super }
end

#update_attributes!(*args) ⇒ Object



59
60
61
# File 'tmpsets/set/mod001-core/all/actify.rb', line 59

def update_attributes! *args
  act(*args) { super }
end

#valid?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'tmpsets/set/mod001-core/all/actify.rb', line 51

def valid?(*)
  act { super }
end

#with_transaction_returning_statusObject

this is an override of standard rails behavior that rescues abort makes it so that :success abortions do not rollback



80
81
82
83
84
85
86
87
88
# File 'tmpsets/set/mod001-core/all/actify.rb', line 80

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