Sha256: 6628cac02b6b2172e3840c63ed2d71f670008f6d959540e0dfd514732e52a966

Contents?: true

Size: 1.04 KB

Versions: 4

Compression:

Stored size: 1.04 KB

Contents

module Sinatra
  module RoutingPlugin
    module RoutingHelpers
      # Used to retrieve the full url for a given named route alias from the named_paths data
      # Accepts parameters which will be substituted into the url if necessary
      # url_for(:accounts) => '/accounts'
      # url_for(:account, :id => 5) => '/account/5'
      # url_for(:admin, show, :id => 5, :name => "demo") => '/admin/path/5/demo'
      def url_for(*route_name)
        values = route_name.extract_options!
        mapped_url = self.class.named_paths[route_name] || self.class.named_paths[route_name.dup.unshift(self.class.app_name)]
        raise Sinatra::RouteNotFound.new("Route alias #{route_name.inspect} is not mapped to a url") unless mapped_url
        result_url = String.new(File.join(self.class.uri_root, mapped_url))
        result_url.scan(%r{/?(:\S+?)(?:/|$)}).each do |placeholder|
          value_key = placeholder[0][1..-1].to_sym
          result_url.gsub!(Regexp.new(placeholder[0]), values[value_key].to_s)
        end
        result_url
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
darkhelmet-sinatra_more-0.3.36 lib/sinatra/routing_plugin/routing_helpers.rb
darkhelmet-sinatra_more-0.3.35 lib/sinatra/routing_plugin/routing_helpers.rb
darkhelmet-sinatra_more-0.3.34 lib/sinatra/routing_plugin/routing_helpers.rb
darkhelmet-sinatra_more-0.3.33 lib/sinatra/routing_plugin/routing_helpers.rb