Code_paths (was: Re: Rails.plugins[:plugin_name] comments and patch)

I should add… this fix (self.code_paths instead of
Rails[:plugin_name].code_paths) seemed to make it not crash and did
store
the path in Rails.plugins[:plugin_name]. But, it just didn’t work. I
eventually traced it down to the fact that rails adds plugin paths
before
engines is loaded.

/usr/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/initializer.rb ln ~60

# Sequentially step through all of the available initialization

routines,
# in order:
#
# * #check_ruby_version
# * #set_load_path
# * #require_frameworks
# * #set_autoload_paths
# * add_plugin_load_paths ********** plugin code_paths are added
to
Dependencies.load_paths here
# * #load_environment
# * #initialize_encoding
# * #initialize_database
# * #initialize_logger
# * #initialize_framework_logging
# * #initialize_framework_views
# * #initialize_dependency_mechanism
# * #initialize_whiny_nils
# * #initialize_temporary_directories
# * #initialize_framework_settings
# * #add_support_load_paths
# * #load_plugins ********* but plugins are loaded
here
# * #load_observers
# * #initialize_routing
# * #after_initialize
# * #load_application_initializers
def process

Actually, this seems like a rails bug in itself. Or maybe it’s that way
by
design? In either case, it will break your code_paths done in a
plugin’s
initialize. Here’s a patch for engines loader (again which doesn’t seem
to
really belong in engines… but it already has the loader overridden…)

vendor/plugins/engines/lib/engines/plugin/loader.rb

module Engines
class Plugin
class Loader < Rails::Plugin::Loader

  •  def load_plugins
    
  •    super
    
  •    add_plugin_load_paths
    
  •  end
    
  • protected
      def register_plugin_as_loaded(plugin)
        super plugin
        Engines.plugins << plugin
        register_to_routing(plugin)
      end
    
      # Registers the plugin's controller_paths for the routing 
    

system.
def register_to_routing(plugin)
initializer.configuration.controller_paths +=
plugin.select_existing_paths(:controller_paths)
initializer.configuration.controller_paths.uniq!
end
end
end
end

-Andrew