Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

74 lines (51 sloc) 1.915 kb

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.

Examples

Explicit and implicit loading of constants:

require 'open_namespace'

module Project
  module Plugins
    include OpenNamespace
  end
end

# explicitly load constants
Project::Plguins.require_const :foo_bar
# => Project::Plugins::FooBar

# explicitly load constants with odd capitalization
Project::Plugins.require_const :tcp_session
# => Project::Plugins::TCPSession

# explicitly load constants via sub-paths
Project::Plguins.require_const 'templates/erb'
# => Project::Plugins::Templates::Erb

# implicitly load constants via const_missing
Project::Plugins::Other
# => Project::Plugins::Other

Loading constants from alternate namespace root directories:

module Project
  module UI
    module CommandLine
      module Commands
        include OpenNamespace

        self.namespace_root = File.join('project','ui','command_line','commands')
      end
    end
  end
end

Project::UI::CommandLine::Commands.require_const :help
# => Project::UI::CommandLine::Commands::Help

Install

$ gem install open_namespace

License

Copyright (c) 2010-2012 Hal Brodigan

See {file:LICENSE.txt} for license information.

Jump to Line
Something went wrong with that request. Please try again.