cirandas.net

commit 99a655b367b31ad7a7fb0187a80a48228eaf78f8

Author: Braulio Bhavamitra <braulio@prout.io>

Merge branch 'noosfero' into stores

 config/application.rb | 14 +
 config/routes.rb | 146 -----------------------
 config/routes/02_test.rb | 5 
 config/routes/03_assets.rb | 11 +
 config/routes/03_home.rb | 14 ++
 config/routes/04_doc.rb | 8 +
 config/routes/05_account.rb | 7 +
 config/routes/06_search.rb | 12 +
 config/routes/07_map_balloon.rb | 5 
 config/routes/08_chat.rb | 5 
 config/routes/09_enterprise.rb | 6 
 config/routes/admin/40_admin.rb | 7 +
 config/routes/cms/60_cms.rb | 18 ++
 config/routes/myprofile/30_myprofile.rb | 6 
 config/routes/profile/21_profile.rb | 34 +++++
 config/routes/profile/22_profile.rb | 6 
 config/routes/profile/23_profile.rb | 11 +
 config/spring.rb | 1 
 lib/noosfero/plugin.rb | 1 
  | 10 
 plugins/custom_routes/config/routes.rb | 3 
 plugins/social_statistics/config/routes.rb | 10 +


diff --git a/config/application.rb b/config/application.rb
index 2c19d63fcfeb004b8c2ad45a3d87253cb92a1e38..96a6164f4264845c7e2aa4eb2c574f63f2569d14 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -122,14 +122,22 @@
     config.action_dispatch.session = {key: '_noosfero_session'}
     config.session_store :active_record_store, key: '_noosfero_session'
 
+    config.paths['config/routes.rb'] =
+      Dir['config/routes/*.rb'] +
+      Dir['config/routes/profile/*.rb'] +
+      Dir['config/routes/myprofile/*.rb'] +
+      Dir['config/routes/admin/*.rb'] +
+      Dir['{baseplugins,config/plugins}/*/config/routes**.rb'] +
+      Dir['config/routes/cms/*.rb']
+
+    config.paths['db/migrate'].concat Dir.glob("{baseplugins,config/plugins}/*/db/migrate")
+    config.i18n.load_path.concat Dir.glob("{baseplugins,config/plugins}/*/locales/*.{rb,yml}")
+
     # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
     # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
     config.time_zone = File.read('/etc/timezone').split("\n").first
     # timezone varies for each request, see ApplicationController#set_time_zone
     config.active_record.default_timezone = :utc
-
-    config.paths['db/migrate'].concat Dir.glob("#{Rails.root}/{baseplugins,config/plugins}/*/db/migrate")
-    config.i18n.load_path.concat Dir.glob("#{Rails.root}/{baseplugins,config/plugins}/*/locales/*.{rb,yml}")
 
     config.middleware.use Noosfero::MultiTenancy::Middleware
 




diff --git a/config/routes/02_test.rb b/config/routes/02_test.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3917d6355cb588299b5eb2e3da453acf4fff9e39
--- /dev/null
+++ b/config/routes/02_test.rb
@@ -0,0 +1,5 @@
+Noosfero::Application.routes.draw do
+
+  match 'test/:controller(/:action(/:id))', controller: /.*test.*/, via: :all
+
+end




diff --git a/config/routes/03_assets.rb b/config/routes/03_assets.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8709250b4b8d0fe240d834f291bddafc1dde2b89
--- /dev/null
+++ b/config/routes/03_assets.rb
@@ -0,0 +1,11 @@
+Noosfero::Application.routes.draw do
+
+  match 'images(/*stuff)', to: 'not_found#nothing', via: :all
+  match 'stylesheets(/*stuff)', to: 'not_found#nothing', via: :all
+  match 'designs(/*stuff)', to: 'not_found#nothing', via: :all
+  match 'articles(/*stuff)', to: 'not_found#nothing', via: :all
+  match 'javascripts(/*stuff)', to: 'not_found#nothing', via: :all
+  match 'thumbnails(/*stuff)', to: 'not_found#nothing', via: :all
+  match 'user_themes(/*stuff)', to: 'not_found#nothing', via: :all
+
+end




