Sha256: c7c3c5488b16a9064174dc16bfa4a92e71153793087c315a1f25cca446cd6aab

Contents?: true

Size: 1.83 KB

Versions: 56

Compression:

Stored size: 1.83 KB

Contents

module Rails
  module Plugin
    class Locator
      include Enumerable
      attr_reader :initializer
      
      def initialize(initializer)
        @initializer = initializer
      end
      
      def plugins
        located_plugins.select(&:enabled?).sort
      end
      
      def each(&block)
        plugins.each(&block)
      end
      
      def plugin_names
        plugins.map(&:name)
      end
      
      private
        def located_plugins
          raise "The `located_plugins' method must be defined by concrete subclasses of #{self.class}"
        end
    end
    
    class FileSystemLocator < Locator
        private
          def located_plugins
            initializer.configuration.plugin_paths.flatten.inject([]) do |plugins, path|
              plugins.concat locate_plugins_under(path)
              plugins
            end.flatten
          end

          # This starts at the base path looking for directories that pass the plugin_path? test of the Plugin::Loader.
          # Since plugins can be nested arbitrarily deep within an unspecified number of intermediary directories, 
          # this method runs recursively until it finds a plugin directory.
          #
          #   e.g.
          #
          #     locate_plugins_under('vendor/plugins/acts/acts_as_chunky_bacon')
          #     => 'acts_as_chunky_bacon' 
          def locate_plugins_under(base_path)
             Dir.glob(File.join(base_path, '*')).inject([]) do |plugins, path|
              plugin_loader = initializer.configuration.plugin_loader.new(initializer, path)
              if plugin_loader.plugin_path? && plugin_loader.enabled?
                plugins << plugin_loader
              elsif File.directory?(path)
                plugins.concat locate_plugins_under(path)
              end
              plugins
            end
          end
    end
  end
end

Version data entries

56 entries across 56 versions & 1 rubygems

Version Path
backlog-0.0.0 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.0.1 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.0.2 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.0.5 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.0.4 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.1.0 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.1.1 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.1.2 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.2.0 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.2.1 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.0 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.2 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.1 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.3 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.4 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.5 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.6 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.7 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.8 vendor/rails/railties/lib/rails/plugin/locator.rb
backlog-0.3.9 vendor/rails/railties/lib/rails/plugin/locator.rb