Class Webgen::SourceHandler::Metainfo
In: lib/webgen/sourcehandler/metainfo.rb
Parent: Object
Error RenderError CommandNotFoundError LoadError NodeCreationError ::Rake::TaskLib WebgenTask Node Context\n[lib/webgen/context.rb\nlib/webgen/context/nodes.rb\nlib/webgen/context/render.rb\nlib/webgen/context/tags.rb] Tree FileSystem Sitemap Feed Copy Virtual Sitemap Directory Page Fragment Template Memory Metainfo Coderay Sitemap IncludeFile BreadcrumbTrail Langbar TikZ Menu Tags Fragments Resource Website Tidy Head Less Kramdown Xmllint Blocks Helpers Configuration Comparable Language Path StandardError CmdParse::CommandParser CommandParser CmdParse::Command RunCommand CreateCommand WebguiCommand ApplyCommand WebsiteAccess Main Loggable OutputPathHelpers ExecuteCommand Link Date Relocatable Metainfo ::Kramdown::Converter::Html KramdownHtmlConverter Cache Blackboard WebsiteManager Logger Page ProxyNode Utils Scss RDoc Sass Erb RDiscount Erubis Haml Maruku Builder RedCloth AccessHash TarArchive Stacked FileSystem lib/webgen/cache.rb lib/webgen/error.rb lib/webgen/languages.rb lib/webgen/website.rb lib/webgen/blackboard.rb lib/webgen/tree.rb lib/webgen/websitemanager.rb lib/webgen/logger.rb lib/webgen/context/tags.rb lib/webgen/configuration.rb lib/webgen/path.rb lib/webgen/webgentask.rb lib/webgen/page.rb lib/webgen/node.rb lib/webgen/cli/run_command.rb lib/webgen/cli/utils.rb lib/webgen/cli/apply_command.rb lib/webgen/cli/webgui_command.rb lib/webgen/cli.rb lib/webgen/cli/create_command.rb Color CLI ClassMethods WebsiteAccess LanguageManager lib/webgen/output/filesystem.rb Output lib/webgen/common/sitemap.rb Common lib/webgen/sourcehandler/metainfo.rb lib/webgen/sourcehandler/memory.rb lib/webgen/sourcehandler/copy.rb lib/webgen/sourcehandler/directory.rb lib/webgen/sourcehandler.rb lib/webgen/sourcehandler/page.rb lib/webgen/sourcehandler/template.rb lib/webgen/sourcehandler/fragment.rb lib/webgen/sourcehandler/sitemap.rb lib/webgen/sourcehandler/virtual.rb lib/webgen/sourcehandler/feed.rb OutputPathHelpers Base SourceHandler lib/webgen/tag/coderay.rb lib/webgen/tag/relocatable.rb lib/webgen/tag/menu.rb lib/webgen/tag/langbar.rb lib/webgen/tag/executecommand.rb lib/webgen/tag/breadcrumbtrail.rb lib/webgen/tag/metainfo.rb lib/webgen/tag/link.rb lib/webgen/tag/includefile.rb lib/webgen/tag/date.rb lib/webgen/tag/tikz.rb lib/webgen/tag/sitemap.rb Base Tag lib/webgen/contentprocessor/less.rb lib/webgen/contentprocessor/scss.rb lib/webgen/contentprocessor/blocks.rb lib/webgen/contentprocessor/rdoc.rb lib/webgen/contentprocessor/sass.rb lib/webgen/contentprocessor/erb.rb lib/webgen/contentprocessor/rdiscount.rb lib/webgen/contentprocessor/tags.rb lib/webgen/contentprocessor/erubis.rb lib/webgen/contentprocessor/kramdown/html.rb lib/webgen/contentprocessor/haml.rb lib/webgen/contentprocessor/maruku.rb lib/webgen/contentprocessor/xmllint.rb lib/webgen/contentprocessor/kramdown.rb lib/webgen/contentprocessor/head.rb lib/webgen/contentprocessor/builder.rb lib/webgen/contentprocessor/tidy.rb lib/webgen/contentprocessor/redcloth.rb lib/webgen/contentprocessor/fragments.rb lib/webgen/contentprocessor.rb ContentProcessor lib/webgen/source/tararchive.rb lib/webgen/source/stacked.rb lib/webgen/source/resource.rb lib/webgen/source/filesystem.rb Source Loggable Webgen dot/m_81_0.png

Handles meta information files which provide meta information for other files.

Methods

Included Modules

Base Webgen::WebsiteAccess

Constants

CKEY = [:metainfo, :nodes]

Public Class methods

Upon creation the object registers itself as listener for some node hooks.

[Source]

    # File lib/webgen/sourcehandler/metainfo.rb, line 17
