Sha256: 058663c45b8c07fc5e57532c6bb62958a19e991d68dfe6914fe3358e1b2ce4b7

Contents?: true

Size: 1.25 KB

Versions: 14

Compression:

Stored size: 1.25 KB

Contents

require 'routing_filter/base'

module RoutingFilter
  class ForceExtension < Base
    attr_reader :extension, :exclude

    def initialize(*args)
      super
      @extension ||= 'html'
      @exclude = %r(^(http.?://[^/]+)?\/?$) if @exclude.nil?
    end

    def around_recognize(path, env, &block)
      extract_extension!(path) unless excluded?(path)
      yield(path, env)
    end

    def around_generate(*args, &block)
      returning yield do |result|
        url = result.is_a?(Array) ? result.first : result
        append_extension!(url) if append_extension?(url)
      end
    end

    protected

      def extract_extension!(path)
        path.sub! /\.#{extension}$/, ''
        $1
      end

      def append_extension?(url)
        !(url.blank? || excluded?(url) || mime_extension?(url))
      end

      def excluded?(url)
        case exclude
        when Regexp
          url =~ exclude
        when Proc
          exclude.call(url)
        end
      end

      def mime_extension?(url)
        url =~ /\.#{Mime::EXTENSION_LOOKUP.keys.join('|')}(\?|$)/
      end

      def append_extension!(url)
        url.replace url.sub(/(\?|$)/, ".#{extension}\\1")
      end

      def append_page!(url, page)
        url.replace "#{url}/pages/#{page}"
      end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
refinerycms-0.9.7.14 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.13 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.11 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.10 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.9 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.8 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.7 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.6 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.5 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.4 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.3 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.2 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7.1 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb
refinerycms-0.9.7 vendor/plugins/i18n/lib/routing_filter/routing_filter/force_extension.rb