Skip to content

postmodern/open_namespace

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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
end

Explicitly load constants via their file name:

Project::Plugins.require_const :foo_bar
# => Project::Plugins::FooBar

Explicitly load constants containing uppercase acronyms:

Project::Plugins.require_const :tcp_session
# => Project::Plugins::TCPSession

Explicitly load constants from nested directories:

Project::Plugins.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(__dir__,'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-2022 Hal Brodigan

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

About

Allows namespaces to load constants on-demand

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages