Add a :query option to link_to to allow specifying query string
This commit is contained in:
parent
028c3ec480
commit
9954bce2e3
2 changed files with 26 additions and 0 deletions
|
@ -104,3 +104,15 @@ Feature: link_to helper
|
|||
Then I should see '<a href="/needs_index/#foo">Needs Index Anchor</a>'
|
||||
Then I should see '<a href="/needs_index/?foo">Needs Index Query</a>'
|
||||
Then I should see '<a href="/needs_index/?foo#foo">Needs Index Query and Anchor</a>'
|
||||
|
||||
Scenario: link_to accepts a :query option that appends a query string
|
||||
Given a fixture app "indexable-app"
|
||||
And a file named "source/link_to.html.erb" with:
|
||||
"""
|
||||
<%= link_to "Needs Index String", "/needs_index.html", :query => "foo" %>
|
||||
<%= link_to "Needs Index Hash", "/needs_index.html", :query => { :foo => :bar } %>
|
||||
"""
|
||||
And the Server is running at "indexable-app"
|
||||
When I go to "/link_to/"
|
||||
Then I should see '<a href="/needs_index/?foo">Needs Index String</a>'
|
||||
Then I should see '<a href="/needs_index/?foo=bar">Needs Index Hash</a>'
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
require 'active_support/core_ext/object/to_query'
|
||||
|
||||
module Middleman
|
||||
module CoreExtensions
|
||||
# Built-in helpers
|
||||
|
@ -113,6 +115,10 @@ module Middleman
|
|||
# config[:relative_links] = true
|
||||
#
|
||||
# to config.rb to have all links default to relative.
|
||||
#
|
||||
# There is also a :query option that can be used to append a
|
||||
# query string, which can be expressed as either a String,
|
||||
# or a Hash which will be turned into URL parameters.
|
||||
def link_to(*args, &block)
|
||||
url_arg_index = block_given? ? 0 : 1
|
||||
options_index = block_given? ? 1 : 2
|
||||
|
@ -172,6 +178,14 @@ module Middleman
|
|||
end
|
||||
end
|
||||
|
||||
# Support a :query option that can be a string or hash
|
||||
query = options.delete(:query)
|
||||
if query
|
||||
uri = URI(args[url_arg_index])
|
||||
uri.query = query.respond_to?(:to_param) ? query.to_param : query.to_s
|
||||
args[url_arg_index] = uri.to_s
|
||||
end
|
||||
|
||||
super(*args, &block)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue