Sha256: 584f67929471e3a1d232838bbc594d16095482bb326529ab3dc622d1e5ba3413

Contents?: true

Size: 901 Bytes

Versions: 11

Compression:

Stored size: 901 Bytes

Contents

module Redwood

## Implements a single undo list for the Sup instance
##
## The basic idea is to keep a list of lambdas to undo
## things. When an action is called (such as 'archive'),
## a lambda is registered with UndoManager that will
## undo the archival action

class UndoManager
  include Redwood::Singleton

  def initialize
    @@actionlist = []
  end

  def register desc, *actions, &b
    actions = [*actions.flatten]
    actions << b if b
    raise ArgumentError, "need at least one action" unless actions.length > 0
    @@actionlist.push :desc => desc, :actions => actions
  end

  def undo
    unless @@actionlist.empty?
      actionset = @@actionlist.pop
      actionset[:actions].each { |action| action.call }
      BufferManager.flash "undid #{actionset[:desc]}"
    else
      BufferManager.flash "nothing more to undo!"
    end
  end

  def clear
    @@actionlist = []
  end
end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
sup-1.2 lib/sup/undo.rb
sup-1.1 lib/sup/undo.rb
sup-1.0 lib/sup/undo.rb
sup-0.23 lib/sup/undo.rb
sup-0.22.1 lib/sup/undo.rb
sup-0.22.0 lib/sup/undo.rb
sup-0.21.0 lib/sup/undo.rb
sup-0.20.0 lib/sup/undo.rb
sup-0.19.0 lib/sup/undo.rb
sup-0.18.0 lib/sup/undo.rb
sup-0.17.0 lib/sup/undo.rb