Sha256: 1b10120a4daca9125910932dc915da8a5b35220e16afab9538c7744a27f85e3c

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

module ServiceWorker
  class Route
    attr_reader :path, :options

    def initialize(path, options = {})
      @path = path
      @options = options

      @pattern = compile(path)
    end

    def match?(path)
      @pattern =~ path
    end

    def asset_name
      @options.fetch(:asset, @path.gsub(%r{^/}, ""))
    rescue NoMethodError
      raise RouteError, "Cannot determine asset name from #{path.inspect}. Please specify the :asset option for this path."
    end

    def headers
      @options.fetch(:headers, {})
    end

    private

    def compile(path)
      if path.respond_to?(:to_str)
        special_chars = %w[. + ( )]
        pattern = path.to_str.gsub(/([\*#{special_chars.join}])/) do |match|
          case match
          when "*"
            "(.*?)"
          when *special_chars
            Regexp.escape(match)
          else
            "([^/?&#]+)"
          end
        end
        /^#{pattern}$/
      elsif path.respond_to?(:match)
        path
      else
        raise TypeError, path
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
serviceworker-rails-0.2.0 lib/serviceworker/route.rb