Sha256: 41d2fcab094128d9928a80a0145d39dc35c85b46b356b47c9047046baff3cd2a

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

module Rib; end
module Rib::Plugin
  Rib::P = self

  def self.included mod
    mod.send(:include, Rib)

    class << mod
      attr_accessor :disabled

      def enable
        self.disabled = false
        if block_given? then yield else enabled? end
      end

      def disable
        self.disabled = true
        if block_given? then yield else enabled? end
      end

      def enabled?
        !disabled
      end

      def disabled?
        !!disabled
      end
    end

    snake_name = mod.name[/::\w+$/].tr(':', ''). # remove namespaces
                     gsub(/([A-Z][a-z]*)/, '\\1_').downcase[0..-2]

    code = (%w[enable disable].map{ |meth|
      <<-RUBY
        def #{meth}_#{snake_name} &block
          #{mod.name}.#{meth}(&block)
        end
      RUBY
    } + %w[enabled? disabled?].map{ |meth|
      <<-RUBY
        def #{snake_name}_#{meth} &block
          #{mod.name}.#{meth}(&block)
        end
      RUBY
    }).join("\n")

    meta_rib = if respond_to?(:singleton_class)
                 Rib.singleton_class
               else
                 class << Rib; self; end
               end

    meta_rib.module_eval(code, __FILE__, __LINE__)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rib-0.1.0 lib/rib/plugin.rb