Sha256: 4b8711f22b4a7f4f0f07e143df65d3b29a6a4f4c03e4cded667bedf2051d5bef

Contents?: true

Size: 742 Bytes

Versions: 1

Compression:

Stored size: 742 Bytes

Contents

class ImportError < Exception; end

module Kernel

  # include a duplicate of the module with all uneeded instance methods removed
  def import(mod, *meths)
    include_module_copy = lambda do |block|
      mod_dup = mod.dup
      mod_dup.module_eval &block if block
      include mod_dup
    end

    if meths.size == 0
      include_module_copy.call(nil)

    else
      # get list of methods to remove module
      ims = mod.instance_methods.map {|m| m.to_sym}
      if (ims & meths).size != meths.size
        raise ImportError, "##{(meths - ims).join(' and #')} not found in #{mod}"
      end
      ims = ims - meths

      include_module_copy.call( lambda do
        ims.each { |meth| remove_method meth }
      end )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
module-import-0.1.0 lib/import.rb