Sha256: 67547fa7ecc391ed54566bbf93522b7c75bc45105a493352a53f49a8ced675b2

Contents?: true

Size: 1.32 KB

Versions: 12

Compression:

Stored size: 1.32 KB

Contents

include Coprl::Trace

module Coprl
  module Presenters
    module Pluggable
      def include_plugins(*layers, plugins: [],
                          plugin_method: method(:include))
        plugins = Array(plugins) + Array(Coprl::Presenters::Settings.config.presenters.plugins)
        plugins.uniq.each do |plugin|
          plugin(plugin, *layers, plugin_method: plugin_method)
        end
      end


      # Returns the module for the specified plugin. If the module is not
      # defined, the corresponding plugin required.
      def plugin_module(plugin)
        module_name = plugin.to_s.gsub(/(^|_)(.)/) {|x| x[-1..-1].upcase}
        unless Coprl::Presenters::Plugins.const_defined?(module_name, false)
          trace {"Method plugin loading plugin: #{plugin}"}
          load "coprl/presenters/plugins/#{plugin}.rb"
        end
        Coprl::Presenters::Plugins.const_get(module_name)
      end

      def plugin(plugin, *layers, plugin_method: method(:include))
        m = plugin.is_a?(Module) ? plugin : plugin_module(plugin)
        layers.each do |layer|
          if m.const_defined?(layer, false) && !self.const_defined?(layer, false)
            trace {"Injecting plugin(#{m.const_get(layer).inspect}) into #{self.inspect}!"}
            plugin_method.call(m.const_get(layer))
          end
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
coprl-3.0.0.beta.12 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.11 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.10 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.9 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.8 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.7 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.6 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.5 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.4 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.3 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.2 lib/coprl/presenters/pluggable.rb
coprl-3.0.0.beta.1 lib/coprl/presenters/pluggable.rb