How would you set dynamically determined dependencies with or without bundler?

Hi!

I have developing a gem where some of it's dependencies are not
in .gemspec since they can be different depending of the value of
environment variable, class variable or just depending of the OS in
use. In short, these dependencies expose the same API, but can be
switched during runtime before actually loading the gem itself. The
gem then does something in the lines of:
require "rubygems"
gem "dependency", "version"
require "dependency"

depending of some criteria as written above. Now when using Bundler
with it's Bundler.setup invocation, what should be in Gemfile so it
would work the same on every configuration without having to have
modified Gemfile and Gemfile.lock on each different machine.

Can i have different "gem" lines in Gemfile on different machines and
commit it actually into VCS without having to modify it on each and
every machine separately?

Something in the Gemfile like this would work perfectly?
if RUBY_PLATFORM =~ /mswin|msys|mingw32/
  gem "dep1"
else
  gem "dep2"
end

In that case "dep1" and "dep2" would end up in Gemfile.lock - is it
okay, even if dep1 is not installable on unix platform?

Jarmo Pertman

···

-----
IT does really matter - http://www.itreallymatters.net

After playing around a little i found this solution to be the one i
needed - in Gemfile:

platforms :mswin, :mingw do
  gem "win-specific-gem1"
  gem "win-specific-gem2"
end

gem "gem3" # works on all platforms

Now in my gem i just do require "win-specific-gemX" if the OS is win
and on other's require "gem3". If there's any better solution then let
me know of course :slight_smile:

Jarmo Pertman

···

-----
IT does really matter - http://www.itreallymatters.net

On Jun 18, 10:21 am, Jarmo Pertman <jarm...@gmail.com> wrote:

Hi!

I have developing a gem where some of it's dependencies are not
in .gemspec since they can be different depending of the value of
environment variable, class variable or just depending of the OS in
use. In short, these dependencies expose the same API, but can be
switched during runtime before actually loading the gem itself. The
gem then does something in the lines of:
require "rubygems"
gem "dependency", "version"
require "dependency"

depending of some criteria as written above. Now when using Bundler
with it's Bundler.setup invocation, what should be in Gemfile so it
would work the same on every configuration without having to have
modified Gemfile and Gemfile.lock on each different machine.

Can i have different "gem" lines in Gemfile on different machines and
commit it actually into VCS without having to modify it on each and
every machine separately?

Something in the Gemfile like this would work perfectly?
if RUBY_PLATFORM =~ /mswin|msys|mingw32/
gem "dep1"
else
gem "dep2"
end

In that case "dep1" and "dep2" would end up in Gemfile.lock - is it
okay, even if dep1 is not installable on unix platform?

Jarmo Pertman
-----
IT does really matter -http://www.itreallymatters.net

unsubscribe

···

Date: Sat, 18 Jun 2011 18:45:32 +0900
From: jarmo.p@gmail.com
Subject: Re: how would you set dynamically determined dependencies with or without bundler?
To: ruby-talk@ruby-lang.org

After playing around a little i found this solution to be the one i
needed - in Gemfile:

platforms :mswin, :mingw do
  gem "win-specific-gem1"
  gem "win-specific-gem2"
end

gem "gem3" # works on all platforms

Now in my gem i just do require "win-specific-gemX" if the OS is win
and on other's require "gem3". If there's any better solution then let
me know of course :slight_smile:

Jarmo Pertman
-----
IT does really matter - http://www.itreallymatters.net

On Jun 18, 10:21 am, Jarmo Pertman <jarm...@gmail.com> wrote:
> Hi!
>
> I have developing a gem where some of it's dependencies are not
> in .gemspec since they can be different depending of the value of
> environment variable, class variable or just depending of the OS in
> use. In short, these dependencies expose the same API, but can be
> switched during runtime before actually loading the gem itself. The
> gem then does something in the lines of:
> require "rubygems"
> gem "dependency", "version"
> require "dependency"
>
> depending of some criteria as written above. Now when using Bundler
> with it's Bundler.setup invocation, what should be in Gemfile so it
> would work the same on every configuration without having to have
> modified Gemfile and Gemfile.lock on each different machine.
>
> Can i have different "gem" lines in Gemfile on different machines and
> commit it actually into VCS without having to modify it on each and
> every machine separately?
>
> Something in the Gemfile like this would work perfectly?
> if RUBY_PLATFORM =~ /mswin|msys|mingw32/
> gem "dep1"
> else
> gem "dep2"
> end
>
> In that case "dep1" and "dep2" would end up in Gemfile.lock - is it
> okay, even if dep1 is not installable on unix platform?
>
> Jarmo Pertman
> -----
> IT does really matter -http://www.itreallymatters.net