Sha256: 80e89c66fd84ccbc2fe03cb5c7404139b18368506f636019e890e77d0c01aeb6
Contents?: true
Size: 1.68 KB
Versions: 3
Compression:
Stored size: 1.68 KB
Contents
module Rail module Processor class CoffeeScript < Base def self.input_extension 'coffee' end def self.output_extension 'js' end def self.mime_type 'application/javascript' end def compile(filename, options = {}) code = process(filename, options) code = Uglifier.new.compile(code) if compress? code end private def process(filename, options = {}) output = [] code = File.read(filename) extract_requirements(code).each do |name| requirement_filename = find_requirement(name, filename) raise NotFoundError unless requirement_filename output << compile(requirement_filename, options) end output << ::CoffeeScript.compile(code, options) output.join end def find_requirement(name, referrer) assets = [name, "#{name}.coffee", "#{name}.js.coffee"] if name =~ /^\.\// # relative? path = File.dirname(referrer) assets.each do |asset| filename = File.join(path, asset) return filename if File.exist?(filename) end else assets.each do |asset| filename = pipeline.find(asset) return filename if filename end end nil end def extract_requirements(code) match = /\A(?:\s*(?:\#.*\n?)+)+/.match(code) or return [] match[0].split(/\n/).map(&:strip).reject(&:empty?).map do |line| match = /^\s*\#\s*=\s*require\s+(.*)$/.match(line) match ? match[1].strip.gsub(/(^['"])|(['"]$)/, '') : nil end.compact end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rail-0.1.1 | lib/rail/processor/coffee_script.rb |
rail-0.1.0 | lib/rail/processor/coffee_script.rb |
rail-0.0.8 | lib/rail/processor/coffee_script.rb |