mholling-subdomain_routes 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION.yml +1 -1
- data/lib/subdomain_routes/url_writer.rb +11 -5
- data/spec/spec_helper.rb +10 -5
- data/spec/url_writing_spec.rb +43 -1
- metadata +3 -4
data/VERSION.yml
CHANGED
@@ -9,7 +9,7 @@ module SubdomainRoutes
|
|
9
9
|
ActionController::Routing::Routes.subdomain_procs
|
10
10
|
end
|
11
11
|
|
12
|
-
def rewrite_subdomain_options(options, host)
|
12
|
+
def rewrite_subdomain_options(options, host, port = nil, protocol = nil)
|
13
13
|
if subdomains = options[:subdomains]
|
14
14
|
old_subdomain, domain = split_host(host)
|
15
15
|
options_subdomain = options.has_key?(:subdomain) ? options[:subdomain].to_param.to_s.downcase : nil
|
@@ -36,6 +36,8 @@ module SubdomainRoutes
|
|
36
36
|
unless new_subdomain == old_subdomain
|
37
37
|
options[:only_path] = false
|
38
38
|
options[:host] = [ new_subdomain, domain ].reject(&:blank?).join('.')
|
39
|
+
options[:port] ||= port if port
|
40
|
+
options[:protocol] ||= protocol if protocol
|
39
41
|
end
|
40
42
|
options.delete(:subdomain)
|
41
43
|
end
|
@@ -50,11 +52,13 @@ module SubdomainRoutes
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def url_for_with_subdomains(options)
|
53
|
-
host
|
55
|
+
host = options[:host] || default_url_options[:host]
|
56
|
+
port = options[:port] || default_url_options[:port]
|
57
|
+
protocol = options[:protocol] || default_url_options[:protocol]
|
54
58
|
if options[:subdomains] && host.blank?
|
55
59
|
raise HostNotSupplied, "Missing host to link to! Please provide :host parameter or set default_url_options[:host]"
|
56
60
|
end
|
57
|
-
rewrite_subdomain_options(options, host)
|
61
|
+
rewrite_subdomain_options(options, host, port, protocol)
|
58
62
|
url_for_without_subdomains(options)
|
59
63
|
end
|
60
64
|
end
|
@@ -68,11 +72,13 @@ module SubdomainRoutes
|
|
68
72
|
end
|
69
73
|
|
70
74
|
def rewrite_with_subdomains(options)
|
71
|
-
host
|
75
|
+
host = options[:host] || @request.host
|
76
|
+
protocol = options[:protocol] || (@request.ssl? ? @request.protocol : nil)
|
77
|
+
port = options[:port] || (@request.port_string =~ /:(\d+)$/ ? $1.to_i : nil)
|
72
78
|
if options[:subdomains] && host.blank?
|
73
79
|
raise HostNotSupplied, "Missing host to link to!"
|
74
80
|
end
|
75
|
-
rewrite_subdomain_options(options, host)
|
81
|
+
rewrite_subdomain_options(options, host, port, protocol)
|
76
82
|
rewrite_without_subdomains(options)
|
77
83
|
end
|
78
84
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -34,32 +34,37 @@ def recognize_path(request)
|
|
34
34
|
ActionController::Routing::Routes.recognize_path(request.path, ActionController::Routing::Routes.extract_request_environment(request))
|
35
35
|
end
|
36
36
|
|
37
|
-
def in_controller_with_host(host, &block)
|
37
|
+
def in_controller_with_host(host, options = {}, &block)
|
38
38
|
spec = self
|
39
39
|
Class.new(ActionView::TestCase::TestController) do
|
40
40
|
include Spec::Matchers
|
41
41
|
end.new.instance_eval do
|
42
42
|
request.host = host
|
43
|
+
request.instance_eval do
|
44
|
+
@env.merge! 'HTTPS' => 'on','SERVER_PORT' => 443 if options[:protocol] =~ /^https(:\/\/)?$/
|
45
|
+
@env.merge! 'SERVER_PORT'=> options[:port] if options[:port]
|
46
|
+
end
|
43
47
|
copy_instance_variables_from(spec)
|
44
48
|
instance_eval(&block)
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
48
|
-
def in_object_with_host(host, &block)
|
52
|
+
def in_object_with_host(host, options = {}, &block)
|
49
53
|
spec = self
|
50
54
|
Class.new do
|
51
55
|
include Spec::Matchers
|
52
56
|
include ActionController::UrlWriter
|
53
57
|
end.new.instance_eval do
|
54
58
|
self.class.default_url_options = { :host => host }
|
59
|
+
self.class.default_url_options.merge! options.slice(:port, :protocol)
|
55
60
|
copy_instance_variables_from(spec)
|
56
61
|
instance_eval(&block)
|
57
62
|
end
|
58
63
|
end
|
59
64
|
|
60
|
-
def with_host(host, &block)
|
61
|
-
in_controller_with_host(host, &block)
|
62
|
-
in_object_with_host(host, &block)
|
65
|
+
def with_host(host, options = {}, &block)
|
66
|
+
in_controller_with_host(host, options.dup, &block)
|
67
|
+
in_object_with_host(host, options.dup, &block)
|
63
68
|
end
|
64
69
|
|
65
70
|
ActiveRecord::Base.class_eval do
|
data/spec/url_writing_spec.rb
CHANGED
@@ -62,6 +62,16 @@ describe "URL writing" do
|
|
62
62
|
url_for(@path_options).should == "http://#{host}/users"
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
[ [ "port", { :port => 8080 }, "http://#{host}:8080/users" ],
|
67
|
+
[ "protocol", { :protocol => "https" }, "https://#{host}/users" ] ].each do |variant, options, url|
|
68
|
+
it "should preserve the #{variant} when forcing the host" do
|
69
|
+
with_host "other.example.com", options do
|
70
|
+
users_path.should == url
|
71
|
+
url_for(@path_options).should == url
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
65
75
|
|
66
76
|
context "and a subdomain different from the host subdomain is explicitly requested" do
|
67
77
|
it "should change the host if the requested subdomain matches" do
|
@@ -137,6 +147,26 @@ describe "URL writing" do
|
|
137
147
|
end
|
138
148
|
end
|
139
149
|
end
|
150
|
+
|
151
|
+
it "should preserve the port when changing the host" do
|
152
|
+
[ [ subdomains.first, hosts.first, hosts.last ],
|
153
|
+
[ subdomains.last, hosts.last, hosts.first ] ].each do |subdomain, new_host, old_host|
|
154
|
+
with_host(old_host, :port => 8080) do
|
155
|
+
items_path(:subdomain => subdomain).should == "http://#{new_host}:8080/items"
|
156
|
+
url_for(@path_options.merge(:subdomain => subdomain)).should == "http://#{new_host}:8080/items"
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
it "should preserve the protocol when changing the host" do
|
162
|
+
[ [ subdomains.first, hosts.first, hosts.last ],
|
163
|
+
[ subdomains.last, hosts.last, hosts.first ] ].each do |subdomain, new_host, old_host|
|
164
|
+
with_host(old_host, :protocol => "https") do
|
165
|
+
items_path(:subdomain => subdomain).should == "https://#{new_host}/items"
|
166
|
+
url_for(@path_options.merge(:subdomain => subdomain)).should == "https://#{new_host}/items"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
140
170
|
|
141
171
|
it "should raise a routing error if the requested subdomain doesn't match" do
|
142
172
|
[ [ hosts.first, hosts.last ],
|
@@ -180,7 +210,7 @@ describe "URL writing" do
|
|
180
210
|
url_for(@path_options).should == "/events"
|
181
211
|
end
|
182
212
|
end
|
183
|
-
|
213
|
+
|
184
214
|
it "should force the host if the object has a different to_param from the current subdomain" do
|
185
215
|
with_host "example.com" do
|
186
216
|
city_events_url(@boston).should == "http://boston.example.com/events"
|
@@ -189,6 +219,18 @@ describe "URL writing" do
|
|
189
219
|
url_for(@path_options).should == "http://boston.example.com/events"
|
190
220
|
end
|
191
221
|
end
|
222
|
+
|
223
|
+
[ [ "port", { :port => 8080 }, "http://boston.example.com:8080/events" ],
|
224
|
+
[ "protocol", { :protocol => "https" }, "https://boston.example.com/events" ] ].each do |variant, options, url|
|
225
|
+
it "should preserve the #{variant} when forcing the host" do
|
226
|
+
with_host "example.com", options do
|
227
|
+
city_events_url(@boston).should == url
|
228
|
+
city_events_path(@boston).should == url
|
229
|
+
url_for(@url_options).should == url
|
230
|
+
url_for(@path_options).should == url
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
192
234
|
|
193
235
|
it "should raise an error if the object to_param is an invalid subdomain" do
|
194
236
|
@newyork = City.new
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mholling-subdomain_routes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Hollingworth
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-05 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -59,7 +59,6 @@ files:
|
|
59
59
|
- spec/validations_spec.rb
|
60
60
|
has_rdoc: false
|
61
61
|
homepage: http://github.com/mholling/subdomain_routes
|
62
|
-
licenses:
|
63
62
|
post_install_message:
|
64
63
|
rdoc_options:
|
65
64
|
- --charset=UTF-8
|
@@ -80,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
80
79
|
requirements: []
|
81
80
|
|
82
81
|
rubyforge_project:
|
83
|
-
rubygems_version: 1.
|
82
|
+
rubygems_version: 1.2.0
|
84
83
|
signing_key:
|
85
84
|
specification_version: 2
|
86
85
|
summary: A Rails library for incorporating subdomains into route generation and recognition.
|