Envandle

A rubygem for enabling Gemfiles to specify gem locations from environment variables.

Build Status

Installation

$ gem install envandle

Usage

Enclose your Gemfile's code with an envandle block.

require "envandle"

binding.envandle do
  source "https://rubygems.org"

  gem "mygem", "~> 1.0"
end

Set the environment variables.

export ENVANDLE_GEM_PATH=mygem:/path/to/mygem

And execute Bundler.

$ bundle

Examples

Setting Paths

You can specify the gem method's path option by setting the ENVANDLE_GEM_PATH variable.

For example,

ENV["ENVANDLE_GEM_PATH"] = "mygem:/path/to/mygem"

binding.envandle do
  source "https://rubygems.org"

  gem "mygem", "~> 1.0"
end

is evaluated as:

gem "mygem", path: "/path/to/mygem"

If the variable is not set,

ENV["ENVANDLE_GEM_PATH"] = ""

binding.envandle do
  source "https://rubygems.org"

  gem "mygem", "~> 1.0"
end

is evaluated as:

gem "mygem", "~> 1.0"

Setting Git Branches

You can specify the gem method's git and branch options by setting the ENVANDLE_GEM_GIT_BRANCH variable.

For example,

ENV["ENVANDLE_GEM_GIT_BRANCH"] = "mygem:https://github.com/mosop/mygem.git#edge"

envandle do
  source "https://rubygems.org"

  gem "mygem", "~> 1.0"
end

is evaluated as:

gem "mygem", git: "https://github.com/mosop/mygem.git", branch: "edge"

If the variable is not set,

ENV["ENVANDLE_GEM_GIT_BRANCH"] = ""

binding.envandle do
  source "https://rubygems.org"

  gem "mygem", "~> 1.0"
end

is evaluated as:

gem "mygem", "~> 1.0"

Setting Git Commit IDs

You can specify the gem method's git and ref options by setting the ENVANDLE_GEM_GIT_REF variable.

ENV["ENVANDLE_GEM_GIT_REF"] = "mygem:https://github.com/mosop/mygem.git#aed3d9b9965b6938cca7490e98423cf9b5908b09"

Specifying Gemspecs

You can also specify a gemspec not a single gem.

For example, if your gem's name is "mygem", the gemspec refers the a, b and c gems and the c's version requirement is "~> 1.0",

ENV["ENVANDLE_GEM_PATH"] = "a:/path/to/a;b:/path/to/b"

binding.envandle do
  source "https://rubygems.org"

  gemspec
end

is evaluated as:

gem "mygem", path: "."
gem "a", path: "/path/to/a"
gem "b", path: "/path/to/b"
gem "c", "~> 1.0"

Resolving Multilevel Dependencies

For example, if a Gemfile refers the gem a that depends on the gem b, Envandle also tries to resolve the b's reference by the environment variables.

ENV["ENVANDLE_GEM_PATH"] = "a:/path/to/a;b:/path/to/b"

binding.envandle do
  source "https://rubygems.org"

  gem "a", "~> 1.0"
end

is evaluated as:

gem "a", path: "/path/to/a"
gem "b", path: "/path/to/b"

install-envandle

The install-envandle command just installs Envandle itself with the bundle install command. It's useful for successfully loading Envandle in your Gemfile with the Bundler's --path option.

$ install-envandle -h
install-envandle [OPTIONS]

Installs Envandle using Bundler.

Options:
  --envandle-source      gem source (default: https://rubygems.org)
  --envandle-bundle-bin  command path (default: bundle)

Additionally, you can specify all of the bundle-install's options.

Usage Example

$ gem install bundler
$ gem install envandle
$ install-envandle --path vendor/bundle
$ bundle install