class GuidesStyleMbland::Layouts

We have to essentially recreate the ::Jekyll::Layout constructor to loosen the default restriction that layouts be included in the site source.

Constants

LAYOUTS_DIR
SEARCH_RESULTS_LAYOUT

Public Class Methods

new(site, subdir, layout_file) click to toggle source
# File lib/guides_style_mbland/layouts.rb, line 13
def initialize(site, subdir, layout_file)
  @site = site
  @base = File.join(LAYOUTS_DIR, subdir)
  @name = "#{layout_file}.html"
  @path = File.join @base, @name
  parse_content_and_data File.join(@base, name)
  process name
end
register(site) click to toggle source
# File lib/guides_style_mbland/layouts.rb, line 35
def self.register(site)
  site.layouts['guides_style_mbland_default'] = new(site, '', 'default')
  site.layouts['guides_style_mbland_generated_home_redirect'] = new(
    site, 'generated', 'home-redirect')
  register_search_results_layout(site)
end
register_search_results_layout(site) click to toggle source
# File lib/guides_style_mbland/layouts.rb, line 42
def self.register_search_results_layout(site)
  layouts_dir = File.join(site.source, site.config['layouts_dir'])
  results_layout = File.join(layouts_dir, "#{SEARCH_RESULTS_LAYOUT}.html")
  unless File.exist?(results_layout)
    site.layouts[SEARCH_RESULTS_LAYOUT] = new(
      site, '', SEARCH_RESULTS_LAYOUT)
  end
end

Private Instance Methods

parse_content_and_data(file_path) click to toggle source
# File lib/guides_style_mbland/layouts.rb, line 22
def parse_content_and_data(file_path)
  self.data = {}
  self.content = File.read(file_path)

  front_matter_pattern = /^(---\n.*)---\n/m
  front_matter_match = front_matter_pattern.match content
  return unless front_matter_match

  self.content = front_matter_match.post_match
  self.data = SafeYAML.load front_matter_match[1],  safe: true
end