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



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

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

#index?(document) ⇒ Boolean

Returns:

  • (Boolean)


70
71
72
# File 'lib/jekyll-default-layout/generator.rb', line 70

def index?(document)
  document.url == "/"
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 rubocop:disable Metrics/PerceivedComplexity



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/jekyll-default-layout/generator.rb', line 42

def layout_for(document)
  if index?(document) && layout_exists?("home")
    "home"
  elsif 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? Note: We must use ‘to_liquid`, and not data, to ensure front matter defaults

Returns:

  • (Boolean)


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

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

#markdown?(document) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#markdown_converterObject



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

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

#page?(document) ⇒ Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/jekyll-default-layout/generator.rb', line 66

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

#post?(document) ⇒ Boolean

Returns:

  • (Boolean)


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

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