Sha256: 8e4d99cd385d75ead3e05c530798af4106acf692df5bfb3b965190311d14dc10

Contents?: true

Size: 1.74 KB

Versions: 104

Compression:

Stored size: 1.74 KB

Contents

require 'uri'

module Journey
  class Router
    class Utils
      # Normalizes URI path.
      #
      # Strips off trailing slash and ensures there is a leading slash.
      #
      #   normalize_path("/foo")  # => "/foo"
      #   normalize_path("/foo/") # => "/foo"
      #   normalize_path("foo")   # => "/foo"
      #   normalize_path("")      # => "/"
      def self.normalize_path(path)
        path = "/#{path}"
        path.squeeze!('/')
        path.sub!(%r{/+\Z}, '')
        path = '/' if path == ''
        path
      end

      # URI path and fragment escaping
      # http://tools.ietf.org/html/rfc3986
      module UriEscape
        # Symbol captures can generate multiple path segments, so include /.
        reserved_segment  = '/'
        reserved_fragment = '/?'
        reserved_pchar    = ':@&=+$,;%'

        safe_pchar    = "#{URI::REGEXP::PATTERN::UNRESERVED}#{reserved_pchar}"
        safe_segment  = "#{safe_pchar}#{reserved_segment}"
        safe_fragment = "#{safe_pchar}#{reserved_fragment}"
        if RUBY_VERSION >= '1.9'
          UNSAFE_SEGMENT  = Regexp.new("[^#{safe_segment}]", false).freeze
          UNSAFE_FRAGMENT = Regexp.new("[^#{safe_fragment}]", false).freeze
        else
          UNSAFE_SEGMENT = Regexp.new("[^#{safe_segment}]", false, 'N').freeze
          UNSAFE_FRAGMENT = Regexp.new("[^#{safe_fragment}]", false, 'N').freeze
        end
      end

      Parser = URI.const_defined?(:Parser) ? URI::Parser.new : URI

      def self.escape_path(path)
        Parser.escape(path.to_s, UriEscape::UNSAFE_SEGMENT)
      end

      def self.escape_fragment(fragment)
        Parser.escape(fragment.to_s, UriEscape::UNSAFE_FRAGMENT)
      end

      def self.unescape_uri(uri)
        Parser.unescape(uri)
      end
    end
  end
end

Version data entries

104 entries across 78 versions & 19 rubygems

Version Path
active_mailer-0.0.10 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
judge-2.0.5 vendor/bundle/ruby/2.1.0/gems/journey-1.0.4/lib/journey/router/utils.rb
swipe-rails-0.0.5 vendor/bundle/gems/journey-1.0.4/lib/journey/router/utils.rb
active_mailer-0.0.9 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
active_mailer-0.0.8 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
active_mailer-0.0.7 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
active_mailer-0.0.6 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
font-awesome-rails-3.1.1.2 vendor/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
font-awesome-rails-3.1.1.2 vendor/ruby/2.0.0/gems/journey-1.0.4/lib/journey/router/utils.rb
font-awesome-rails-3.1.1.1 vendor/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
font-awesome-rails-3.1.1.1 vendor/ruby/2.0.0/gems/journey-1.0.4/lib/journey/router/utils.rb
challah-1.0.0.beta3 vendor/bundle/gems/journey-1.0.4/lib/journey/router/utils.rb
fc-webicons-0.0.4 vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
challah-1.0.0.beta2 vendor/bundle/gems/journey-1.0.4/lib/journey/router/utils.rb
challah-1.0.0.beta vendor/bundle/gems/journey-1.0.4/lib/journey/router/utils.rb
fc-webicons-0.0.3 vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
fc-webicons-0.0.2 vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
fc-webicons-0.0.1 vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
active_mailer-0.0.5 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb
active_mailer-0.0.4 test/fixtures/dummyapp_rails_3.2/vendor/bundle/ruby/1.9.1/gems/journey-1.0.4/lib/journey/router/utils.rb