Skip to content

Instantly share code, notes, and snippets.

@naan
Forked from alexspeller/source_maps.rb
Last active December 14, 2015 13:48
Show Gist options
  • Save naan/5096056 to your computer and use it in GitHub Desktop.
Save naan/5096056 to your computer and use it in GitHub Desktop.
Monkey patch for Coffee Script v.1.6.2 Source Maps for Rails.
# config/initializers/source_maps.rb
if Rails.env.development?
module CoffeeScript
class SourceMapError < StandardError; end;
class << self
def compile script, options
script = script.read if script.respond_to?(:read)
if options.key?(:no_wrap) and !options.key?(:bare)
options[:bare] = options[:no_wrap]
else
options[:bare] = false
end
# adding source mapss option. (source maps option requires filename option.)
options[:sourceMap] = true
options[:filename] = options[:pathname].basename.to_s
ret = Source.context.call("CoffeeScript.compile", script, options)
map_dir = Rails.root.join("public/source_maps")
map_dir.mkpath
basename = options[:pathname].basename('.coffee')
map_file = map_dir.join "#{basename}.map"
coffee_file = map_dir.join "#{basename}.coffee"
# workaround for missing filename
source_map = JSON.load(ret["v3SourceMap"])
source_map["sources"][0] = options[:filename]
coffee_file.open('w') {|f| f.puts script }
map_file.open('w') {|f| f.puts source_map.to_json}
comment = "\n/*\n//@ sourceMappingURL=/source_maps/#{map_file.basename}\n*/\n"
return ret["js"] + comment
end
end
end
# Monkeypatch this method to include the scripts' pathname
require 'tilt/template'
module Tilt
class CoffeeScriptTemplate < Template
def evaluate(scope, locals, &block)
@output ||= CoffeeScript.compile(data, options.merge(:pathname => scope.pathname))
end
end
end
end
@dawez
Copy link

dawez commented Nov 28, 2015

also would like to know the status of this ...so far with rails 4..2.4 and ruby 2.2.0 but never seen the maps generated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment