Sha256: 73ec989fe39970e7fa3107e79cc3d2a03aba416819f74ac85cb66d986f0add45

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

module Webgen::SourceHandler

  # This source handler should be used for handling nodes that are created during the write
  # phase.
  class Memory

    include Webgen::WebsiteAccess
    include Base

    def initialize #:nodoc:
      website.blackboard.add_listener(:node_flagged) do |node, *flags|
        node.tree[node.node_info[:memory_source_alcn]].flag(:dirty) if node.node_info[:memory_source_alcn]
      end
    end

    # Create a node under +parent+ for the +path+. The +source_alcn+ specified the node that creates
    # this memory node when written. You have two options for providing the content for this node:
    # either you set +data+ to a string (or a Webgen::Path::SourceIO object) or you provide a block
    # which takes the created node as argument and return a string (or a Webgen::Path::SourceIO
    # object).
    def create_node(parent, path, source_alcn, data = nil)
      super(parent, path) do |node|
        node.node_info[:memory_source_alcn] = source_alcn
        (@data ||= {})[node.absolute_lcn] = lambda { data || yield(node) }
      end
    end

    # Return the content of the memory +node+. If the memory node was not created in this webgen
    # run, it will be flagged for reinitialization (and therefore recreation).
    def content(node)
      if @data && @data[node.absolute_lcn]
        @data[node.absolute_lcn].call
      else
        node.flag(:reinit)
        nil
      end
    end

  end

end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
gettalong-webgen-0.5.5.20081010 lib/webgen/sourcehandler/memory.rb
gettalong-webgen-0.5.5.20081012 lib/webgen/sourcehandler/memory.rb
gettalong-webgen-0.5.6.20081020 lib/webgen/sourcehandler/memory.rb
webgen-0.5.6 lib/webgen/sourcehandler/memory.rb