class Middleman::CoreExtensions::FrontMatter::FrontmatterManager
Constants
- YAML_ERRORS
Attributes
app[R]
Public Class Methods
new(app)
click to toggle source
# File lib/middleman-core/core_extensions/front_matter.rb, line 54 def initialize(app) @app = app @cache = {} end
Public Instance Methods
clear_data(file)
click to toggle source
# File lib/middleman-core/core_extensions/front_matter.rb, line 64 def clear_data(file) # Copied from Sitemap::Store#file_to_path, but without # removing the file extension file = File.expand_path(file, @app.root) prefix = @app.source_dir.sub(/\/$/, "") + "/" return unless file.include?(prefix) path = file.sub(prefix, "") @cache.delete(path) end
data(path)
click to toggle source
# File lib/middleman-core/core_extensions/front_matter.rb, line 59 def data(path) p = normalize_path(path) @cache[p] ||= frontmatter_and_content(p) end
frontmatter_and_content(path)
click to toggle source
Get the frontmatter and plain content from a file @param [String] path @return [Array<Thor::CoreExt::HashWithIndifferentAccess, String>]
# File lib/middleman-core/core_extensions/front_matter.rb, line 132 def frontmatter_and_content(path) full_path = if Pathname(path).relative? File.join(@app.source_dir, path) else path end data = {} content = nil if !::Middleman::Util.binary?(full_path) content = File.read(full_path) begin if content =~ /\A.*coding:/ lines = content.split(/\n/) lines.shift content = lines.join("\n") end if result = parse_yaml_front_matter(content) data, content = result elsif result = parse_json_front_matter(content) data, content = result end rescue => e # Probably a binary file, move on end end [::Middleman::Util.recursively_enhance(data).freeze, content] end
manipulate_resource_list(resources)
click to toggle source
Update the main sitemap resource list @return [void]
# File lib/middleman-core/core_extensions/front_matter.rb, line 171 def manipulate_resource_list(resources) resources.each do |r| if !r.proxy? && !r.data.nil? && r.data["ignored"] == true r.frontmatter_ignored = true end end resources end
normalize_path(path)
click to toggle source
# File lib/middleman-core/core_extensions/front_matter.rb, line 165 def normalize_path(path) path.sub(%r{^#{@app.source_dir}\/}, "") end
parse_json_front_matter(content)
click to toggle source
# File lib/middleman-core/core_extensions/front_matter.rb, line 106 def parse_json_front_matter(content) json_regex = /\A(;;;\s*\n.*?\n?)^(;;;\s*$\n?)/m if content =~ json_regex content = content.sub(json_regex, "") begin json = ($1+$2).sub(";;;", "{").sub(";;;", "}") data = ActiveSupport::JSON.decode(json) rescue => e logger.error "JSON Exception: #{e.message}" return false end else return false end [data, content] rescue [{}, content] end
parse_yaml_front_matter(content)
click to toggle source
Parse YAML frontmatter out of a string @param [String] content @return [Array<Hash, String>]
# File lib/middleman-core/core_extensions/front_matter.rb, line 85 def parse_yaml_front_matter(content) yaml_regex = /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m if content =~ yaml_regex content = content.sub(yaml_regex, "") begin data = YAML.load($1) rescue *YAML_ERRORS => e logger.error "YAML Exception: #{e.message}" return false end else return false end [data, content] rescue [{}, content] end