class Pieces::RouteCompiler
Public Class Methods
new(config)
click to toggle source
# File lib/pieces/route_compiler.rb, line 7 def initialize(config) @config = config end
Public Instance Methods
compile(files, name, route)
click to toggle source
# File lib/pieces/route_compiler.rb, line 11 def compile(files, name, route) files.merge("#{name}.html" => { contents: yield_pieces(route), type: 'text/html' }) end
Private Instance Methods
compile_piece(piece, data)
click to toggle source
# File lib/pieces/route_compiler.rb, line 35 def compile_piece(piece, data) view_model = ViewModel.new(data['_global'].merge(data).merge(config: config)) ::Tilt.new(piece_path(piece)).render(view_model) { yield_pieces(data) } end
merge_globals(data, route)
click to toggle source
# File lib/pieces/route_compiler.rb, line 25 def merge_globals(data, route) data.merge('_global' => route_globals(route).merge(data['_global'] || {})) end
piece_path(piece)
click to toggle source
# File lib/pieces/route_compiler.rb, line 17 def piece_path(piece) Dir["#{config.path}/app/views/{#{piece},#{piece}/#{piece},application/#{piece}}.html.*"].first end
pieces(data)
click to toggle source
# File lib/pieces/route_compiler.rb, line 29 def pieces(data) (data['_pieces'] || []).map do |piece| [piece.keys.first, merge_globals(piece.values.first, data)] end end
route_globals(route)
click to toggle source
# File lib/pieces/route_compiler.rb, line 21 def route_globals(route) config.globals.merge(route['_global'] || {}) end
yield_pieces(data)
click to toggle source
# File lib/pieces/route_compiler.rb, line 40 def yield_pieces(data) pieces(data).reduce('') do |contents, (piece, data)| contents << compile_piece(piece, data) end end