Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
=================================================================== --- engines/lib/engines/plugin.rb (revision 1320) +++ engines/lib/engines/plugin.rb (working copy) @@ -30,7 +30,30 @@ # # Defaults to "assets" (see default_public_directory). attr_accessor :public_directory - + + # Plugins may set this to true if they want their views to + # take precedence over the views in the main application. + # Otherwise, views in plugins that duplicate views in the + # application are ignored. + # + # Defaults to false. + attr_accessor :override_views + + # Plugins may set this to false in order to prevent their code from caching + # in development mode (in other words, false will force the code to loaded + # on each request). + # + # Defaults to true. + attr_reader :load_once + def load_once=(new_value) + @load_once = new_value + if @load_once + load_paths.each { |p| Dependencies.load_once_paths << p } + else + load_paths.each { |p| Dependencies.load_once_paths.delete(p) } + end + end + protected # The default set of code paths which will be added to $LOAD_PATH @@ -61,6 +84,8 @@ @code_paths = default_code_paths @controller_paths = default_controller_paths @public_directory = default_public_directory + @override_views = false + @load_once = true end # Returns a list of paths this plugin wishes to make available in $LOAD_PATH @@ -88,7 +113,11 @@ def add_plugin_view_paths view_path = File.join(directory, 'app', 'views') if File.exist?(view_path) - ActionController::Base.view_paths.insert(1, view_path) # push it just underneath the app + if @override_views + ActionController::Base.prepend_view_path(view_path) + else + ActionController::Base.view_paths.insert(1, view_path) # push it just underneath the app + end ActionView::TemplateFinder.process_view_paths(view_path) end end
This paste will be private.
From the Design Piracy series on my blog: