Merge branch 'master' of git@github.com:rails/rails
This commit is contained in:
commit
119a41e21d
@ -1,5 +1,7 @@
|
||||
*2.3.0 [Edge]*
|
||||
|
||||
* Deprecated formatted_polymorphic_url. [Jeremy Kemper]
|
||||
|
||||
* Added the option to declare an asset_host as an object that responds to call (see http://github.com/dhh/asset-hosting-with-minimum-ssl for an example) [DHH]
|
||||
|
||||
* Added support for multiple routes.rb files (useful for plugin engines). This also means that draw will no longer clear the route set, you have to do that by hand (shouldn't make a difference to you unless you're doing some funky stuff) [DHH]
|
||||
|
@ -36,12 +36,11 @@ module ActionController
|
||||
#
|
||||
# * <tt>edit_polymorphic_url</tt>, <tt>edit_polymorphic_path</tt>
|
||||
# * <tt>new_polymorphic_url</tt>, <tt>new_polymorphic_path</tt>
|
||||
# * <tt>formatted_polymorphic_url</tt>, <tt>formatted_polymorphic_path</tt>
|
||||
#
|
||||
# Example usage:
|
||||
#
|
||||
# edit_polymorphic_path(@post) # => "/posts/1/edit"
|
||||
# formatted_polymorphic_path([@post, :pdf]) # => "/posts/1.pdf"
|
||||
# polymorphic_path(@post, :format => :pdf) # => "/posts/1.pdf"
|
||||
module PolymorphicRoutes
|
||||
# Constructs a call to a named RESTful route for the given record and returns the
|
||||
# resulting URL string. For example:
|
||||
@ -55,7 +54,7 @@ module PolymorphicRoutes
|
||||
# ==== Options
|
||||
#
|
||||
# * <tt>:action</tt> - Specifies the action prefix for the named route:
|
||||
# <tt>:new</tt>, <tt>:edit</tt>, or <tt>:formatted</tt>. Default is no prefix.
|
||||
# <tt>:new</tt> or <tt>:edit</tt>. Default is no prefix.
|
||||
# * <tt>:routing_type</tt> - Allowed values are <tt>:path</tt> or <tt>:url</tt>.
|
||||
# Default is <tt>:url</tt>.
|
||||
#
|
||||
@ -78,9 +77,8 @@ def polymorphic_url(record_or_hash_or_array, options = {})
|
||||
end
|
||||
|
||||
record = extract_record(record_or_hash_or_array)
|
||||
format = extract_format(record_or_hash_or_array, options)
|
||||
namespace = extract_namespace(record_or_hash_or_array)
|
||||
|
||||
|
||||
args = case record_or_hash_or_array
|
||||
when Hash; [ record_or_hash_or_array ]
|
||||
when Array; record_or_hash_or_array.dup
|
||||
@ -100,11 +98,10 @@ def polymorphic_url(record_or_hash_or_array, options = {})
|
||||
end
|
||||
|
||||
args.delete_if {|arg| arg.is_a?(Symbol) || arg.is_a?(String)}
|
||||
args << format if format
|
||||
|
||||
|
||||
named_route = build_named_route_call(record_or_hash_or_array, namespace, inflection, options)
|
||||
|
||||
url_options = options.except(:action, :routing_type, :format)
|
||||
url_options = options.except(:action, :routing_type)
|
||||
unless url_options.empty?
|
||||
args.last.kind_of?(Hash) ? args.last.merge!(url_options) : args << url_options
|
||||
end
|
||||
@ -119,7 +116,7 @@ def polymorphic_path(record_or_hash_or_array, options = {})
|
||||
polymorphic_url(record_or_hash_or_array, options)
|
||||
end
|
||||
|
||||
%w(edit new formatted).each do |action|
|
||||
%w(edit new).each do |action|
|
||||
module_eval <<-EOT, __FILE__, __LINE__
|
||||
def #{action}_polymorphic_url(record_or_hash, options = {})
|
||||
polymorphic_url(record_or_hash, options.merge(:action => "#{action}"))
|
||||
@ -131,9 +128,21 @@ def #{action}_polymorphic_path(record_or_hash, options = {})
|
||||
EOT
|
||||
end
|
||||
|
||||
def formatted_polymorphic_url(record_or_hash, options = {})
|
||||
ActiveSupport::Deprecation.warn("formatted_polymorphic_url has been deprecated. Please pass :format to the polymorphic_url method instead", caller)
|
||||
options[:format] = record_or_hash.pop if Array === record_or_hash
|
||||
polymorphic_url(record_or_hash, options)
|
||||
end
|
||||
|
||||
def formatted_polymorphic_path(record_or_hash, options = {})
|
||||
ActiveSupport::Deprecation.warn("formatted_polymorphic_path has been deprecated. Please pass :format to the polymorphic_path method instead", caller)
|
||||
options[:format] = record_or_hash.pop if record_or_hash === Array
|
||||
polymorphic_url(record_or_hash, options.merge(:routing_type => :path))
|
||||
end
|
||||
|
||||
private
|
||||
def action_prefix(options)
|
||||
options[:action] ? "#{options[:action]}_" : options[:format] ? "formatted_" : ""
|
||||
options[:action] ? "#{options[:action]}_" : ''
|
||||
end
|
||||
|
||||
def routing_type(options)
|
||||
@ -171,17 +180,7 @@ def extract_record(record_or_hash_or_array)
|
||||
else record_or_hash_or_array
|
||||
end
|
||||
end
|
||||
|
||||
def extract_format(record_or_hash_or_array, options)
|
||||
if options[:action].to_s == "formatted" && record_or_hash_or_array.is_a?(Array)
|
||||
record_or_hash_or_array.pop
|
||||
elsif options[:format]
|
||||
options[:format]
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
# Remove the first symbols from the array and return the url prefix
|
||||
# implied by those symbols.
|
||||
def extract_namespace(record_or_hash_or_array)
|
||||
|
@ -209,7 +209,7 @@ def xml_http_request?
|
||||
# delimited list in the case of multiple chained proxies; the last
|
||||
# address which is not trusted is the originating IP.
|
||||
def remote_ip
|
||||
remote_addr_list = @env['REMOTE_ADDR'] && @env['REMOTE_ADDR'].split(',').collect(&:strip)
|
||||
remote_addr_list = @env['REMOTE_ADDR'] && @env['REMOTE_ADDR'].scan(/[^,\s]+/)
|
||||
|
||||
unless remote_addr_list.blank?
|
||||
not_trusted_addrs = remote_addr_list.reject {|addr| addr =~ TRUSTED_PROXIES}
|
||||
@ -369,11 +369,9 @@ def request_uri
|
||||
# Returns the interpreted \path to requested resource after all the installation
|
||||
# directory of this application was taken into account.
|
||||
def path
|
||||
path = (uri = request_uri) ? uri.split('?').first.to_s : ''
|
||||
|
||||
# Cut off the path to the installation directory if given
|
||||
path.sub!(%r/^#{ActionController::Base.relative_url_root}/, '')
|
||||
path || ''
|
||||
path = request_uri.to_s[/\A[^\?]*/]
|
||||
path.sub!(/\A#{ActionController::Base.relative_url_root}/, '')
|
||||
path
|
||||
end
|
||||
memoize :path
|
||||
|
||||
|
@ -71,20 +71,22 @@ def test_url_helper_with_url_options
|
||||
polymorphic_url(@article, :param1 => '10')
|
||||
end
|
||||
|
||||
def test_formatted_url_helper
|
||||
expects(:formatted_article_url).with(@article, :pdf)
|
||||
formatted_polymorphic_url([@article, :pdf])
|
||||
def test_formatted_url_helper_is_deprecated
|
||||
expects(:articles_url).with(:format => :pdf)
|
||||
assert_deprecated do
|
||||
formatted_polymorphic_url([@article, :pdf])
|
||||
end
|
||||
end
|
||||
|
||||
def test_format_option
|
||||
@article.save
|
||||
expects(:formatted_article_url).with(@article, :pdf)
|
||||
expects(:article_url).with(@article, :format => :pdf)
|
||||
polymorphic_url(@article, :format => :pdf)
|
||||
end
|
||||
|
||||
def test_format_option_with_url_options
|
||||
@article.save
|
||||
expects(:formatted_article_url).with(@article, :pdf, :param1 => '10')
|
||||
expects(:article_url).with(@article, :format => :pdf, :param1 => '10')
|
||||
polymorphic_url(@article, :format => :pdf, :param1 => '10')
|
||||
end
|
||||
|
||||
@ -157,14 +159,14 @@ def test_nesting_with_array_containing_namespace_and_singleton_resource
|
||||
def test_nesting_with_array_containing_singleton_resource_and_format
|
||||
@tag = Tag.new
|
||||
@tag.save
|
||||
expects(:formatted_article_response_tag_url).with(@article, @tag, :pdf)
|
||||
formatted_polymorphic_url([@article, :response, @tag, :pdf])
|
||||
expects(:article_response_tag_url).with(@article, @tag, :format => :pdf)
|
||||
polymorphic_url([@article, :response, @tag], :format => :pdf)
|
||||
end
|
||||
|
||||
def test_nesting_with_array_containing_singleton_resource_and_format_option
|
||||
@tag = Tag.new
|
||||
@tag.save
|
||||
expects(:formatted_article_response_tag_url).with(@article, @tag, :pdf)
|
||||
expects(:article_response_tag_url).with(@article, @tag, :format => :pdf)
|
||||
polymorphic_url([@article, :response, @tag], :format => :pdf)
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user