ありがとうレウコス!!!
私もRackミドルウェアについて考えましたが、もっと「ラマーズ」な解決策がなかったのではないかと思います(生来のように)。
とにかく、これはうまくいき、素晴らしいです!
コードの修正版は次のとおりです。
require 'coffee-script'
# An attempt to allow Ramaze to generate Js file from coffee files
module Rack
class BrewedCoffee
def initialize(app, options = {})
@app = app
@lookup_path = options[:lookup_path].nil? ? [__DIR__] : options[:lookup_path]
end
def call(env)
name = env['PATH_INFO']
# Continue processing if requested file is not js
return @app.call(env) if File.extname(name) != '.js'
coffee_name = "#{name[0...-3]}.coffee"
@lookup_path.each do |p|
coffee_file = File.join(p, coffee_name)
next unless File.file?(coffee_file)
response_body = CoffeeScript.compile(File.read(coffee_file))
headers = {}
headers["Content-Type"] = 'application/javascript'
headers["Content-Length"] = response_body.length.to_s
return [200, headers, [response_body]]
end
@app.call(env)
end
end
end
私は物事を少しきれいにして、Ramaze の依存関係を取り除きます。このようにして、純粋な Rack ミドルウェアになります :)。
あなたはそれを呼び出すことができます:
m.use Rack::BrewedCoffee, :lookup_path => Ramaze.options.roots
さようなら、アンドレアス