Sha256: a3890b2598824068121ec16406057ac04fe94bc51ff0f5de869f6f47766a24c8

Contents?: true

Size: 1.44 KB

Versions: 5

Compression:

Stored size: 1.44 KB

Contents

# -*- encoding: utf-8 -*-

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

5 entries across 5 versions & 3 rubygems

Version Path
gettalong-webgen-0.5.7.20090227 lib/webgen/sourcehandler/memory.rb
gettalong-webgen-0.5.8.20090507 lib/webgen/sourcehandler/memory.rb
thewoolleyman-webgen-0.5.8.20090419 lib/webgen/sourcehandler/memory.rb
webgen-0.5.7 lib/webgen/sourcehandler/memory.rb
webgen-0.5.8 lib/webgen/sourcehandler/memory.rb