Call this within a transaction block to roll back the transaction and prevent any of its data from being rendered. You must reset the y-position yourself if you have performed any drawing operations that modify it.
# File lib/prawn/document/snapshot.rb, line 22 22: def rollback 23: raise RollbackTransaction 24: end
Run a block of drawing operations, to be completed atomically. If rollback is called or a RollbackTransaction exception is raised inside the block, all actions taken inside the block will be rolled back (with the exception of y-position, which you must restore yourself).
Returns true on success, or false if the transaction was rolled back.
# File lib/prawn/document/snapshot.rb, line 34 34: def transaction 35: snap = take_snapshot 36: yield 37: true 38: rescue RollbackTransaction 39: restore_snapshot(snap) 40: false 41: end
Rolls the page state back to the state of the given snapshot.
# File lib/prawn/document/snapshot.rb, line 59 59: def restore_snapshot(shot) 60: # Because these objects are referenced by identifier from the Pages 61: # dictionary, we can't just restore them over the current refs in 62: # page_content and current_page. We have to restore them over the old 63: # ones. 64: page.content = shot[:page_content].identifier 65: page.content.replace shot[:page_content] 66: 67: page.dictionary = shot[:current_page].identifier 68: page.dictionary.replace shot[:current_page] 69: page.dictionary.data[:Contents] = page.content 70: 71: @page_number = shot[:page_number] 72: 73: @page_number = shot[:page_number] 74: 75: @store.pages.data[:Kids] = shot[:page_kids].map{|id| @store[id]} 76: @store.pages.data[:Count] = shot[:page_kids].size 77: 78: if shot[:dests] 79: names.data[:Dests] = shot[:dests] 80: end 81: end
Takes a current snapshot of the document’s state, sufficient to reconstruct it after it was amended.
# File lib/prawn/document/snapshot.rb, line 48 48: def take_snapshot 49: {:page_content => Marshal.load(Marshal.dump(page.content)), 50: :current_page => Marshal.load(Marshal.dump(page.dictionary)), 51: :page_number => @page_number, 52: :page_kids => @store.pages.data[:Kids].map{|kid| kid.identifier}, 53: :dests => names? && 54: Marshal.load(Marshal.dump(names.data[:Dests]))} 55: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.