17:     def initialize
18:       website.blackboard.add_listener(:node_meta_info_changed?, method(:node_meta_info_changed?))
19:       website.blackboard.add_listener(:before_node_created, method(:before_node_created))
20:       website.blackboard.add_listener(:before_node_deleted, method(:before_node_deleted))
21:       website.blackboard.add_listener(:after_node_created, method(:after_node_created))
22:       self.nodes ||= []
23:     end

Public Instance methods

Create a meta info node from path.

[Source]

    # File lib/webgen/sourcehandler/metainfo.rb, line 26
26:     def create_node(path)
27:       page = page_from_path(path)
28:       super(path) do |node|
29:         [[:mi_paths, 'paths'], [:mi_alcn, 'alcn']].each do |mi_key, block_name|
30:           node.node_info[mi_key] = {}
31:           if page.blocks.has_key?(block_name) && (data = YAML::load(page.blocks[block_name].content))
32:             data.each do |key, value|
33:               key = Webgen::Path.make_absolute(path.parent_path, key)
34:               node.node_info[mi_key][key] = value
35:             end
36:           end
37:         end
38: 
39:         mark_all_matched_dirty(node, :no_old_data)
40: 
41:         website.cache.permanent[[:sh_metainfo_node_mi, node.alcn]] = {
42:           :mi_paths => node.node_info[:mi_paths],
43:           :mi_alcn => node.node_info[:mi_alcn]
44:         }
45: 
46:         self.nodes << node unless self.nodes.include?(node)
47:         self.nodes = self.nodes.sort_by {|n| n.alcn}
48:       end
49:     end

Private Instance methods

Update the meta information of a matched alcn after the node has been created.

[Source]

     # File lib/webgen/sourcehandler/metainfo.rb, line 99
 99:     def after_node_created(node)
100:       self.nodes.each do |n|
101:         n.node_info[:mi_alcn].each do |pattern, mi|
102:           node.meta_info.update(mi) if node =~ pattern
103:         end
104:       end
105:     end

Update the meta info of matched path before a node is created.

[Source]

    # File lib/webgen/sourcehandler/metainfo.rb, line 90
90:     def before_node_created(path)
91:       self.nodes.each do |node|
92:         node.node_info[:mi_paths].each do |pattern, mi|
93:           path.meta_info.update(mi) if Webgen::Path.match(path, pattern)
94:         end
95:       end
96:     end

Delete the meta info node node from the internal array.

[Source]

     # File lib/webgen/sourcehandler/metainfo.rb, line 119
119:     def before_node_deleted(node)
120:       return unless node.node_info[:processor] == self.class.name
121:       mark_all_matched_dirty(node, :force)
122:       website.cache.permanent.delete([:sh_metainfo_node_mi, node.alcn])
123:       self.nodes.delete(node)
124:     end

Mark all nodes that are matched by a path or an alcn specifcation in the meta info node node as dirty.

[Source]

    # File lib/webgen/sourcehandler/metainfo.rb, line 83
83:     def mark_all_matched_dirty(node, option = nil)
84:       node.tree.node_access[:alcn].each do |path, n|
85:         n.flag(:dirty_meta_info) if meta_info_changed?(node, n, option)
86:       end
87:     end

Return true if any meta information for node provided by mi_node has changed.

[Source]

    # File lib/webgen/sourcehandler/metainfo.rb, line 64
64:     def meta_info_changed?(mi_node, node, option = nil)
65:       cached = website.cache.permanent[[:sh_metainfo_node_mi, mi_node.alcn]]
66:       (mi_node.node_info[:mi_paths].any? do |pattern, mi|
67:          Webgen::Path.match(node.node_info[:creation_path], pattern) &&
68:            (option == :force || (!cached && option == :no_old_data) || mi != cached[:mi_paths][pattern])
69:        end || mi_node.node_info[:mi_alcn].any? do |pattern, mi|
70:          node =~ pattern && (option == :force || (!cached && option == :no_old_data) || mi != cached[:mi_alcn][pattern])
71:        end || (option == :no_old_data && cached &&
72:                ((cached[:mi_paths].keys - mi_node.node_info[:mi_paths].keys).any? do |p|
73:                  Webgen::Path.match(node.node_info[:creation_path], p)
74:                 end || (cached[:mi_alcn].keys - mi_node.node_info[:mi_alcn].keys).any? do |p|
75:                   node =~ p
76:                 end)
77:                )
78:        )
79:     end

Check if the node has meta information from any meta info node and if so, if the meta info node in question has changed.

[Source]

     # File lib/webgen/sourcehandler/metainfo.rb, line 109
109:     def node_meta_info_changed?(node)
110:       self.nodes.each do |n|
111:         if n.flagged?(:created) && meta_info_changed?(n, node)
112:           node.flag(:dirty_meta_info)
113:           return
114:         end
115:       end
116:     end

[Validate]