Commit 2b966b414091e3bd225405ab442f223c66b26249
1 parent
2623f171
Exists in
staging
and in
42 other branches
ActionItem519: routing hosted domain paths into content_viewer
controller git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2319 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
6 changed files
with
50 additions
and
3 deletions
Show diff stats
config/environment.rb
@@ -104,6 +104,8 @@ require 'acts_as_having_image' | @@ -104,6 +104,8 @@ require 'acts_as_having_image' | ||
104 | require 'sqlite_extension' | 104 | require 'sqlite_extension' |
105 | require 'will_paginate' | 105 | require 'will_paginate' |
106 | 106 | ||
107 | +require 'route_if' | ||
108 | + | ||
107 | # load a local configuration if present, but not under test environment. | 109 | # load a local configuration if present, but not under test environment. |
108 | if ENV['RAILS_ENV'] != 'test' | 110 | if ENV['RAILS_ENV'] != 'test' |
109 | localconfigfile = File.join(RAILS_ROOT, 'config', 'local.rb') | 111 | localconfigfile = File.join(RAILS_ROOT, 'config', 'local.rb') |
config/routes.rb
@@ -15,9 +15,14 @@ ActionController::Routing::Routes.draw do |map| | @@ -15,9 +15,14 @@ ActionController::Routing::Routes.draw do |map| | ||
15 | ## Public controllers | 15 | ## Public controllers |
16 | ###################################################### | 16 | ###################################################### |
17 | 17 | ||
18 | - map.connect 'test/:controller/:action/:id' , :controller => /.*test.*/ | 18 | + # You can have the root of your site routed by hooking up '' |
19 | + hosted_domain_matcher = lambda do |env| | ||
20 | + Domain.find_by_name(env[:host]) | ||
21 | + end | ||
22 | + map.connect '*page', :controller => 'content_viewer', :action => 'view_page', :conditions => { :if => hosted_domain_matcher } | ||
23 | + | ||
24 | + map.connect 'test/:controller/:action/:id' , :controller => /.*test.*/ | ||
19 | 25 | ||
20 | - # You can have the root of your site routed by hooking up '' | ||
21 | # -- just remember to delete public/index.html. | 26 | # -- just remember to delete public/index.html. |
22 | map.connect '', :controller => "home" | 27 | map.connect '', :controller => "home" |
23 | 28 |
lib/needs_profile.rb
@@ -21,7 +21,7 @@ module NeedsProfile | @@ -21,7 +21,7 @@ module NeedsProfile | ||
21 | end | 21 | end |
22 | 22 | ||
23 | def load_profile | 23 | def load_profile |
24 | - @profile = Profile.find_by_identifier(params[:profile]) | 24 | + @profile ||= Profile.find_by_identifier(params[:profile]) |
25 | render_not_found unless @profile | 25 | render_not_found unless @profile |
26 | end | 26 | end |
27 | 27 |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +require 'action_controller/routing' | ||
2 | + | ||
3 | +class ActionController::Routing::RouteSet | ||
4 | + alias :orig_extract_request_environment :extract_request_environment | ||
5 | + def extract_request_environment(request) | ||
6 | + orig_extract_request_environment(request).merge(:host => request.host) | ||
7 | + end | ||
8 | +end | ||
9 | + | ||
10 | +class ActionController::Routing::Route | ||
11 | + alias :orig_recognition_conditions :recognition_conditions | ||
12 | + def recognition_conditions | ||
13 | + result = orig_recognition_conditions | ||
14 | + result << "conditions[:if].call(env)" if conditions[:if] | ||
15 | + result | ||
16 | + end | ||
17 | +end | ||
18 | + |
test/functional/content_viewer_controller_test.rb
@@ -286,4 +286,16 @@ class ContentViewerControllerTest < Test::Unit::TestCase | @@ -286,4 +286,16 @@ class ContentViewerControllerTest < Test::Unit::TestCase | ||
286 | assert_no_tag :tag => 'div', :attributes => { :id => 'profile-disabled' }, :content => Environment.default.message_for_disabled_enterprise | 286 | assert_no_tag :tag => 'div', :attributes => { :id => 'profile-disabled' }, :content => Environment.default.message_for_disabled_enterprise |
287 | end | 287 | end |
288 | 288 | ||
289 | + should 'load the correct profile when using hosted domain' do | ||
290 | + profile = create_user('mytestuser').person | ||
291 | + profile.domains << Domain.create!(:name => 'micojones.net') | ||
292 | + profile.save! | ||
293 | + | ||
294 | + ActionController::TestRequest.any_instance.expects(:host).returns('www.micojones.net').at_least_once | ||
295 | + | ||
296 | + get :view_page, :page => [] | ||
297 | + | ||
298 | + assert_equal profile, assigns(:profile) | ||
299 | + end | ||
300 | + | ||
289 | end | 301 | end |
test/integration/routing_test.rb
@@ -156,4 +156,14 @@ class RoutingTest < ActionController::IntegrationTest | @@ -156,4 +156,14 @@ class RoutingTest < ActionController::IntegrationTest | ||
156 | assert_routing('/catalog/profile.withdot/1234', :controller => 'catalog', :action => 'show', :profile => 'profile.withdot', :id => '1234') | 156 | assert_routing('/catalog/profile.withdot/1234', :controller => 'catalog', :action => 'show', :profile => 'profile.withdot', :id => '1234') |
157 | end | 157 | end |
158 | 158 | ||
159 | + def test_hosted_domain_routing | ||
160 | + | ||
161 | + user = create_user('testuser').person | ||
162 | + domain = Domain.create!(:name => 'example.com', :owner => user) | ||
163 | + | ||
164 | + ActionController::TestRequest.any_instance.expects(:host).returns('www.example.com') | ||
165 | + | ||
166 | + assert_routing('/work/free-software', :controller => 'content_viewer', :action => 'view_page', :page => [ 'work', 'free-software'] ) | ||
167 | + end | ||
168 | + | ||
159 | end | 169 | end |