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