module Plate # An asset is a CoffeeScript or Sass file that needs to be compiled before writing # to the destination. class Asset < Page def engines @engines ||= self.extensions.reverse.collect { |e| self.site.registered_asset_engines[e.gsub(/\./, '').to_sym] }.reject { |e| !e } end def extensions @extensions ||= self.basename.scan(/\.[^.]+/) end def format_extension self.extensions.reverse.detect { |e| !self.site.asset_engine_extensions.include?(e) } end def file_path "#{directory}/#{file_name}" end # Same as page, but no layout applied def rendered_content return @rendered_content if @rendered_content result = File.read(file) self.engines.each do |engine| template = engine.new() { result } result = template.render(self, :site => self.site) end @rendered_content = result end # Write this page to the destination. For static files this just results # in copying the file over to the destination def write! path = File.join(site.build_destination, file_path) FileUtils.mkdir_p(File.dirname(path)) File.open(path, 'w') do |f| f.write(self.rendered_content) end end end end