diff --git a/config/routes/03_home.rb b/config/routes/03_home.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a7fbf8324f09ff48ea2d699731765f8a2eb693d5
--- /dev/null
+++ b/config/routes/03_home.rb
@@ -0,0 +1,14 @@
+Noosfero::Application.routes.draw do
+
+  environment_domain_constraint = -> request { !Domain.hosting_profile_at(request.host) }
+
+  # -- just remember to delete public/index.html.
+  # You can have the root of your site routed by hooking up ''
+  root to: 'home#index', constraints: environment_domain_constraint, via: :all
+
+  match 'site(/:action)', controller: :home, via: :all
+  match 'api(/:action)', controller: :api, via: :all
+
+  match 'embed/:action/:id', controller: :embed, id: /\d+/, via: :all
+
+end




diff --git a/config/routes/04_doc.rb b/config/routes/04_doc.rb
new file mode 100644
index 0000000000000000000000000000000000000000..54119dcd10485371688609482af24ac6ed14daae
--- /dev/null
+++ b/config/routes/04_doc.rb
@@ -0,0 +1,8 @@
+Noosfero::Application.routes.draw do
+
+  # online documentation
+  match 'doc', to: 'doc#index', as: :doc, via: :all
+  match 'doc/:section', to: 'doc#section', as: :doc_section, via: :all
+  match 'doc/:section/:topic', to: 'doc#topic', as: :doc_topic, via: :all
+
+end




diff --git a/config/routes/05_account.rb b/config/routes/05_account.rb
new file mode 100644
index 0000000000000000000000000000000000000000..2ac2d408a86e64260504355b0a3935a8a653af2c
--- /dev/null
+++ b/config/routes/05_account.rb
@@ -0,0 +1,7 @@
+Noosfero::Application.routes.draw do
+
+  # user account controller
+  match 'account/new_password/:code', controller: :account, action: :new_password, via: :all
+  match 'account(/:action)', controller: :account, via: :all
+
+end




diff --git a/config/routes/06_search.rb b/config/routes/06_search.rb
new file mode 100644
index 0000000000000000000000000000000000000000..e962a4bda10e093041efef425a2a99f061ce498f
--- /dev/null
+++ b/config/routes/06_search.rb
@@ -0,0 +1,12 @@
+Noosfero::Application.routes.draw do
+
+  # tags
+  match 'tag', controller: :search, action: :tags, via: :all
+  match 'tag(/:tag)', controller: :search, action: :tag, tag: /.*/, via: :all
+
+  # categories index
+  match 'cat/*category_path', to: 'search#category_index', as: :category, via: :all
+  # search
+  match 'search(/:action(/*category_path))', controller: :search, via: :all, as: :search
+
+end




diff --git a/config/routes/07_map_balloon.rb b/config/routes/07_map_balloon.rb
new file mode 100644
index 0000000000000000000000000000000000000000..f1b875c24c0530a0986822a4c2179fb73175a2ff
--- /dev/null
+++ b/config/routes/07_map_balloon.rb
@@ -0,0 +1,5 @@
+Noosfero::Application.routes.draw do
+
+  match 'map_balloon/:action/:id', controller: :map_balloon, id: /.*/, via: :all
+
+end




diff --git a/config/routes/08_chat.rb b/config/routes/08_chat.rb
new file mode 100644
index 0000000000000000000000000000000000000000..cdb6f420778d7549de146fd3318b235038699fd8
--- /dev/null
+++ b/config/routes/08_chat.rb
@@ -0,0 +1,5 @@
+Noosfero::Application.routes.draw do
+
+  match 'chat(/:action(/:id))', controller: :chat, via: :all
+
+end




