OpenNamespace
Description
OpenNamespace allows namespaces to require and find classes and modules from
RubyGems. Using OpenNamespace you can make a Plugins module able to
load plugin modules/classes from other gems.
Features
- Provides implicit loading of constants via
const_defined?. - Provides implicit loading of constants via
const_missing. - Provides explicit loading of constants via
require_const. - Can auto-load other sub-gems (ex:
foo-bar) from the main gem's namespace (ex:Foo).
Examples
Include it into a namespace:
require 'open_namespace'
module Project
module Plugins
include OpenNamespace
end
endExplicitly load constants via their file name:
Project::Plugins.require_const :foo_bar
# => Project::Plugins::FooBarExplicitly load constants containing uppercase acronyms:
Project::Plugins.require_const :tcp_session
# => Project::Plugins::TCPSessionExplicitly load constants from nested directories:
Project::Plugins.require_const 'templates/erb'
# => Project::Plugins::Templates::ErbImplicitly load constants via const_missing:
Project::Plugins::Other
# => Project::Plugins::OtherLoading constants from alternate namespace root directories:
module Project
module UI
module CommandLine
module Commands
include OpenNamespace
self.namespace_root = File.join(__dir__,'commands')
end
end
end
end
Project::UI::CommandLine::Commands.require_const :help
# => Project::UI::CommandLine::Commands::HelpInstall
$ gem install open_namespaceLicense
See {file:LICENSE.txt} for license information.