public
Description: selectively import methods from modules
Homepage: http://projects.gregweber.info/module-import
Clone URL: git://github.com/gregwebs/module-import.git
Click here to lend your support to: module-import and make a donation at www.pledgie.com !
name age message
file README Loading commit data...
file Rakefile
directory lib/
directory spec/
directory tasks/
README
== Summary
selectively include module methods with Kernel#import

== Author and License
Copyright (c) 2008 Greg Weber, http://gregweber.info
Licensed under the MIT license

== Usage

  require 'rubygems'
  require 'module-import'

  module Foo
    def foo; 'foo' end
    def bar; 'bar' end
  end

  class Importer
    import Foo, :bar
  end
  Importer.new.bar # => 'bar'
  Importer.new.foo # => # NoMethodError

  class Importer
    import Foo, :not_defined # => #not_defined not found in Foo (ImportError)
  end


Giving no methods (or all methods) should behave the same as a normal include

  class Importer2
    import Foo # same as import Foo, :foo, :bar
  end
  Importer2.new.bar # => 'bar'
  Importer2.new.foo # => 'foo'

However, there is one important difference.  New changes in the included module will not effect the class.
  module Foo
    undef_method :foo
    def bar; fail end
  end
  Importer2.new.bar # => 'bar'
  Importer2.new.foo # => 'foo'

== WARNING!
There is no way for Kernel#import to track dependencies between methods!  To help with this, by default, all private 
methods from the module will be imported unless the option :import_private is set to false
To write a module that works with this system well, your public methods should depend only on private methods.
To use this on someone else's module, you should either import the full module or write tests or inspect the source code 
of the module you are importing.

== Install
gem install module-import

== Source
=== browser
http://github.com/gregwebs/module-import/tree/master

=== repository
git clone git://github.com/gregwebs/module-import.git

== Homepage
http://gregweber.info/projects/module-import.html

== RDoc documentation
included with the gem

== Notes
=== Testing
4:1 test:code ratio, I think I have all the corner cases covered.  In particular, this does not break inheritance and 
everything works the same for importing into a module as it does for importing into class.

=== Implementation
Includes a duplicate of the module that has methods removed