Class: Opal::SourceMapServer
- Inherits:
-
Object
- Object
- Opal::SourceMapServer
- Defined in:
- opal/lib/opal/sprockets/source_map_server.rb
Defined Under Namespace
Classes: Cache
Instance Attribute Summary collapse
-
#prefix ⇒ Object
readonly
Returns the value of attribute prefix.
-
#sprockets ⇒ Object
readonly
Returns the value of attribute sprockets.
Class Method Summary collapse
- .cache(sprockets) ⇒ Object
- .cache_key_for_path(logical_path) ⇒ Object
- .get_map_cache(sprockets, logical_path) ⇒ Object
- .set_map_cache(sprockets, logical_path, map_contents) ⇒ Object
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(sprockets, prefix = '/') ⇒ SourceMapServer
constructor
A new instance of SourceMapServer.
- #inspect ⇒ Object
- #not_found(*messages) ⇒ Object
Constructor Details
#initialize(sprockets, prefix = '/') ⇒ SourceMapServer
Returns a new instance of SourceMapServer
71 72 73 74 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 71 def initialize sprockets, prefix = '/' @sprockets = sprockets @prefix = prefix end |
Instance Attribute Details
#prefix ⇒ Object (readonly)
Returns the value of attribute prefix
76 77 78 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 76 def prefix @prefix end |
#sprockets ⇒ Object (readonly)
Returns the value of attribute sprockets
76 77 78 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 76 def sprockets @sprockets end |
Class Method Details
.cache(sprockets) ⇒ Object
61 62 63 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 61 def self.cache(sprockets) @cache ||= sprockets.cache ? sprockets : Cache.new end |
.cache_key_for_path(logical_path) ⇒ Object
65 66 67 68 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 65 def self.cache_key_for_path(logical_path) base_name = logical_path.gsub(/\.js#{REGEXP_END}/, '') File.join('opal', 'source_maps', base_name) end |
.get_map_cache(sprockets, logical_path) ⇒ Object
49 50 51 52 53 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 49 def self.get_map_cache(sprockets, logical_path) logical_path = logical_path.gsub(/\.js#{REGEXP_END}/, '') cache_key = cache_key_for_path(logical_path+'.map') cache(sprockets).cache_get(cache_key) end |
.set_map_cache(sprockets, logical_path, map_contents) ⇒ Object
55 56 57 58 59 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 55 def self.set_map_cache(sprockets, logical_path, map_contents) logical_path = logical_path.gsub(/\.js#{REGEXP_END}/, '') cache_key = cache_key_for_path(logical_path+'.map') cache(sprockets).cache_set(cache_key, map_contents) end |
Instance Method Details
#call(env) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 82 def call(env) prefix_regex = %r{^(?:#{prefix}/|/)} path_info = CGI.unescape(env['PATH_INFO'].to_s).sub(prefix_regex, '') case path_info when %r{^(.*)\.self\.map$} path = $1 asset = sprockets[path+'.js'] return not_found(path) if asset.nil? # "logical_name" of a BundledAsset keeps the .js extension source = SourceMapServer.get_map_cache(sprockets, asset.logical_path) return not_found(asset) if source.nil? map = JSON.parse(source) map['sources'] = map['sources'].map {|s| "#{prefix}/#{s}"} source = map.to_json return [200, {"Content-Type" => "text/json"}, [source.to_s]] when %r{^(.*)\.rb$} begin asset = sprockets.resolve(path_info.sub(/\.rb#{REGEXP_END}/,'')) rescue Sprockets::FileNotFound return not_found(path_info) end return [200, {"Content-Type" => "text/ruby"}, [Pathname(asset).read]] else not_found(path_info) end end |
#inspect ⇒ Object
78 79 80 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 78 def inspect "#<#{self.class}:#{object_id}>" end |
#not_found(*messages) ⇒ Object
113 114 115 |
# File 'opal/lib/opal/sprockets/source_map_server.rb', line 113 def not_found(*) not_found = [404, {}, [{not_found: }.inspect]] end |