Module: Jekyll::Convertible
Instance Method Summary collapse
-
#converter ⇒ Object
Determine which converter to use based on this convertible’s extension.
-
#do_layout(payload, layouts) ⇒ Object
Add any necessary layouts to this convertible document.
-
#output_ext ⇒ Object
Determine the extension depending on content_type.
-
#read_yaml(base, name) ⇒ Object
Read the YAML frontmatter.
-
#to_s ⇒ Object
Returns the contents as a String.
-
#transform ⇒ Object
Transform the contents based on the content type.
Instance Method Details
#converter ⇒ Object
Determine which converter to use based on this convertible’s extension.
Returns the Converter instance.
65 66 67 |
# File 'lib/jekyll/convertible.rb', line 65 def converter @converter ||= self.site.converters.find { |c| c.matches(self.ext) } end |
#do_layout(payload, layouts) ⇒ Object
Add any necessary layouts to this convertible document.
payload - The site payload Hash. layouts - A Hash of => “layout”.
Returns nothing.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/jekyll/convertible.rb', line 75 def do_layout(payload, layouts) info = { :filters => [Jekyll::Filters], :registers => { :site => self.site } } # render and transform content (this becomes the final content of the object) payload["pygments_prefix"] = converter.pygments_prefix payload["pygments_suffix"] = converter.pygments_suffix begin self.content = Liquid::Template.parse(self.content).render(payload, info) rescue => e puts "Liquid Exception: #{e.} in #{self.name}" end self.transform # output keeps track of what will finally be written self.output = self.content # recursively render layouts layout = layouts[self.data["layout"]] used = Set.new([layout]) while layout payload = payload.deep_merge({"content" => self.output, "page" => layout.data}) begin self.output = Liquid::Template.parse(layout.content).render(payload, info) rescue => e puts "Liquid Exception: #{e.} in #{self.data["layout"]}" end if layout = layouts[layout.data["layout"]] if used.include?(layout) layout = nil # avoid recursive chain else used << layout end end end end |
#output_ext ⇒ Object
Determine the extension depending on content_type.
Returns the String extension for the output file.
e.g. ".html" for an HTML output file.
57 58 59 |
# File 'lib/jekyll/convertible.rb', line 57 def output_ext converter.output_ext(self.ext) end |
#read_yaml(base, name) ⇒ Object
Read the YAML frontmatter.
base - The String path to the dir containing the file. name - The String filename of the file.
Returns nothing.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/jekyll/convertible.rb', line 29 def read_yaml(base, name) self.content = File.read(File.join(base, name)) if self.content =~ /^(---\s*\n.*?\n?)^(---\s*$\n?)/m self.content = $POSTMATCH data = begin YAML.load($1) rescue => e puts "YAML Exception reading #{name}: #{e.}" nil end self.data = data end self.data ||= {} end |
#to_s ⇒ Object
Returns the contents as a String.
19 20 21 |
# File 'lib/jekyll/convertible.rb', line 19 def to_s self.content || '' end |
#transform ⇒ Object
Transform the contents based on the content type.
Returns nothing.
49 50 51 |
# File 'lib/jekyll/convertible.rb', line 49 def transform self.content = converter.convert(self.content) end |