lib/serviceworker/middleware.rb in serviceworker-rails-0.3.1 vs lib/serviceworker/middleware.rb in serviceworker-rails-0.4.0

- old
+ new

@@ -3,53 +3,62 @@ class Middleware REQUEST_METHOD = "REQUEST_METHOD".freeze GET = "GET".freeze HEAD = "HEAD".freeze + # Initialize the Rack middleware for responding to serviceworker asset + # requests + # + # @app [#call] middleware stack + # @opts [Hash] options to inject + # @param opts [#match_route] :routes matches routes on PATH_INFO + # @param opts [Hash] :headers default headers to use for matched routes + # @param opts [#call] :handler resolves response from matched asset name + # @param opts [#info] :logger logs requests def initialize(app, opts = {}) @app = app @opts = opts @headers = opts.fetch(:headers, {}).merge(default_headers) @router = opts.fetch(:routes, ServiceWorker::Router.new) + @handler = @opts.fetch(:handler, default_handler) end def call(env) case env[REQUEST_METHOD] - when GET, HEAD + when GET, HEAD route_match = @router.match_route(env) return respond_to_match(route_match, env) if route_match end @app.call(env) end - private + private def default_headers { "Cache-Control" => "private, max-age=0, no-cache" } end def respond_to_match(route_match, env) env = env.merge("serviceworker.asset_name" => route_match.asset_name) - status, headers, body = handler.call(env) + status, headers, body = @handler.call(env) [status, headers.merge(@headers).merge(route_match.headers), body] end def info(msg) logger.info "[#{self.class}] - #{msg}" end - # TODO - # provide non-rails handler as default - def handler - @handler ||= @opts.fetch(:handler) - end - def logger @logger ||= @opts.fetch(:logger, Logger.new(STDOUT)) + end + + def default_handler + require "serviceworker/handler" + ServiceWorker::Handler.new end end end