Class: Closure::Server
- Inherits:
-
Object
- Object
- Closure::Server
- Defined in:
- lib/closure/server.rb
Overview
The Closure Script rack server. There is Middleware available too.
Instance Method Summary collapse
-
#call(env) ⇒ Array
Rack interface.
-
#initialize(sources, home_page = nil) ⇒ Server
constructor
A new instance of Server.
Constructor Details
#initialize(sources, home_page = nil) ⇒ Server
Returns a new instance of Server.
29 30 31 32 33 |
# File 'lib/closure/server.rb', line 29 def initialize(sources, home_page = nil) @sources = sources @home_page = home_page @working_dir = Dir.getwd end |
Instance Method Details
#call(env) ⇒ Array
Rack interface.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/closure/server.rb', line 38 def call(env) path_info = Rack::Utils.unescape(env['PATH_INFO']) return not_found if path_info.include? '..' # unsafe # Stand-alone projects will find this useful if @home_page and path_info == '/' Dir.chdir @working_dir response = FileResponse.new(env, @home_page) response = Script.new(env, @sources, @home_page).response unless response.found? if response.header["X-Cascade"] == "pass" if ENV["CLOSURE_SCRIPT_WELCOME"] welcome = File.join Closure.base_path, 'scripts', 'welcome' response = Script.new(env, @sources, welcome).response end end return response.finish end # Usurp the deps.js in detected Closure Library begin if path_info == @sources.deps_js(env) return @sources.deps_response(File.dirname(path_info), env).finish end rescue Sources::BaseJsNotFoundError end # Then check all the sources @sources.each do |dir, path| next unless path if path_info =~ %r{^#{Regexp.escape(path)}(/.*|)$} Dir.chdir @working_dir filename = File.join(dir, $1) response = FileResponse.new(env, filename) if !response.found? and File.extname(path_info) == '' response = FileResponse.new(env, filename + '.html') end response = Script.new(env, @sources, filename).response unless response.found? return response.finish end end not_found end |