diff --git a/pkgs/development/interpreters/ruby/gem.nix b/pkgs/development/interpreters/ruby/gem.nix index f90be459c32..d8173de2ecc 100644 --- a/pkgs/development/interpreters/ruby/gem.nix +++ b/pkgs/development/interpreters/ruby/gem.nix @@ -3,7 +3,7 @@ { name , namePrefix ? "ruby${ruby.majorVersion}" + "-" , buildInputs ? [] -, doCheck ? true +, doCheck ? false , doGitPrecheckHack ? false , meta ? {} , gemPath ? [] diff --git a/pkgs/development/interpreters/ruby/gems.nix b/pkgs/development/interpreters/ruby/gems.nix index 0b20a9206af..fa573a0ce95 100644 --- a/pkgs/development/interpreters/ruby/gems.nix +++ b/pkgs/development/interpreters/ruby/gems.nix @@ -1,15 +1,28 @@ -{ ruby, callPackage }: +# is a pretty good interface for calling rubygems +# +# since there are so many rubygems, and we don't want to manage them all, +# proposed design pattern is keep your gem dependencies in a local file +# (hopefully managed with nix-bundle) +# +# use rubyLibs.importGems to call the local file, which has access to all +# the stuff in here +# +# gems here are either super common (rspec) or require patches to work +# properly (libv8) + +{ ruby, callPackage, pkgs }: let - buildRubyGem = callPackage ./gem.nix { inherit ruby; }; -in rec { + buildRubyGem = callPackage ./gem.nix {}; +self = rec { inherit buildRubyGem; - builder = buildRubyGem { - name = "builder-3.2.2"; - sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2"; - doCheck = false; - }; + # import an attrset full of gems, then override necessary gems + importGems = file: (callPackage file { inherit buildRubyGem; rubyLibs = self; }); + + ################################################################## + # stuff EVERYONE needs + ################################################################## bundler = buildRubyGem { name = "bundler-1.6.5"; @@ -18,42 +31,6 @@ in rec { checkPhase = ":"; }; - capistrano = buildRubyGem { - name = "capistrano-3.2.1"; - sha256 = "0jcx8jijbvl05pjd7jrzb1sf968vjzpvb190d1kfa968hfc92lm0"; - gemPath = [ colorize i18n net_scp net_ssh rake sshkit ]; - doCheck = false; - }; - - colorize = buildRubyGem { - name = "colorize-0.7.3"; - sha256 = "0hccxpn0gryhdpyymkr7fnv2khz051f5rpw4xyrp9dr53b7yv3v2"; - }; - - i18n = buildRubyGem { - name = "i18n-0.6.11"; - sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk"; - }; - - json = buildRubyGem { - name = "json-1.8.1"; - sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn"; - doCheck = false; - }; - - net_scp = buildRubyGem { - name = "net-scp-1.2.1"; - sha256 = "0b0jqrcsp4bbi4n4mzyf70cp2ysyp6x07j8k8cqgxnvb4i3a134j"; - gemPath = [ net_ssh ]; - doCheck = false; - }; - - net_ssh = buildRubyGem { - name = "net-ssh-2.9.1"; - sha256 = "1vscp4r58jisiigqc6d6752w19m1m6hmi3jkzmp3ydxai7h3jb2j"; - doCheck = false; - }; - rake = buildRubyGem { name = "rake-10.3.2"; sha256 = "0nvpkjrpsk8xxnij2wd1cdn6arja9q11sxx4aq4fz18bc6fss15m"; @@ -61,10 +38,50 @@ in rec { checkPhase = ":"; }; - sshkit = buildRubyGem { - name = "sshkit-1.5.1"; - sha256 = "0lyd77b43dh897lx8iqdm9284ara7076nahmlis33qkfjfs105dy"; - gemPath = [ bundler colorize net_scp net_ssh ]; - doGitPrecheckHack = true; + + ################################################################## + # common dependencies + ################################################################## + + diff_lcs = buildRubyGem { + name = "diff-lcs-1.2.5"; + sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1"; + doCheck = false; # check depends on rspec! }; -} + + rspec = rspec_3_0; + + rspec_3_0 = buildRubyGem { + name = "rspec-3.0.0"; + sha256 = "1x94vk8dlk57clqlyb741y5bsmidp8131wyrb1vh00hi5mdb5szy"; + gemPath = [ diff_lcs rspec_core rspec_expectations rspec_mocks rspec_support ]; + }; + + rspec_2_14 = buildRubyGem { + name = "rspec-2.14.1"; + sha256 = "134y4wzk1prninb5a0bhxgm30kqfzl8dg06af4js5ylnhv2wd7sg"; + }; + + rspec_core = buildRubyGem { + name = "rspec-core-3.0.3"; + sha256 = "0395m5rfpbh87wm3mx549zvm190gikpzyld0xhlr55qwzp6ny97m"; + gemPath = [ rspec_support ]; + }; + + rspec_expectations = buildRubyGem { + name = "rspec-expectations-3.0.3"; + sha256 = "1mzp3v5r7qy28q8x6dkdib9ymwrxxz81jiq9vfr94jxbmy8rkhn0"; + gemPath = [ diff_lcs rspec_support ]; + }; + + rspec_mocks = buildRubyGem { + name = "rspec-mocks-3.0.3"; + sha256 = "0svc5wq8k4w8iamj2r7xw4xwhfczcj09s0ps9wz1mmgy9cvn1lj6"; + gemPath = [ rspec_support ]; + }; + + rspec_support = buildRubyGem { + name = "rspec-support-3.0.3"; + sha256 = "06lxzc4i3cbkm3qc5sdqcg665cyq9hnmmy0qkn355vy4s4vch94l"; + }; +}; in self diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aaa8484584c..2fdddc9e21a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4045,19 +4045,14 @@ let ruby_2_0 = ruby_2_0_0; ruby_2_1 = ruby_2_1_3; - ruby18Libs = callPackage ../development/interpreters/ruby/gems.nix { - ruby = ruby18; + rubyLibsWith = ruby: callPackage ../development/interpreters/ruby/gems.nix { + inherit ruby; }; - ruby19Libs = callPackage ../development/interpreters/ruby/gems.nix { - ruby = ruby19; - }; - - ruby2Libs = callPackage ../development/interpreters/ruby/gems.nix { - ruby = ruby2; - }; - - rubyLibs = ruby19Libs; + ruby18Libs = rubyLibsWith ruby18; + ruby19Libs = rubyLibsWith ruby19; + ruby2Libs = rubyLibsWith ruby2; + rubyLibs = recurseIntoAttrs ruby19Libs; rake = rubyLibs.rake;