diff --git a/config/routes/09_enterprise.rb b/config/routes/09_enterprise.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8ff8f3838f2877cf2061b84261e2e996d92031c7
--- /dev/null
+++ b/config/routes/09_enterprise.rb
@@ -0,0 +1,6 @@
+Noosfero::Application.routes.draw do
+
+  # enterprise registration
+  match 'enterprise_registration(/:action)', controller: :enterprise_registration, via: :all
+
+end




diff --git a/config/routes/50_plugins.rb b/config/routes/50_plugins.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a159529c8a82cb715d0b9f31c29225966f2b604e
--- /dev/null
+++ b/config/routes/50_plugins.rb
@@ -0,0 +1,74 @@
+paths              = {}
+profile_format     = /#{Noosfero.identifier_format}/i
+plugins_root       = if Rails.env.test? then 'plugins' else '{baseplugins,config/plugins}' end
+prefixes_by_folder = {
+  public:    'plugin',
+  profile:   'profile(/:profile)/plugin',
+  myprofile: 'myprofile(/:profile)/plugin',
+  admin:     'admin/plugin',
+}
+
+Dir.glob Rails.root.join plugins_root, '*', 'controllers' do |controllers_dir|
+  plugin_name = File.basename File.dirname controllers_dir
+
+  controllers_by_folder = prefixes_by_folder.keys.inject({}) do |hash, folder|
+    path = "#{controllers_dir}/#{folder}/"
+    hash[folder] = Dir.glob("#{path}{*.rb,#{plugin_name}_plugin/*.rb}").map do |filename|
+      filename.gsub(path, '').gsub(/[_\/]controller.rb$/, '')
+    end
+    hash
+  end
+
+
+  controllers_by_folder.each do |folder, controllers|
+    controllers.each do |controller|
+      controller_name = controller.gsub(/#{plugin_name}_plugin[_\/]?/, '')
+      controller_path = if controller_name.present? then "/#{controller_name}" else '' end
+
+      as  = controller.tr '/','_'
+      url = "#{prefixes_by_folder[folder]}/#{plugin_name}#{controller_path}(/:action(/:id))"
+
+      paths[url] = {
+        controller: controller,
+        via:        :all,
+        as:         as,
+      }
+      paths[url][:profile] = profile_format if folder.to_s.in? %w[profile myprofile]
+    end
+  end
+
+  # DEPRECATED default controllers
+  paths.reverse_merge!(
+    "plugin/#{plugin_name}(/:action(/:id))" => {
+      controller: "#{plugin_name}_plugin",
+      via:        :all,
+    },
+    "admin/plugin/#{plugin_name}(/:action(/:id))" => {
+      controller: "#{plugin_name}_plugin_admin",
+      via:        :all,
+    },
+
+    "profile(/:profile)/plugin/#{plugin_name}(/:action(/:id))" => {
+      controller: "#{plugin_name}_plugin_profile",
+      via:        :all,
+      profile:    profile_format,
+    },
+    "myprofile(/:profile)/plugin/#{plugin_name}(/:action(/:id))" => {
+      controller: "#{plugin_name}_plugin_myprofile",
+      via:        :all,
+      profile:    profile_format,
+    },
+  )
+end
+
+Noosfero::Application.routes.draw do
+
+  paths.each do |url, opts|
+    controller_klass = "#{opts[:controller]}_controller".camelize.constantize rescue nil
+    next unless controller_klass
+
+    match url, opts
+  end
+
+end
+




diff --git a/config/routes/admin/40_admin.rb b/config/routes/admin/40_admin.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eac5784d97c3a24e5b2ce6898c3d5ff5f9b31e78
--- /dev/null
+++ b/config/routes/admin/40_admin.rb
@@ -0,0 +1,7 @@
+Noosfero::Application.routes.draw do
+
+  match 'admin', controller: :admin_panel, action: :index, via: :all
+  match 'admin/:controller(/:action((.:format)/:id))', controller: Noosfero.pattern_for_controllers_in_directory('admin'), via: :all
+  match 'admin/:controller(/:action(/:id))', controller: Noosfero.pattern_for_controllers_in_directory('admin'), via: :all
+
+end




diff --git a/config/routes/cms/60_cms.rb b/config/routes/cms/60_cms.rb
new file mode 100644
index 0000000000000000000000000000000000000000..b6592a1586b8faba7a2058a6d55535551d1c7feb
--- /dev/null
+++ b/config/routes/cms/60_cms.rb
@@ -0,0 +1,18 @@
+Noosfero::Application.routes.draw do
+
+  environment_domain_constraint = -> request { !Domain.hosting_profile_at(request.host) }
+
+  match ':profile/*page/versions', controller: :content_viewer, action: :article_versions, profile: /#{Noosfero.identifier_format_in_url}/i, constraints: environment_domain_constraint, via: :all
+  match '*page/versions', controller: :content_viewer, action: :article_versions, via: :all
+
+  match ':profile/*page/versions_diff', controller: :content_viewer, action: :versions_diff, profile: /#{Noosfero.identifier_format_in_url}/i, constraints: environment_domain_constraint, via: :all
+  match '*page/versions_diff', controller: :content_viewer, action: :versions_diff, via: :all
+
+  # match requests for profiles that don't have a custom domain
+  match ':profile(/*page)', controller: :content_viewer, action: :view_page, profile: /#{Noosfero.identifier_format_in_url}/i,
+    constraints: environment_domain_constraint, via: :all, as: :page
+
+  # match requests for content in domains hosted for profiles
+  match '/(*page)', controller: :content_viewer, action: :view_page, via: :all
+
+end




diff --git a/config/routes/myprofile/30_myprofile.rb b/config/routes/myprofile/30_myprofile.rb
new file mode 100644
index 0000000000000000000000000000000000000000..a4d3a684c582bf612e26690cac9be41e6d3af42d
--- /dev/null
+++ b/config/routes/myprofile/30_myprofile.rb
@@ -0,0 +1,6 @@
+Noosfero::Application.routes.draw do
+
+  match 'myprofile/:profile', controller: :profile_editor, action: :index, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'myprofile/:profile/:controller(/:action(/:id))', controller: Noosfero.pattern_for_controllers_in_directory('my_profile'), profile: /#{Noosfero.identifier_format_in_url}/i, as: :myprofile, via: :all
+
+end




diff --git a/config/routes/profile/21_profile.rb b/config/routes/profile/21_profile.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4dc906ededd44697b7bde9d0a62fd75b7ca66041
--- /dev/null
+++ b/config/routes/profile/21_profile.rb
@@ -0,0 +1,34 @@
+Noosfero::Application.routes.draw do
+
+  match ':profile/about', controller: :profile, action: :about, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match ':profile/activities', controller: :profile, action: :activities, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+
+  # events
+  match 'profile/:profile/events_by_day', controller: :events, action: :events_by_day, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'profile/:profile/events_by_month', controller: :events, action: :events_by_month, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'profile/:profile/events/:year/:month/:day', controller: :events, action: :events, year: /\d*/, month: /\d*/, day: /\d*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'profile/:profile/events/:year/:month', controller: :events, action: :events, year: /\d*/, month: /\d*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'profile/:profile/events', controller: :events, action: :events, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+
+  # invite
+  match 'profile/:profile/invite/friends', controller: :invite, action: :invite_friends, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'profile/:profile/invite/:action', controller: :invite, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+
+  # feeds per tag
+  match 'profile/:profile/tags/:id/feed', controller: :profile, action: :tag_feed, id: /.+/, profile: /#{Noosfero.identifier_format_in_url}/i, as: :tag_feed, via: :all
+
+  # profile tags
+  match 'profile/:profile/tags/:id', controller: :profile, action: :content_tagged, id: /.+/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  match 'profile/:profile/tags(/:id)', controller: :profile, action: :tags, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+
+  # profile search
+  match 'profile/:profile/search', controller: :profile_search, action: :index, profile: /#{Noosfero.identifier_format_in_url}/i,
+    via: :all, as: :profile_search
+
+  # comments
+  match 'profile/:profile/comment/:action/:id', controller: :comment, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+
+  # public profile information
+  match 'profile/:profile(/:action(/:id))', controller: :profile, action: :index, id: /[^\/]*/, profile: /#{Noosfero.identifier_format_in_url}/i, as: :profile, via: :all
+
+end




diff --git a/config/routes/profile/22_profile.rb b/config/routes/profile/22_profile.rb
new file mode 100644
index 0000000000000000000000000000000000000000..fc8639c66a332e6ad1990323c77d3b7543735c38
--- /dev/null
+++ b/config/routes/profile/22_profile.rb
@@ -0,0 +1,6 @@
+Noosfero::Application.routes.draw do
+
+  # contact
+  match 'contact(/:profile)/:action(/:id)', controller: :contact, action: :index, id: /.*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+
+end




diff --git a/config/routes/profile/23_profile.rb b/config/routes/profile/23_profile.rb
new file mode 100644
index 0000000000000000000000000000000000000000..4e3456e7ee0e658fea87eb199df4afa2177be057
--- /dev/null
+++ b/config/routes/profile/23_profile.rb
@@ -0,0 +1,11 @@
+Noosfero::Application.routes.draw do
+
+  ##
+  # Keep products URL compatibility
+  get 'catalog/:profile', to: redirect{ |params, request| "/profile/#{request.params[:profile]}/plugin/products/catalog" }
+  get 'profile/:profile/catalog', to: redirect{ |params, request| "/profile/#{request.params[:profile]}/plugin/products/catalog" }
+  get 'myprofile/:profile/manage_products(/:action(/:id))', to: (redirect do |params, request|
+    "/profile/#{request.params[:profile]}/plugin/products/page/#{request.params[:action]}/#{request.params[:id]}"
+  end)
+
+end




diff --git a/config/routes.rb b/config/routes.rb
index 931ddc576d90eeb79b9e743fd4d724b71d9f010c..9260f0ed4f437ab6b393233db0df2a3fb436c576 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -1,148 +1,6 @@
-require_dependency 'noosfero'
-
 Noosfero::Application.routes.draw do
-  # The priority is based upon order of creation: first created -> highest priority.
-  # Sample of regular route:
-  # map.connect 'products/:id', controller: 'catalog', action: 'view'
-  # Keep in mind you can assign values other than :controller and :action
-
-  # Sample of named route:
-  # map.purchase 'products/:id/purchase', controller: 'catalog', action: 'purchase'
-  # This route can be invoked with purchase_url(id: product.id)
-
-  environment_domain_constraint = -> request { !Domain.hosting_profile_at(request.host) }
-
-  ######################################################
-  ## Public controllers
-  ######################################################
-
-
-  match 'test/:controller(/:action(/:id))', controller: /.*test.*/, via: :all
-
-  # -- just remember to delete public/index.html.
-  # You can have the root of your site routed by hooking up ''
-  root to: 'home#index', constraints: environment_domain_constraint, via: :all
-
-  match 'site(/:action)', controller: 'home', via: :all
-  match 'api(/:action)', controller: 'api', via: :all
-
-  match 'images(/*stuff)', to: 'not_found#nothing', via: :all
-  match 'stylesheets(/*stuff)', to: 'not_found#nothing', via: :all
-  match 'designs(/*stuff)', to: 'not_found#nothing', via: :all
-  match 'articles(/*stuff)', to: 'not_found#nothing', via: :all
-  match 'javascripts(/*stuff)', to: 'not_found#nothing', via: :all
-  match 'thumbnails(/*stuff)', to: 'not_found#nothing', via: :all
-  match 'user_themes(/*stuff)', to: 'not_found#nothing', via: :all
-
-  # embed controller
-  match 'embed/:action/:id', controller: 'embed', id: /\d+/, via: :all
 
-  # online documentation
-  match 'doc', to: 'doc#index', as: :doc, via: :all
-  match 'doc/:section', to: 'doc#section', as: :doc_section, via: :all
-  match 'doc/:section/:topic', to: 'doc#topic', as: :doc_topic, via: :all
-
-  # user account controller
-  match 'account/new_password/:code', controller: 'account', action: 'new_password', via: :all
-  match 'account(/:action)', controller: 'account', via: :all
-
-  # enterprise registration
-  match 'enterprise_registration(/:action)', controller: 'enterprise_registration', via: :all
-
-  # tags
-  match 'tag(/:tag)', controller: 'search', action: 'tag', tag: /.*/, via: :all, as: :tag
-
-  # categories index
-  match 'cat/*category_path', to: 'search#category_index', as: :category, via: :all
-  # search
-  match 'search(/:action(/*category_path))', controller: :search, via: :all, as: :search
-
-  ######################################################
-  # plugin routes
-  # need to come first as 'plugin' will become the :profile parameter when custom domains are used
-  ######################################################
-  plugins_routes = File.join(File.dirname(__FILE__) + '/../lib/noosfero/plugin/routes.rb')
-  eval(IO.read(plugins_routes), binding, plugins_routes)
-
-  ##
-  # Keep products URL compatibility
-  get 'catalog/:profile', to: redirect{ |params, request| "/profile/#{request.params[:profile]}/plugin/products/catalog" }
-  get 'profile/:profile/catalog', to: redirect{ |params, request| "/profile/#{request.params[:profile]}/plugin/products/catalog" }
-  get 'myprofile/:profile/manage_products(/:action(/:id))', to: (redirect do |params, request|
-    "/profile/#{request.params[:profile]}/plugin/products/page/#{request.params[:action]}/#{request.params[:id]}"
-  end)
-
-  match ':profile/about', controller: 'profile', action: 'about', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match ':profile/activities', controller: 'profile', action: 'activities', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  # events
-  match 'profile(/:profile)/events_by_day', controller: 'events', action: 'events_by_day', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match 'profile(/:profile)/events_by_month', controller: 'events', action: 'events_by_month', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match 'profile(/:profile)/events/:year/:month/:day', controller: 'events', action: 'events', year: /\d*/, month: /\d*/, day: /\d*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match 'profile(/:profile)/events/:year/:month', controller: 'events', action: 'events', year: /\d*/, month: /\d*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match 'profile(/:profile)/events', controller: 'events', action: 'events', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
+  # everything inside `config/routes` directory
 
-  # invite
-  match 'profile(/:profile)/invite/friends', controller: 'invite', action: 'invite_friends', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match 'profile(/:profile)/invite/:action', controller: 'invite', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  # feeds per tag
-  match 'profile(/:profile)/tags/:id/feed', controller: 'profile', action:'tag_feed', id: /.+/, profile: /#{Noosfero.identifier_format_in_url}/i, as: :tag_feed, via: :all
-
-  # profile tags
-  match 'profile(/:profile)/tags/:id', controller: 'profile', action: 'content_tagged', id: /.+/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-  match 'profile(/:profile)/tags(/:id)', controller: 'profile', action: 'tags', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  # profile search
-  match 'profile(/:profile)/search', controller: 'profile_search', action: 'index', profile: /#{Noosfero.identifier_format_in_url}/i,
-    via: :all, as: :profile_search
-
-  # comments
-  match 'profile(/:profile)/comment/:action/:id', controller: 'comment', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  # public profile information
-  match 'profile/:profile(/:action(/:id))', controller: 'profile', action: 'index', id: /[^\/]*/, profile: /#{Noosfero.identifier_format_in_url}/i, as: :profile, via: :all
-  match 'profile(/:action(/:id))', controller: 'profile', action: 'index', id: /[^\/]*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  # contact
-  match 'contact(/:profile)/:action(/:id)', controller: 'contact', action: 'index', id: /.*/, profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  # map balloon
-  match 'map_balloon/:action/:id', controller: 'map_balloon', id: /.*/, via: :all
+end
 
-  # chat
-  match 'chat(/:action(/:id))', controller: 'chat', via: :all
-
-
-  ######################################################
-  ## Controllers that are profile-specific (for profile admins )
-  ######################################################
-  # profile customization - "My profile"
-  match 'myprofile(/:profile)/:controller(/:action(/:id))', controller: Noosfero.pattern_for_controllers_in_directory('my_profile'), profile: /#{Noosfero.identifier_format_in_url}/i, as: :myprofile, via: :all
-  match 'myprofile(/:profile)', controller: 'profile_editor', action: 'index', profile: /#{Noosfero.identifier_format_in_url}/i, via: :all
-
-  ######################################################
-  ## Controllers that are used by environment admin
-  ######################################################
-  # administrative tasks for a environment
-  match 'admin', controller: 'admin_panel', action: :index, via: :all
-  match 'admin/:controller(/:action((.:format)/:id))', controller: Noosfero.pattern_for_controllers_in_directory('admin'), via: :all
-  match 'admin/:controller(/:action(/:id))', controller: Noosfero.pattern_for_controllers_in_directory('admin'), via: :all
-
-  # cache stuff - hack
-  match 'public/:action/:id', controller: 'public', via: :all
-
-  match ':profile/*page/versions', controller: 'content_viewer', action: 'article_versions', profile: /#{Noosfero.identifier_format_in_url}/i, constraints: environment_domain_constraint, via: :all
-  match '*page/versions', controller: 'content_viewer', action: 'article_versions', via: :all
-
-  match ':profile/*page/versions_diff', controller: 'content_viewer', action: 'versions_diff', profile: /#{Noosfero.identifier_format_in_url}/i, constraints: environment_domain_constraint, via: :all
-  match '*page/versions_diff', controller: 'content_viewer', action: 'versions_diff', via: :all
-
-  # match requests for profiles that don't have a custom domain
-  match ':profile(/*page)', controller: 'content_viewer', action: 'view_page', profile: /#{Noosfero.identifier_format_in_url}/i,
-    constraints: environment_domain_constraint, via: :all, as: :page
-
-  # match requests for content in domains hosted for profiles
-  match '/(*page)', controller: 'content_viewer', action: 'view_page', via: :all
-
-end




diff --git a/config/spring.rb b/config/spring.rb
index f0bcfd0a8968314f9de328d558422683560dd84a..16eb8bfcefdba03fcbfb47a648bd8e70ca2b4d5d 100644
--- a/config/spring.rb
+++ b/config/spring.rb
@@ -3,6 +3,7 @@   .env
   .env.local
   .ruby-version
   .rbenv-vars
+  config/**
   lib/**
   tmp/restart.txt
   tmp/caching-dev.txt




diff --git a/lib/noosfero/plugin/routes.rb b/lib/noosfero/plugin/routes.rb
deleted file mode 100644
index 3d14a6147b3960a2f4af74f095ce026a9f977f50..0000000000000000000000000000000000000000
--- a/lib/noosfero/plugin/routes.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-plugins_root       = if Rails.env.test? then 'plugins' else '{baseplugins,config/plugins}' end
-prefixes_by_folder = {
-  public:    'plugin',
-  profile:   'profile(/:profile)/plugin',
-  myprofile: 'myprofile(/:profile)/plugin',
-  admin:     'admin/plugin',
-}
-
-Dir.glob Rails.root.join plugins_root, '*', 'controllers' do |controllers_dir|
-  plugin_name = File.basename File.dirname controllers_dir
-
-  controllers_by_folder = prefixes_by_folder.keys.inject({}) do |hash, folder|
-    path = "#{controllers_dir}/#{folder}/"
-    hash[folder] = Dir.glob("#{path}{*.rb,#{plugin_name}_plugin/*.rb}").map do |filename|
-      filename.gsub(path, '').gsub(/[_\/]controller.rb$/, '')
-    end
-    hash
-  end
-
-  paths          = {}
-  profile_format = /#{Noosfero.identifier_format}/i
-
-  controllers_by_folder.each do |folder, controllers|
-    controllers.each do |controller|
-      controller_name = controller.gsub(/#{plugin_name}_plugin[_\/]?/, '')
-      controller_path = if controller_name.present? then "/#{controller_name}" else '' end
-
-      as  = controller.tr '/','_'
-      url = "#{prefixes_by_folder[folder]}/#{plugin_name}#{controller_path}(/:action(/:id))"
-
-      paths[url] = {
-        controller: controller,
-        via:        :all,
-        as:         as,
-      }
-      paths[url][:profile] = profile_format if folder.to_s.in? %w[profile myprofile]
-    end
-  end
-
-  # DEPRECATED default controllers
-  paths.reverse_merge!(
-    "plugin/#{plugin_name}(/:action(/:id))" => {
-      controller: "#{plugin_name}_plugin",
-      via:        :all,
-    },
-    "admin/plugin/#{plugin_name}(/:action(/:id))" => {
-      controller: "#{plugin_name}_plugin_admin",
-      via:        :all,
-    },
-
-    "profile(/:profile)/plugin/#{plugin_name}(/:action(/:id))" => {
-      controller: "#{plugin_name}_plugin_profile",
-      via:        :all,
-      profile:    profile_format,
-    },
-    "myprofile(/:profile)/plugin/#{plugin_name}(/:action(/:id))" => {
-      controller: "#{plugin_name}_plugin_myprofile",
-      via:        :all,
-      profile:    profile_format,
-    },
-  )
-
-  paths.each do |url, opts|
-    controller_klass = "#{opts[:controller]}_controller".camelize.constantize rescue nil
-    next unless controller_klass
-
-    match url, opts
-  end
-end
-
-Dir.glob Rails.root.join plugins_root, '*', 'config', 'routes.rb' do |route|
-  eval IO.read(route), binding, route
-end
-




diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb
index 902ba11289b15fdeac7235f5a96e320df648ffb4..047e5355c5697cbb395a905001fdd6b58c808327 100644
--- a/lib/noosfero/plugin.rb
+++ b/lib/noosfero/plugin.rb
@@ -70,6 +70,7 @@       end
 
       if plugin_dependencies_ok
         [config.autoload_paths, config.eager_load_paths].each do |path|
+          path.concat Dir["#{dir}/app/*/"]
           path.concat Dir["#{dir}/controllers/{,public,profile,myprofile,admin,concerns}"]
           path.concat Dir["#{dir}/models{,/concerns}"]
           path.concat Dir["#{dir}/lib"]




diff --git a/plugins/custom_routes/config/routes.rb b/plugins/custom_routes/config/routes.rb
index aca6d6c536cefdfd21da22d96bb720549efb073d..7cebfac1d2994ff22680ec81f7b58e374cd63c16 100644
--- a/plugins/custom_routes/config/routes.rb
+++ b/plugins/custom_routes/config/routes.rb
@@ -1 +1,2 @@
-CustomRoutesPlugin::CustomRoutes.load if defined?(CustomRoutesPlugin)
+CustomRoutesPlugin::CustomRoutes.load
+




diff --git a/plugins/social_statistics/config/routes.rb b/plugins/social_statistics/config/routes.rb
index 54dcb70d558792c2409f0d8d515c92b01f00f0e9..2edb42e74029de6fafd706a93ee881a3bf7cd183 100644
--- a/plugins/social_statistics/config/routes.rb
+++ b/plugins/social_statistics/config/routes.rb
@@ -1,4 +1,8 @@
-begin
-  mount Blazer::Engine, at: "stats"
-rescue NameError
+Noosfero::Application.routes.draw do
+
+  begin
+    mount Blazer::Engine, at: "stats"
+  rescue NameError
+  end
+
 end