In Files
Parent
- Object
Information
Class Index
![show/hide quicksearch [+]](../assets/icon/find.png)
- Malt
- Malt::Engine
- Malt::Engine::Abstract
- Malt::Engine::BlueCloth
- Malt::Engine::Builder
- Malt::Engine::Erb
- Malt::Engine::Erector
- Malt::Engine::Erubis
- Malt::Engine::Haml
- Malt::Engine::Kramdown
- Malt::Engine::Less
- Malt::Engine::Liquid
- Malt::Engine::Markaby
- Malt::Engine::Mustache
- Malt::Engine::RDiscount
- Malt::Engine::RDoc
- Malt::Engine::Radius
- Malt::Engine::Radius::context;
- Malt::Engine::RagTag
- Malt::Engine::RedCloth
- Malt::Engine::Ruby
- Malt::Engine::Sass
- Malt::Engine::Tenjin
- Malt::Format
- Malt::Format::Abstract
- Malt::Format::AbstractTemplate
- Malt::Format::Builder
- Malt::Format::CSS
- Malt::Format::Erb
- Malt::Format::Erector
- Malt::Format::HTML
- Malt::Format::Haml
- Malt::Format::LESS
- Malt::Format::Latex
- Malt::Format::Liquid
- Malt::Format::Markaby
- Malt::Format::Markdown
- Malt::Format::Mustache
- Malt::Format::PDF
- Malt::Format::RBHTML
- Malt::Format::RDoc
- Malt::Format::RHTML
- Malt::Format::Radius
- Malt::Format::RagTag
- Malt::Format::Ruby
- Malt::Format::SCSS
- Malt::Format::Sass
- Malt::Format::Tenjin
- Malt::Format::Text
- Malt::Format::Textile
- Malt::Format::UnsupportedConversion
- Malt::Format::XML
- Malt::Format::YAML
- Malt::Kernel
- Malt::Machine
- Malt::Markup
- Malt::NoEngineError
- Malt::Template
- Hash
- OpenStruct
Machine
The Machine class encapsulates Malt’s main methods along with configuratable settings to control which engines and formats are used for rendering.
Constants
- MARKUP
List of markup types. These are formats that just allow markup transformations and do not provide for data injection.
- TEMPLATES
List of template types. These are template formats that provide data injection.
- TEMPLATES_SAFE
Template types that prevent arbitrary Ruby code execution.
Public Class Methods
config[:types] - list of formats to handle
config[:priority] - list of prioritized engines
# File lib/malt/machine.rb, line 27 27: def initialize(config={}) 28: if priority = config[:priority] 29: priority.map!{ |e| e.to_sym } 30: else 31: priority = [] 32: end 33: if types = config[:types] || config[:type] 34: formats = {} 35: engines = {} 36: types.each do |type| 37: k = ext_to_type(type) 38: formats[k] = Malt::Format.registry[k] 39: engines[k] = Malt::Engine.registry[k] 40: end 41: else 42: formats = Malt::Format.registry #.dup 43: engines = Malt::Engine.registry #.dup 44: end 45: @formats = formats 46: @engines = engines 47: @priority = priority 48: end
Public Instance Methods
# File lib/malt/machine.rb, line 73 73: def engine?(ext) 74: type = ext_to_type(ext) 75: engines.key?(type) 76: ##ext = ext.to_s 77: ##type = ext.sub(/^\./, '').strip 78: ##return false if type.empty? 79: ###@registry.key?(ext.to_sym) 80: ###Engine.registry[type.to_sym] 81: ##Engine.registry.key?(type.to_sym) 82: end
# File lib/malt/machine.rb, line 56 56: def engines 57: @engines 58: end
# File lib/malt/machine.rb, line 91 91: def file(file, options={}) 92: type = options[:type] || options[:format] || File.extname(file) 93: type = ext_to_type(type) 94: malt_class = formats[type] 95: raise "unkown type -- #{type}" unless malt_class 96: malt_class.new(options.merge(:file=>file,:type=>type)) 97: end
# File lib/malt/machine.rb, line 85 85: def format?(ext) 86: type = ext_to_type(ext) 87: formats.key?(type) 88: end
# File lib/malt/machine.rb, line 51 51: def formats 52: @formats 53: end
Engine priorities.
Returns an Array of symbolic engine names.
# File lib/malt/machine.rb, line 63 63: def priority(type=nil) 64: if type 65: type = type.to_s.downcase.to_sym 66: @priority.unshift(type) 67: @priority.uniq! # assuming first are kept 68: end 69: @priority 70: end
Render template directly.
parameters[:file] - File name of template. Used to read text. parameters[:text] - Text of template document. parameters[:type] - File type/extension used to look up engine. parameters[:pass] - If not a supported type return text rather than raise an error. parameters[:engine] - Force the use of a this specific engine. parameters[:to] - Format to convert to (usual default is `html`).
# File lib/malt/machine.rb, line 129 129: def render(parameters={}, &body) 130: type = parameters[:type] 131: file = parameters[:file] 132: text = parameters[:text] 133: engine = parameters[:engine] 134: 135: type = file_type(file, type) 136: text = file_read(file) unless text 137: 138: engine_class = engine(type, engine) 139: 140: if engine_class 141: parameters[:type] = type 142: parameters[:text] = text 143: 144: engine = engine_class.new 145: engine.render(parameters, &body) 146: else 147: if parameters[:pass] 148: text 149: else 150: raise NoEngineError, "no engine to handle `#{type}' format" 151: end 152: end 153: end
# File lib/malt/machine.rb, line 100 100: def text(text, options={}) 101: if file = options[:file] 102: ext = File.extname(file) 103: ext = nil if ext.empty? 104: end 105: type = options[:type] || options[:format] || ext 106: type = ext_to_type(type) 107: malt_class = formats[type] || Format::Text # :pass ? 108: #raise "unkown type -- #{type}" unless malt_class 109: malt_class.new(options.merge(:text=>text,:file=>file,:type=>type)) 110: end
Private Instance Methods
# File lib/malt/machine.rb, line 158 158: def engine(type, engine=nil) 159: type = ext_to_type(type) 160: #engine = engine || Malt.config.engine[type] # FIXME 161: case engine 162: when Class 163: #raise unless Engine.registry[type].include?(engine) 164: engine 165: when String, Symbol 166: match = engine.to_s.downcase.to_sym 167: #Engine.registry[type].find{ |e| e.basename.downcase == match } 168: #engines[type].find{ |e| e.basename.downcase == match } 169: engines[type].find{ |e| match == e.type } 170: else 171: if engines[type] 172: #Engine.registry[type].first 173: types = engines[type] 174: if prior = types.find{ |e| priority.include?(e.type) } 175: return prior 176: end 177: if default = Engine.defaults[type] 178: return default #if engine?(default.type) 179: end 180: types.first 181: else 182: nil 183: end 184: end 185: end
Normal file extension to a symbol type reference.
# File lib/malt/machine.rb, line 211 211: def ext_to_type(ext) 212: ext = ext.to_s.downcase 213: return nil if ext.empty? 214: if ext[0,1] == '.' 215: ext[1..1].to_sym 216: else 217: ext.to_sym 218: end 219: end
TODO: Handle File objects and URLs.
# File lib/malt/machine.rb, line 206 206: def file_read(file) 207: File.read(file) 208: end
# File lib/malt/machine.rb, line 188 188: def file_type(file, type=nil) 189: ext = type || File.extname(file) 190: ext = ext.to_s.downcase 191: if ext.empty? 192: nil 193: elsif ext[0,1] == '.' 194: ext[1..1].to_sym 195: else 196: ext.to_sym 197: end 198: end
Disabled; run with --debug to generate this.