Commit 1ccb62afb497a24fc1bfcdb262d6e8448ea8021c

Authored by Daniela Feitosa
2 parents 96c003b1 3f179763

Merge commit 'refs/merge-requests/218' of git://gitorious.org/noosfero/noosfero …

…into merge-requests/218

Conflicts:
	lib/noosfero/plugin.rb
lib/noosfero/plugin.rb
@@ -12,7 +12,11 @@ class Noosfero::Plugin @@ -12,7 +12,11 @@ class Noosfero::Plugin
12 end 12 end
13 13
14 def init_system 14 def init_system
15 - Dir.glob(File.join(Rails.root, 'config', 'plugins', '*')).select do |entry| 15 + enabled_plugins = Dir.glob(File.join(Rails.root, 'config', 'plugins', '*'))
  16 + if Rails.env.test? && !enabled_plugins.include?(File.join(Rails.root, 'config', 'plugins', 'foo'))
  17 + enabled_plugins << File.join(Rails.root, 'plugins', 'foo')
  18 + end
  19 + enabled_plugins.select do |entry|
16 File.directory?(entry) 20 File.directory?(entry)
17 end.each do |dir| 21 end.each do |dir|
18 plugin_name = File.basename(dir) 22 plugin_name = File.basename(dir)
@@ -31,6 +35,11 @@ class Noosfero::Plugin @@ -31,6 +35,11 @@ class Noosfero::Plugin
31 if plugin_dependencies_ok 35 if plugin_dependencies_ok
32 Rails.configuration.controller_paths << File.join(dir, 'controllers') 36 Rails.configuration.controller_paths << File.join(dir, 'controllers')
33 ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers') 37 ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers')
  38 + controllers_folders = %w[public profile myprofile admin]
  39 + controllers_folders.each do |folder|
  40 + Rails.configuration.controller_paths << File.join(dir, 'controllers', folder)
  41 + ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers', folder)
  42 + end
34 [ ActiveSupport::Dependencies.load_paths, $:].each do |path| 43 [ ActiveSupport::Dependencies.load_paths, $:].each do |path|
35 path << File.join(dir, 'models') 44 path << File.join(dir, 'models')
36 path << File.join(dir, 'lib') 45 path << File.join(dir, 'lib')
lib/noosfero/plugin/routes.rb
1 -Dir.glob(File.join(Rails.root, 'config', 'plugins', '*', 'controllers')) do |dir|  
2 - plugin_name = File.basename(File.dirname(dir)) 1 +plugins_root = Rails.env.test? ? 'plugins' : File.join('config', 'plugins')
  2 +
  3 +Dir.glob(File.join(Rails.root, plugins_root, '*', 'controllers')) do |controllers_dir|
  4 + prefixes_by_folder = {'public' => 'plugin',
  5 + 'profile' => 'profile/:profile/plugin',
  6 + 'myprofile' => 'myprofile/:profile/plugin',
  7 + 'admin' => 'admin/plugin'}
  8 +
  9 + controllers_by_folder = prefixes_by_folder.keys.inject({}) do |hash, folder|
  10 + hash.merge!({folder => Dir.glob(File.join(controllers_dir, folder, '*')).map {|full_names| File.basename(full_names).gsub(/_controller.rb$/,'')}})
  11 + end
  12 +
  13 + plugin_name = File.basename(File.dirname(controllers_dir))
  14 +
  15 + controllers_by_folder.each do |folder, controllers|
  16 + controllers.each do |controller|
  17 + controller_name = controller.gsub("#{plugin_name}_plugin_",'')
  18 + map.connect "#{prefixes_by_folder[folder]}/#{plugin_name}/#{controller_name}/:action/:id", :controller => controller
  19 + end
  20 + end
  21 +
3 map.connect 'plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin' 22 map.connect 'plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin'
4 - map.connect 'profile/:profile/plugins/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin_profile' 23 + map.connect 'profile/:profile/plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin_profile'
5 map.connect 'myprofile/:profile/plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin_myprofile' 24 map.connect 'myprofile/:profile/plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin_myprofile'
6 map.connect 'admin/plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin_admin' 25 map.connect 'admin/plugin/' + plugin_name + '/:action/:id', :controller => plugin_name + '_plugin_admin'
7 end 26 end
8 -  
plugins/foo/controllers/admin/foo_plugin_admin_bar_controller.rb 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +class FooPluginAdminBarController < AdminController
  2 +end
  3 +
plugins/foo/controllers/myprofile/foo_plugin_myprofile_bar_controller.rb 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +class FooPluginMyprofileBarController < MyProfileController
  2 +end
  3 +
plugins/foo/controllers/profile/foo_plugin_profile_bar_controller.rb 0 → 100644
@@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
  1 +class FooPluginProfileBarController < ProfileController
  2 +end
  3 +
plugins/foo/controllers/public/foo_plugin_public_bar_controller.rb 0 → 100644
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +class FooPluginPublicBarController < PublicController
  2 +end
test/integration/routing_test.rb
@@ -221,4 +221,11 @@ class RoutingTest &lt; ActionController::IntegrationTest @@ -221,4 +221,11 @@ class RoutingTest &lt; ActionController::IntegrationTest
221 assert_routing('/chat/avatar/chemical-brothers', :controller => 'chat', :action => 'avatar', :id => 'chemical-brothers') 221 assert_routing('/chat/avatar/chemical-brothers', :controller => 'chat', :action => 'avatar', :id => 'chemical-brothers')
222 end 222 end
223 223
  224 + def test_plugins_generic_routes
  225 + assert_routing('/plugin/foo/public_bar/play/1', {:controller => 'foo_plugin_public_bar', :action => 'play', :id => '1'})
  226 + assert_routing('/profile/test/plugin/foo/profile_bar/play/1', {:controller => 'foo_plugin_profile_bar', :action => 'play', :id => '1', :profile => 'test'})
  227 + assert_routing('/myprofile/test/plugin/foo/myprofile_bar/play/1', {:controller => 'foo_plugin_myprofile_bar', :action => 'play', :id => '1', :profile => 'test'})
  228 + assert_routing('/admin/plugin/foo/admin_bar/play/1', {:controller => 'foo_plugin_admin_bar', :action => 'play', :id => '1'})
  229 + end
  230 +
224 end 231 end