Sha256: 1851ccaea8b987c9088a51e48e0576de73a6ac8c16560bb4030c88b2954456ed

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

require "serviceworker/handlers/rack_handler"

module ServiceWorker
  module Handlers
    extend self

    def build(handler)
      resolve_handler(handler) || default_handler
    end

    def handler_for_route_match(route_match)
      options = route_match.options
      return webpacker_handler if Route.webpacker?(options)
      return sprockets_handler if Route.sprockets?(options)

      nil
    end

    def ===(other)
      other.respond_to?(:call)
    end

    def handler_for_name(name)
      available_handlers = %w[sprockets webpacker rack]
      if available_handlers.include?(name.to_s)
        send("#{name}_handler")
      else
        raise ServiceWorker::Error,
              "Unknown handler #{name.inspect}. Please use one of #{available_handlers.inspect}"
      end
    end

    def resolve_handler(handler)
      case handler
      when Handlers
        handler
      when Symbol, String
        handler_for_name(handler)
      end
    end

    def webpacker_handler
      require "serviceworker/handlers/webpacker_handler"
      ServiceWorker::Handlers::WebpackerHandler.new
    end

    def sprockets_handler
      require "serviceworker/handlers/sprockets_handler"
      ServiceWorker::Handlers::SprocketsHandler.new
    end

    def rack_handler
      ServiceWorker::Handlers::RackHandler.new
    end

    def default_handler
      if sprockets?
        sprockets_handler
      else
        rack_handler
      end
    end

    def webpacker?
      defined?(::Webpacker)
    end

    def sprockets?
      defined?(::Rails) && ::Rails.configuration.assets
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
serviceworker-rails-0.6.0 lib/serviceworker/handlers.rb