Class: JekyllDefaultLayout::Generator

Inherits:
Jekyll::Generator
  • Object
show all
Defined in:
lib/jekyll-default-layout/generator.rb

Overview

Injects front matter defaults to set default layouts, if they exist

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(site) ⇒ Generator

Returns a new instance of Generator.



9
10
11
# File 'lib/jekyll-default-layout/generator.rb', line 9

def initialize(site)
  @site = site
end

Instance Attribute Details

#siteObject

Returns the value of attribute site.



4
5
6
# File 'lib/jekyll-default-layout/generator.rb', line 4

def site
  @site
end

Instance Method Details

#documentsObject



50
51
52
# File 'lib/jekyll-default-layout/generator.rb', line 50

def documents
  [site.pages, site.posts.docs].flatten
end

#generate(site) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/jekyll-default-layout/generator.rb', line 13

def generate(site)
  @site = site
  documents.each do |document|
    next unless should_set_layout?(document)
    document.data["layout"] = layout_for(document)
  end
end

#layout_exists?(layout) ⇒ Boolean

Does the given layout exist for the site?

Returns:

  • (Boolean)


26
27
28
# File 'lib/jekyll-default-layout/generator.rb', line 26

def layout_exists?(layout)
  !site.layouts[layout].nil?
end

#layout_for(document) ⇒ Object

What layout is appropriate for this document, if any



40
41
42
43
44
45
46
47
48
# File 'lib/jekyll-default-layout/generator.rb', line 40

def layout_for(document)
  if page?(document) && layout_exists?("page")
    "page"
  elsif post?(document) && layout_exists?("post")
    "post"
  elsif layout_exists?("default")
    "default"
  end
end

#layout_specified?(document) ⇒ Boolean

Has the user already specified a default for this layout?

Returns:

  • (Boolean)


31
32
33
# File 'lib/jekyll-default-layout/generator.rb', line 31

def layout_specified?(document)
  document.data.key? "layout"
end

#markdown?(document) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/jekyll-default-layout/generator.rb', line 35

def markdown?(document)
  markdown_converter.matches(document.extname)
end

#markdown_converterObject



54
55
56
# File 'lib/jekyll-default-layout/generator.rb', line 54

def markdown_converter
  @markdown_converter ||= site.find_converter_instance(Jekyll::Converters::Markdown)
end

#page?(document) ⇒ Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/jekyll-default-layout/generator.rb', line 62

def page?(document)
  document.is_a?(Jekyll::Page)
end

#post?(document) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/jekyll-default-layout/generator.rb', line 58

def post?(document)
  document.is_a?(Jekyll::Document) && document.collection.label == "posts"
end

#should_set_layout?(document) ⇒ Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/jekyll-default-layout/generator.rb', line 21

def should_set_layout?(document)
  markdown?(document) && !layout_specified?(document)
end