Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Configurable tld length for subdomains in ActionDispatch::Http::URL #10

Closed
wants to merge 1 commit into from

2 participants

@simonjefford

This is a rebased version of the patch for this lighthouse ticket. After seeing wycats tweet re: pull requests I thought I'd try my luck this way...

@wycats
Collaborator

Done

@jrom jrom referenced this pull request from a commit in jrom/rails
@asanghi asanghi fixed javascript helper doc to close issue #10 raised by jialin 74f3f74
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Sep 9, 2010
  1. @simonjefford
This page is out of date. Refresh to see the latest.
View
10 actionpack/lib/action_dispatch/http/url.rb
@@ -1,7 +1,9 @@
module ActionDispatch
module Http
module URL
- # Returns the complete \URL used for this request.
+ mattr_accessor :tld_length
+
+ # Returns the complete URL used for this request.
def url
protocol + host_with_port + fullpath
end
@@ -85,13 +87,13 @@ def domain(tld_length = 1)
# returned for "dev.www.rubyonrails.org". You can specify a different <tt>tld_length</tt>,
# such as 2 to catch <tt>["www"]</tt> instead of <tt>["www", "rubyonrails"]</tt>
# in "www.rubyonrails.co.uk".
- def subdomains(tld_length = 1)
+ def subdomains(tld_length = @@tld_length)
return [] unless named_host?(host)
parts = host.split('.')
parts[0..-(tld_length+2)]
end
- def subdomain(tld_length = 1)
+ def subdomain(tld_length = @@tld_length)
subdomains(tld_length).join('.')
end
@@ -102,4 +104,4 @@ def named_host?(host)
end
end
end
-end
+end
View
10 actionpack/lib/action_dispatch/railtie.rb
@@ -8,5 +8,15 @@ class Railtie < Rails::Railtie
config.action_dispatch.ip_spoofing_check = true
config.action_dispatch.show_exceptions = true
config.action_dispatch.best_standards_support = true
+ config.action_dispatch.tld_length = 1
+
+ # Prepare dispatcher callbacks and run 'prepare' callbacks
+ initializer "action_dispatch.prepare_dispatcher" do |app|
+ ActionDispatch::Callbacks.to_prepare { app.routes_reloader.execute_if_updated }
+ end
+
+ initializer "action_dispatch.configure" do |app|
+ ActionDispatch::Http::URL.tld_length = app.config.action_dispatch.tld_length
+ end
end
end
View
5 actionpack/test/dispatch/request_test.rb
@@ -116,6 +116,9 @@ class RequestTest < ActiveSupport::TestCase
request = stub_request 'HTTP_HOST' => "dev.www.rubyonrails.co.uk"
assert_equal %w( dev www ), request.subdomains(2)
+ request = stub_request 'HTTP_HOST' => "dev.www.rubyonrails.co.uk", :tld_length => 2
+ assert_equal %w( dev www ), request.subdomains
+
request = stub_request 'HTTP_HOST' => "foobar.foobar.com"
assert_equal %w( foobar ), request.subdomains
@@ -472,7 +475,9 @@ class RequestTest < ActiveSupport::TestCase
def stub_request(env = {})
ip_spoofing_check = env.key?(:ip_spoofing_check) ? env.delete(:ip_spoofing_check) : true
ip_app = ActionDispatch::RemoteIp.new(Proc.new { }, ip_spoofing_check, @trusted_proxies)
+ tld_length = env.key?(:tld_length) ? env.delete(:tld_length) : 1
ip_app.call(env)
+ ActionDispatch::Http::URL.tld_length = tld_length
ActionDispatch::Request.new(env)
end
View
7 railties/test/application/initializers/frameworks_test.rb
@@ -65,6 +65,13 @@ def notify
assert_equal ["notify"], Foo.action_methods
end
+ # AD
+ test "action_dispatch extensions are applied to ActionDispatch" do
+ add_to_config "config.action_dispatch.tld_length = 2"
+ require "#{app_path}/config/environment"
+ assert_equal 2, ActionDispatch::Http::URL.tld_length
+ end
+
# AS
test "if there's no config.active_support.bare, all of ActiveSupport is required" do
use_frameworks []
Something went wrong with that request. Please try again.