Sha256: 71c8eb51bfc70c36f048a20c5f815accc50aa074b09a2c695879a922b94fcfc1
Contents?: true
Size: 1.22 KB
Versions: 10
Compression:
Stored size: 1.22 KB
Contents
module Apimaster::Generators # Manifest captures the actions a generator performs. Instantiate # a manifest with an optional target object, hammer it with actions, # then replay or rewind on the object of your choice. # # Example: # manifest = Manifest.new { |m| # m.make_directory '/foo' # m.create_file '/foo/bar.txt' # } # manifest.replay(creator) # manifest.rewind(destroyer) class Manifest attr_reader :target # Take a default action target. Yield self if block given. def initialize(target = nil) @target, @actions = target, [] yield self if block_given? end # Record an action. def method_missing(action, *args, &block) @actions << [action, args, block] end # Replay recorded actions. def replay(target = nil) send_actions(target || @target, @actions) end # Rewind recorded actions. def rewind(target = nil) send_actions(target || @target, @actions.reverse) end # Erase recorded actions. def erase @actions = [] end private def send_actions(target, actions) actions.each do |method, args, block| target.send(method, *args, &block) end end end end
Version data entries
10 entries across 10 versions & 1 rubygems