Sha256: 15aa5148db9d14dea6202a15128e87237ed24a3fd8084c0c159631d8283801df

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

# See Bloggit::Plugin
require 'test/unit/assertions'

module Bloggit
  
  # = Plugin
  #
  #   Plugin.define :my_plugin do |conf|
  #     # default plugin settings...
  #   end
  class Plugin
    include Test::Unit::Assertions
    
    class << self
      attr_reader :site, :plugins
      
      def init(site) #:nodoc:
        @site = site
        @plugins = {}
        # Load/require plugins from plugins/ dir...
        @plugin_path = File.join(site.base_path, 'plugins')
        $: << @plugin_path
        Dir[ File.join(@plugin_path, '*') ].each do |dir|
          plugin_file = if FileTest.directory?(dir)
            plugin_lib_dir = File.join(dir, 'lib')
            $: << plugin_lib_dir if FileTest.directory?(plugin_lib_dir)
            "#{File.basename(dir)}/init"
          elsif dir.ends_with?('.rb') or dir.ends_with?('.plugin')
            "#{File.basename(dir)}"
          end
          require(plugin_file)
        end
      end
      
      def register(plugin_name, opts={}, &block)
        # Yeah...
        @plugins[plugin_name] = block.call( settings_for(plugin_name) )
      end
      
      def settings_for(plugin_name)
        @site.settings.plugins.fetch( plugin_name.to_s, {} )
      end
      
      def active_site
        @site
      end
      
      def [](key)
        @plugins[key]
      end
      
    end
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bloggit-1.0.7 lib/bloggit/plugin.rb