0.0
No commit activity in last 3 years
No release in over 3 years
Stop asking where that thing came from.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

NamedImports

Ever look at a class in a Ruby file and wonder "Where the hell did that come from?" If you have, then this might ease your pain.

Installation

Locally (to your application)

Add the gem to your application's Gemfile:

gem 'named_imports'

...and then run:

bundle install

Globally (to your system)

Alternatively, install it globally:

gem install named_imports

Usage

Require the named_imports gem in the entrypoint of your project, or at whatever point you know you will need named imports in Ruby files evaluated after that point:

require 'named_imports'

Then, use named imports:

# ~/your_project/lib/foo.rb

class Foo
  def self.some_bool
    true
  end
end
# ~/your_project/lib/example.rb

from 'foo', import { Foo }

Foo.some_bool
#=> true

You can also specify which constant to import, which provides some safety that you don't try to access constants you haven't specified:

# ~/your_project/lib/whatever/bar_and_baz.rb

class Bar
  def self.some_int
    123
  end
end

class Baz
  def self.some_str
    "hi"
  end
end
# ~/your_project/lib/example.rb

from './whatever/bar_and_baz', import { Baz }

Bar.some_int
#=> NameError (uninitialized constant Bar)

Baz.some_str
#=> "hi"

You can import multiple constants as well, by separating them with a semicolon in the import block:

# ~/your_project/lib/whatever/bam_and_bop.rb

class Bam
  def self.some_ary
    []
  end
end

class Bop
  def self.some_hash
    {}
  end
end
# ~/your_project/lib/example.rb

from 'whatever/bam_and_bop.rb', import { Bam; Bop }

Bam.some_ary
#=> []

Bop.some_hash
#=> {}

TODO

  • named constant imports
  • multiple constant imports
  • top-level function imports
  • namespace should not be polluted with non-specified constants (before the specified import is referenced/used)
  • namespace should not be polluted with non-specified constants (after the specified import is referenced/used)
  • namespace of child imports should not be polluted with constants from the parent's scope
  • cached imports so constants are always reused (as opposed to being redefined in a new anonymous module)

Development

Install dependencies

bin/setup

Run the tests

rake spec

Run the linter

rubocop

Create release

rake release

Contributing

Bug reports and pull requests for this project are welcome at its GitHub page. If you choose to contribute, please be nice so I don't have to run out of bubblegum, etc.

License

This project is open source, under the terms of the MIT license.

Code of Conduct

Everyone interacting in the NamedImports project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.