summary refs log tree commit diff
path: root/pkgs/applications/networking
diff options
context:
space:
mode:
authorMatej Cotman <cotman.matej@gmail.com>2015-02-07 15:26:16 +0100
committerMatej Cotman <cotman.matej@gmail.com>2015-02-07 15:32:20 +0100
commit8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978 (patch)
treea01b892b379000b31fa06b7699ef882d37e028bf /pkgs/applications/networking
parentae34f923f7ff67ad9c39fa00ccf812b41426c1f1 (diff)
downloadnixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.tar
nixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.tar.gz
nixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.tar.bz2
nixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.tar.lz
nixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.tar.xz
nixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.tar.zst
nixlib-8967a2b32de5d3df5a4f3c9cbafe819bbc6f9978.zip
panamax: rewrite using 'pleasent ruby'
Diffstat (limited to 'pkgs/applications/networking')
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-api23
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-api.lock164
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-api.nix362
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-ui30
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock217
-rw-r--r--pkgs/applications/networking/cluster/panamax/Gemfile-ui.nix482
-rw-r--r--pkgs/applications/networking/cluster/panamax/api.nix45
-rw-r--r--pkgs/applications/networking/cluster/panamax/gemset-api.nix571
-rw-r--r--pkgs/applications/networking/cluster/panamax/gemset-ui.nix760
-rw-r--r--pkgs/applications/networking/cluster/panamax/ui.nix39
10 files changed, 1800 insertions, 893 deletions
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-api b/pkgs/applications/networking/cluster/panamax/Gemfile-api
new file mode 100644
index 000000000000..82085aa6db08
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-api
@@ -0,0 +1,23 @@
+source 'https://rubygems.org'
+
+gem 'rails', '4.1.7'
+gem 'puma', '2.8.2'
+gem 'sqlite3', '1.3.9'
+gem 'faraday_middleware', '0.9.0'
+gem 'docker-api', '1.13.0', require: 'docker'
+gem 'fleet-api', '0.6.0', require: 'fleet'
+gem 'active_model_serializers', '0.9.0'
+gem 'octokit', '3.2.0'
+gem 'kmts', '2.0.1'
+
+group :test, :development do
+  gem 'rspec-rails'
+  gem 'its'
+end
+
+group :test do
+  gem 'coveralls', '0.7.0'
+  gem 'shoulda-matchers', '2.6.1'
+  gem 'database_cleaner', '1.3.0'
+  gem 'webmock', '1.20.0'
+end
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-api.lock b/pkgs/applications/networking/cluster/panamax/Gemfile-api.lock
new file mode 100644
index 000000000000..e0ebe72132be
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-api.lock
@@ -0,0 +1,164 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actionmailer (4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      mail (~> 2.5, >= 2.5.4)
+    actionpack (4.1.7)
+      actionview (= 4.1.7)
+      activesupport (= 4.1.7)
+      rack (~> 1.5.2)
+      rack-test (~> 0.6.2)
+    actionview (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+    active_model_serializers (0.9.0)
+      activemodel (>= 3.2)
+    activemodel (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+    activerecord (4.1.7)
+      activemodel (= 4.1.7)
+      activesupport (= 4.1.7)
+      arel (~> 5.0.0)
+    activesupport (4.1.7)
+      i18n (~> 0.6, >= 0.6.9)
+      json (~> 1.7, >= 1.7.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.1)
+      tzinfo (~> 1.1)
+    addressable (2.3.6)
+    archive-tar-minitar (0.5.2)
+    arel (5.0.1.20140414130214)
+    builder (3.2.2)
+    coveralls (0.7.0)
+      multi_json (~> 1.3)
+      rest-client
+      simplecov (>= 0.7)
+      term-ansicolor
+      thor
+    crack (0.4.2)
+      safe_yaml (~> 1.0.0)
+    database_cleaner (1.3.0)
+    diff-lcs (1.2.5)
+    docile (1.1.5)
+    docker-api (1.13.0)
+      archive-tar-minitar
+      excon (>= 0.37.0)
+      json
+    erubis (2.7.0)
+    excon (0.37.0)
+    faraday (0.8.9)
+      multipart-post (~> 1.2.0)
+    faraday_middleware (0.9.0)
+      faraday (>= 0.7.4, < 0.9)
+    fleet-api (0.6.0)
+      faraday (= 0.8.9)
+      faraday_middleware (= 0.9.0)
+    hike (1.2.3)
+    i18n (0.6.11)
+    its (0.2.0)
+      rspec-core
+    json (1.8.1)
+    kmts (2.0.1)
+    mail (2.6.3)
+      mime-types (>= 1.16, < 3)
+    mime-types (2.4.3)
+    minitest (5.4.3)
+    multi_json (1.10.1)
+    multipart-post (1.2.0)
+    octokit (3.2.0)
+      sawyer (~> 0.5.3)
+    puma (2.8.2)
+      rack (>= 1.1, < 2.0)
+    rack (1.5.2)
+    rack-test (0.6.2)
+      rack (>= 1.0)
+    rails (4.1.7)
+      actionmailer (= 4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      activemodel (= 4.1.7)
+      activerecord (= 4.1.7)
+      activesupport (= 4.1.7)
+      bundler (>= 1.3.0, < 2.0)
+      railties (= 4.1.7)
+      sprockets-rails (~> 2.0)
+    railties (4.1.7)
+      actionpack (= 4.1.7)
+      activesupport (= 4.1.7)
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rake (10.4.0)
+    rest-client (1.6.7)
+      mime-types (>= 1.16)
+    rspec-core (3.1.7)
+      rspec-support (~> 3.1.0)
+    rspec-expectations (3.1.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.1.0)
+    rspec-mocks (3.1.3)
+      rspec-support (~> 3.1.0)
+    rspec-rails (3.1.0)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      railties (>= 3.0)
+      rspec-core (~> 3.1.0)
+      rspec-expectations (~> 3.1.0)
+      rspec-mocks (~> 3.1.0)
+      rspec-support (~> 3.1.0)
+    rspec-support (3.1.2)
+    safe_yaml (1.0.4)
+    sawyer (0.5.4)
+      addressable (~> 2.3.5)
+      faraday (~> 0.8, < 0.10)
+    shoulda-matchers (2.6.1)
+      activesupport (>= 3.0.0)
+    simplecov (0.9.1)
+      docile (~> 1.1.0)
+      multi_json (~> 1.0)
+      simplecov-html (~> 0.8.0)
+    simplecov-html (0.8.0)
+    sprockets (2.12.3)
+      hike (~> 1.2)
+      multi_json (~> 1.0)
+      rack (~> 1.0)
+      tilt (~> 1.1, != 1.3.0)
+    sprockets-rails (2.2.0)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      sprockets (>= 2.8, < 4.0)
+    sqlite3 (1.3.9)
+    term-ansicolor (1.3.0)
+      tins (~> 1.0)
+    thor (0.19.1)
+    thread_safe (0.3.4)
+    tilt (1.4.1)
+    tins (1.3.0)
+    tzinfo (1.2.2)
+      thread_safe (~> 0.1)
+    webmock (1.20.0)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  active_model_serializers (= 0.9.0)
+  coveralls (= 0.7.0)
+  database_cleaner (= 1.3.0)
+  docker-api (= 1.13.0)
+  faraday_middleware (= 0.9.0)
+  fleet-api (= 0.6.0)
+  its
+  kmts (= 2.0.1)
+  octokit (= 3.2.0)
+  puma (= 2.8.2)
+  rails (= 4.1.7)
+  rspec-rails
+  shoulda-matchers (= 2.6.1)
+  sqlite3 (= 1.3.9)
+  webmock (= 1.20.0)
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-api.nix b/pkgs/applications/networking/cluster/panamax/Gemfile-api.nix
deleted file mode 100644
index 94074f9d744a..000000000000
--- a/pkgs/applications/networking/cluster/panamax/Gemfile-api.nix
+++ /dev/null
@@ -1,362 +0,0 @@
-[
-{
-name = "actionmailer";
-hash = "05f36cd4897fd9229d89b09838edf0836dadab1065a2503a23eddd25a72a5b62";
-url = "http://rubygems.org/downloads/actionmailer-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "actionpack";
-hash = "5dfd227ed14e755db89f3fe3778271a280560bf5550323309d3d190880b7c11f";
-url = "http://rubygems.org/downloads/actionpack-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "actionview";
-hash = "5d8d50df260f7c0f65ee71fb0dcc8bb344b78d0ff7d26de4b152d8ebde19571b";
-url = "http://rubygems.org/downloads/actionview-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "active_model_serializers";
-hash = "744e1a710f6fd44f9140152bbce911c6705e59fdfc29300f3fa152ce477f43f3";
-url = "http://rubygems.org/downloads/active_model_serializers-0.9.0.gem";
-version = "0.9.0";
-}
-{
-name = "activemodel";
-hash = "590288279d69fd6fba3a227275ca80a90131eb04e8d1381fbc7a1f5ac4ff9866";
-url = "http://rubygems.org/downloads/activemodel-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "activerecord";
-hash = "c52f2d21892a38c0817cafa0028f65217f5986a57921fdd2af7cc92a46059948";
-url = "http://rubygems.org/downloads/activerecord-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "activesupport";
-hash = "7a0d7b9c6e68b4cd01f9d686596aaf6671b0b16395cb97862f779666ccaf238e";
-url = "http://rubygems.org/downloads/activesupport-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "addressable";
-hash = "e822c28133d151d450778bbcf1f6e7742d4c3aba54498eb0da33d80a3990ee8c";
-url = "http://rubygems.org/downloads/addressable-2.3.6.gem";
-version = "2.3.6";
-}
-{
-name = "archive-tar-minitar";
-hash = "2fe26844b314b8e2bd52ec16cff90e610b5c19075d1000161f8c8d3cc231c6c8";
-url = "http://rubygems.org/downloads/archive-tar-minitar-0.5.2.gem";
-version = "0.5.2";
-}
-{
-name = "arel";
-hash = "c941f07bad89af26e8837c73d8a399b7777c721609f759eda015ed0081601636";
-url = "http://rubygems.org/downloads/arel-5.0.1.20140414130214.gem";
-version = "5.0.1.20140414130214";
-}
-{
-name = "builder";
-hash = "62fb9ad70ea42219a0c8d209a30281803712c717df7cb8f5ce5f63b4d489d191";
-url = "http://rubygems.org/downloads/builder-3.2.2.gem";
-version = "3.2.2";
-}
-{
-name = "coveralls";
-hash = "449284ddd071e2297d06d0a9d18fe4c2b4027848263b1087d4180fb44e03e36b";
-url = "http://rubygems.org/downloads/coveralls-0.7.0.gem";
-version = "0.7.0";
-}
-{
-name = "crack";
-hash = "ea4c34f052106f571235f627f561d28309151c09b841130bb7627c2d522589c6";
-url = "http://rubygems.org/downloads/crack-0.4.2.gem";
-version = "0.4.2";
-}
-{
-name = "database_cleaner";
-hash = "f675eb78d4fed65ae1e8503ccef4dfd25f4a3c3702bfb792789720a39a2f82a7";
-url = "http://rubygems.org/downloads/database_cleaner-1.3.0.gem";
-version = "1.3.0";
-}
-{
-name = "diff-lcs";
-hash = "a1d3dde665292317a883d319066792e3f0e6a24cade4bc4cc47605d27664c9ed";
-url = "http://rubygems.org/downloads/diff-lcs-1.2.5.gem";
-version = "1.2.5";
-}
-{
-name = "docile";
-hash = "5d3ee40b3a6567fe460601f3f4a3e199a98de37434ebfa242d751d0c79181255";
-url = "http://rubygems.org/downloads/docile-1.1.5.gem";
-version = "1.1.5";
-}
-{
-name = "docker-api";
-hash = "e65a1a62d0d56c273e279eb96625084f6bca82467de22682539d1efb8e5059e5";
-url = "http://rubygems.org/downloads/docker-api-1.13.0.gem";
-version = "1.13.0";
-}
-{
-name = "erubis";
-hash = "63653f5174a7997f6f1d6f465fbe1494dcc4bdab1fb8e635f6216989fb1148ba";
-url = "http://rubygems.org/downloads/erubis-2.7.0.gem";
-version = "2.7.0";
-}
-{
-name = "excon";
-hash = "626b862a9f759a669dc62c57ccc8b3fc09c0e24af3431a6c0aa416acab56a717";
-url = "http://rubygems.org/downloads/excon-0.37.0.gem";
-version = "0.37.0";
-}
-{
-name = "faraday";
-hash = "289c3b5b57821b52988bdb5178d3e1149741f2bae5fbee2a80bc83feb44ba79d";
-url = "http://rubygems.org/downloads/faraday-0.8.9.gem";
-version = "0.8.9";
-}
-{
-name = "faraday_middleware";
-hash = "02b37848159983ed1e4374f46f02325bf0364e8eb1e0a38839d2b4deb4889bcf";
-url = "http://rubygems.org/downloads/faraday_middleware-0.9.0.gem";
-version = "0.9.0";
-}
-{
-name = "fleet-api";
-hash = "c6aad769ddd4adafa81f99661bf04e2f7176d05bdd5834e0afe67607d8af6604";
-url = "http://rubygems.org/downloads/fleet-api-0.6.0.gem";
-version = "0.6.0";
-}
-{
-name = "hike";
-hash = "154e2f2593845e5bcd8ed2ba3092600c55c6ad8c630722857de3fdaf334ccc44";
-url = "http://rubygems.org/downloads/hike-1.2.3.gem";
-version = "1.2.3";
-}
-{
-name = "i18n";
-hash = "b37dda25b30484f2674a851e24ae098a38564a61c976fa91a34bf8fceaa3923b";
-url = "http://rubygems.org/downloads/i18n-0.6.11.gem";
-version = "0.6.11";
-}
-{
-name = "its";
-hash = "0ffd70eda8958938f6568141fac1fb8a2b8899abbf2b867f45e4e21b936ebc67";
-url = "http://rubygems.org/downloads/its-0.2.0.gem";
-version = "0.2.0";
-}
-{
-name = "json";
-hash = "961bfbbfa9fda1e857e9c791e964e6664e0d43bf687b19669dfbc7cdbc5e0200";
-url = "http://rubygems.org/downloads/json-1.8.1.gem";
-version = "1.8.1";
-}
-{
-name = "kmts";
-hash = "1bb5e075232b3ed13aaa01db5e1e8e2638ae3a8aa6aa2254198f0e42304066f2";
-url = "http://rubygems.org/downloads/kmts-2.0.1.gem";
-version = "2.0.1";
-}
-{
-name = "mail";
-hash = "d7fee1ec4e4ea9bb38b77de5baf53c17004133efcdff030bd1de5e3620306fd9";
-url = "http://rubygems.org/downloads/mail-2.6.3.gem";
-version = "2.6.3";
-}
-{
-name = "mime-types";
-hash = "38f29a89a273d15bfb99e839c6fe5cf7c463f223dd7ac5ee3c9287b1acd6d19a";
-url = "http://rubygems.org/downloads/mime-types-2.4.3.gem";
-version = "2.4.3";
-}
-{
-name = "minitest";
-hash = "a41b54b1c6e64b102fe78bf265045896845c38177a10bdb32d04caf4e06542f3";
-url = "http://rubygems.org/downloads/minitest-5.4.3.gem";
-version = "5.4.3";
-}
-{
-name = "multi_json";
-hash = "2c98979877e87df0b338ebf5c86091b390f53d62c11a8232bd51ca007e0b82d2";
-url = "http://rubygems.org/downloads/multi_json-1.10.1.gem";
-version = "1.10.1";
-}
-{
-name = "multipart-post";
-hash = "ccf26a61706f128a2a3f3745aba0f79fde7b6fee068e03490eb189c2aaa5e78a";
-url = "http://rubygems.org/downloads/multipart-post-1.2.0.gem";
-version = "1.2.0";
-}
-{
-name = "octokit";
-hash = "cf8690111a706d493f1ace13c81ce966f6f1ba29bc4d4896d65f9c0d431f941e";
-url = "http://rubygems.org/downloads/octokit-3.2.0.gem";
-version = "3.2.0";
-}
-{
-name = "puma";
-hash = "13ac36ce9535ead0b6ebbd540b5fa99ea53126c0f697a5ce96aefb8d5c75a7d0";
-url = "http://rubygems.org/downloads/puma-2.8.2.gem";
-version = "2.8.2";
-}
-{
-name = "rack";
-hash = "e64af00234e8faaa69ea81ef4e3800f40743c69560f0dda8fc9969660e775fa7";
-url = "http://rubygems.org/downloads/rack-1.5.2.gem";
-version = "1.5.2";
-}
-{
-name = "rack-test";
-hash = "7e920b6aac888e4a3846e5997fb1cbf456bdb5846322b58dc31697a54a38b306";
-url = "http://rubygems.org/downloads/rack-test-0.6.2.gem";
-version = "0.6.2";
-}
-{
-name = "rails";
-hash = "20972f5ce418d5b938afa42680bcbe8c52770c0664429233fa0e567a25bd3515";
-url = "http://rubygems.org/downloads/rails-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "railties";
-hash = "dfa7ef2174675c88492c62596bfe6d8aa78f3735305aaa372d5801f9328008d8";
-url = "http://rubygems.org/downloads/railties-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "rake";
-hash = "887f72d6711c31576abab37f1f7db45972402cc8544fa9a67c06d2c0f0ef2028";
-url = "http://rubygems.org/downloads/rake-10.4.0.gem";
-version = "10.4.0";
-}
-{
-name = "rest-client";
-hash = "a3203433b8b0c914648caea54395a8791a61e0df7d401c81f4e2b7f8a8fac75a";
-url = "http://rubygems.org/downloads/rest-client-1.6.7.gem";
-version = "1.6.7";
-}
-{
-name = "rspec-core";
-hash = "89e1aed9b8b1c22d4bc0cbed25e163c10075731df87e2ea9736f1863e9e66a05";
-url = "http://rubygems.org/downloads/rspec-core-3.1.7.gem";
-version = "3.1.7";
-}
-{
-name = "rspec-expectations";
-hash = "f0db34c6b7f351031880e08e59c8902f0f037b0e0f7e52345b978667b9190d55";
-url = "http://rubygems.org/downloads/rspec-expectations-3.1.2.gem";
-version = "3.1.2";
-}
-{
-name = "rspec-mocks";
-hash = "f9d76c70a9c38171cdce7a64b871739cf73ec8647d6b70adfe44453a072fb33f";
-url = "http://rubygems.org/downloads/rspec-mocks-3.1.3.gem";
-version = "3.1.3";
-}
-{
-name = "rspec-rails";
-hash = "980fa827218f483a0efb5d22922b53b1006cbd58e38ec593bb2bb016ecb031ac";
-url = "http://rubygems.org/downloads/rspec-rails-3.1.0.gem";
-version = "3.1.0";
-}
-{
-name = "rspec-support";
-hash = "2b5fc899bb71019b7ed956105e8492c90f077641309d9c7c0e09669a72dac693";
-url = "http://rubygems.org/downloads/rspec-support-3.1.2.gem";
-version = "3.1.2";
-}
-{
-name = "safe_yaml";
-hash = "248193992ef1730a0c9ec579999ef2256a2b3a32a9bd9d708a1e12544a489ec2";
-url = "http://rubygems.org/downloads/safe_yaml-1.0.4.gem";
-version = "1.0.4";
-}
-{
-name = "sawyer";
-hash = "5bf41b23f93568f14ffdfe6d0d417048f2eb7e9ed11695a7654a3de0ee277406";
-url = "http://rubygems.org/downloads/sawyer-0.5.4.gem";
-version = "0.5.4";
-}
-{
-name = "shoulda-matchers";
-hash = "81554002d29e612e55daf2c45b40b617ad7a2186d8eebaec6946ea46da8672dc";
-url = "http://rubygems.org/downloads/shoulda-matchers-2.6.1.gem";
-version = "2.6.1";
-}
-{
-name = "simplecov";
-hash = "ce9ffc797f9e4493bf97bbf5e88073ad7351d8234561b56ea3bd2baa68a71e1a";
-url = "http://rubygems.org/downloads/simplecov-0.9.1.gem";
-version = "0.9.1";
-}
-{
-name = "simplecov-html";
-hash = "69393ce932c2898dd5074913e360078f651f094a9b7300b286a78f43b11c164a";
-url = "http://rubygems.org/downloads/simplecov-html-0.8.0.gem";
-version = "0.8.0";
-}
-{
-name = "sprockets";
-hash = "c25a4a37c9436e5a2c877b926156bce1826a0156d9cd96ca704ab085726ec2ae";
-url = "http://rubygems.org/downloads/sprockets-2.12.3.gem";
-version = "2.12.3";
-}
-{
-name = "sprockets-rails";
-hash = "148ea6c109605093f84725dee46f2943e973cdb602f83b93e540a93d35ee4e10";
-url = "http://rubygems.org/downloads/sprockets-rails-2.2.0.gem";
-version = "2.2.0";
-}
-{
-name = "sqlite3";
-hash = "9984744afb5f44ca4a82aec66e257ff60783920afd48f06606d1fb4a9d51a61e";
-url = "http://rubygems.org/downloads/sqlite3-1.3.9.gem";
-version = "1.3.9";
-}
-{
-name = "term-ansicolor";
-hash = "8b5caf6839a0c1bbf7a55a9d2fbd3c172f623fa05c427f9b3ea5d75bdfe14fa8";
-url = "http://rubygems.org/downloads/term-ansicolor-1.3.0.gem";
-version = "1.3.0";
-}
-{
-name = "thor";
-hash = "9ff834f031b5550c743bb8a3139317fefdae9cdebd02d60de376658f427fe522";
-url = "http://rubygems.org/downloads/thor-0.19.1.gem";
-version = "0.19.1";
-}
-{
-name = "thread_safe";
-hash = "16315baa971c48d00104bcd35e8934e3f9ccfd3b8f429e3fca7ee2dfd81734b2";
-url = "http://rubygems.org/downloads/thread_safe-0.3.4.gem";
-version = "0.3.4";
-}
-{
-name = "tilt";
-hash = "39820562c4f5db45fe18de87ccc30a0e77a998bf5334b1d8c10a2f7dbc1f5903";
-url = "http://rubygems.org/downloads/tilt-1.4.1.gem";
-version = "1.4.1";
-}
-{
-name = "tins";
-hash = "b1ad5c07aef3f26b80f329c701bfedf83f1bc560e7516e0ce284d774fd2caafb";
-url = "http://rubygems.org/downloads/tins-1.3.0.gem";
-version = "1.3.0";
-}
-{
-name = "tzinfo";
-hash = "fdb1d3fdf2776d490c82a0e589a08e7cbde70ac1ae7d2b1f0b7e77f3e6b801b0";
-url = "http://rubygems.org/downloads/tzinfo-1.2.2.gem";
-version = "1.2.2";
-}
-{
-name = "webmock";
-hash = "d544830ab2203e2796ab55fbee6859d8e248c7e6deeadb4fa74448f63bd8852e";
-url = "http://rubygems.org/downloads/webmock-1.20.0.gem";
-version = "1.20.0";
-}
-]
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-ui b/pkgs/applications/networking/cluster/panamax/Gemfile-ui
new file mode 100644
index 000000000000..7efcabfd9e5c
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-ui
@@ -0,0 +1,30 @@
+source 'https://rubygems.org'
+
+gem 'rails', '4.1.7'
+gem 'puma', '2.8.2'
+gem 'sass', '3.3.9'
+gem 'therubyracer', '0.12.1', platforms: :ruby
+gem 'haml', '4.0.5'
+gem 'uglifier', '2.5.1'
+gem 'ctl_base_ui'
+gem 'activeresource', '4.0.0'
+gem 'kramdown', '1.4.0'
+gem 'zeroclipboard-rails'
+
+
+group :test, :development do
+  gem 'rspec-rails', '2.14.2'
+  gem 'capybara', '2.3.0'
+  gem 'teaspoon', '0.8.0'
+  gem 'phantomjs', '1.9.7.1'
+  gem 'dotenv-rails', '0.11.1'
+  gem 'pry'
+  gem 'pry-byebug'
+  gem 'pry-stack_explorer'
+end
+
+group :test do
+  gem 'webmock', '1.18.0'
+  gem 'sinatra', '1.4.5'
+  gem 'coveralls', '0.7.0'
+end
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock b/pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock
new file mode 100644
index 000000000000..67504f41a86f
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/Gemfile-ui.lock
@@ -0,0 +1,217 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actionmailer (4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      mail (~> 2.5, >= 2.5.4)
+    actionpack (4.1.7)
+      actionview (= 4.1.7)
+      activesupport (= 4.1.7)
+      rack (~> 1.5.2)
+      rack-test (~> 0.6.2)
+    actionview (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+      erubis (~> 2.7.0)
+    activemodel (4.1.7)
+      activesupport (= 4.1.7)
+      builder (~> 3.1)
+    activerecord (4.1.7)
+      activemodel (= 4.1.7)
+      activesupport (= 4.1.7)
+      arel (~> 5.0.0)
+    activeresource (4.0.0)
+      activemodel (~> 4.0)
+      activesupport (~> 4.0)
+      rails-observers (~> 0.1.1)
+    activesupport (4.1.7)
+      i18n (~> 0.6, >= 0.6.9)
+      json (~> 1.7, >= 1.7.7)
+      minitest (~> 5.1)
+      thread_safe (~> 0.1)
+      tzinfo (~> 1.1)
+    addressable (2.3.6)
+    arel (5.0.1.20140414130214)
+    binding_of_caller (0.7.2)
+      debug_inspector (>= 0.0.1)
+    builder (3.2.2)
+    byebug (3.5.1)
+      columnize (~> 0.8)
+      debugger-linecache (~> 1.2)
+      slop (~> 3.6)
+    capybara (2.3.0)
+      mime-types (>= 1.16)
+      nokogiri (>= 1.3.3)
+      rack (>= 1.0.0)
+      rack-test (>= 0.5.4)
+      xpath (~> 2.0)
+    coderay (1.1.0)
+    columnize (0.8.9)
+    coveralls (0.7.0)
+      multi_json (~> 1.3)
+      rest-client
+      simplecov (>= 0.7)
+      term-ansicolor
+      thor
+    crack (0.4.2)
+      safe_yaml (~> 1.0.0)
+    ctl_base_ui (0.0.4)
+      haml (~> 4.0)
+      jquery-rails (~> 3.1)
+      jquery-ui-rails (~> 4.2)
+      rails (~> 4.1)
+      sass (~> 3.3)
+    debug_inspector (0.0.2)
+    debugger-linecache (1.2.0)
+    diff-lcs (1.2.5)
+    docile (1.1.5)
+    dotenv (0.11.1)
+      dotenv-deployment (~> 0.0.2)
+    dotenv-deployment (0.0.2)
+    dotenv-rails (0.11.1)
+      dotenv (= 0.11.1)
+    erubis (2.7.0)
+    execjs (2.2.1)
+    haml (4.0.5)
+      tilt
+    hike (1.2.3)
+    i18n (0.6.11)
+    jquery-rails (3.1.2)
+      railties (>= 3.0, < 5.0)
+      thor (>= 0.14, < 2.0)
+    jquery-ui-rails (4.2.1)
+      railties (>= 3.2.16)
+    json (1.8.1)
+    kramdown (1.4.0)
+    libv8 (3.16.14.7)
+    mail (2.6.3)
+      mime-types (>= 1.16, < 3)
+    method_source (0.8.2)
+    mime-types (2.4.3)
+    mini_portile (0.6.0)
+    minitest (5.4.3)
+    multi_json (1.10.1)
+    nokogiri (1.6.2.1)
+      mini_portile (= 0.6.0)
+    phantomjs (1.9.7.1)
+    pry (0.10.1)
+      coderay (~> 1.1.0)
+      method_source (~> 0.8.1)
+      slop (~> 3.4)
+    pry-byebug (2.0.0)
+      byebug (~> 3.4)
+      pry (~> 0.10)
+    pry-stack_explorer (0.4.9.1)
+      binding_of_caller (>= 0.7)
+      pry (>= 0.9.11)
+    puma (2.8.2)
+      rack (>= 1.1, < 2.0)
+    rack (1.5.2)
+    rack-protection (1.5.3)
+      rack
+    rack-test (0.6.2)
+      rack (>= 1.0)
+    rails (4.1.7)
+      actionmailer (= 4.1.7)
+      actionpack (= 4.1.7)
+      actionview (= 4.1.7)
+      activemodel (= 4.1.7)
+      activerecord (= 4.1.7)
+      activesupport (= 4.1.7)
+      bundler (>= 1.3.0, < 2.0)
+      railties (= 4.1.7)
+      sprockets-rails (~> 2.0)
+    rails-observers (0.1.2)
+      activemodel (~> 4.0)
+    railties (4.1.7)
+      actionpack (= 4.1.7)
+      activesupport (= 4.1.7)
+      rake (>= 0.8.7)
+      thor (>= 0.18.1, < 2.0)
+    rake (10.4.1)
+    ref (1.0.5)
+    rest-client (1.6.7)
+      mime-types (>= 1.16)
+    rspec-core (2.14.8)
+    rspec-expectations (2.14.5)
+      diff-lcs (>= 1.1.3, < 2.0)
+    rspec-mocks (2.14.6)
+    rspec-rails (2.14.2)
+      actionpack (>= 3.0)
+      activemodel (>= 3.0)
+      activesupport (>= 3.0)
+      railties (>= 3.0)
+      rspec-core (~> 2.14.0)
+      rspec-expectations (~> 2.14.0)
+      rspec-mocks (~> 2.14.0)
+    safe_yaml (1.0.3)
+    sass (3.3.9)
+    simplecov (0.9.1)
+      docile (~> 1.1.0)
+      multi_json (~> 1.0)
+      simplecov-html (~> 0.8.0)
+    simplecov-html (0.8.0)
+    sinatra (1.4.5)
+      rack (~> 1.4)
+      rack-protection (~> 1.4)
+      tilt (~> 1.3, >= 1.3.4)
+    slop (3.6.0)
+    sprockets (2.12.3)
+      hike (~> 1.2)
+      multi_json (~> 1.0)
+      rack (~> 1.0)
+      tilt (~> 1.1, != 1.3.0)
+    sprockets-rails (2.2.2)
+      actionpack (>= 3.0)
+      activesupport (>= 3.0)
+      sprockets (>= 2.8, < 4.0)
+    teaspoon (0.8.0)
+      railties (>= 3.2.5, < 5)
+    term-ansicolor (1.3.0)
+      tins (~> 1.0)
+    therubyracer (0.12.1)
+      libv8 (~> 3.16.14.0)
+      ref
+    thor (0.19.1)
+    thread_safe (0.3.4)
+    tilt (1.4.1)
+    tins (1.1.0)
+    tzinfo (1.2.2)
+      thread_safe (~> 0.1)
+    uglifier (2.5.1)
+      execjs (>= 0.3.0)
+      json (>= 1.8.0)
+    webmock (1.18.0)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+    xpath (2.0.0)
+      nokogiri (~> 1.3)
+    zeroclipboard-rails (0.1.0)
+      railties (>= 3.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  activeresource (= 4.0.0)
+  capybara (= 2.3.0)
+  coveralls (= 0.7.0)
+  ctl_base_ui
+  dotenv-rails (= 0.11.1)
+  haml (= 4.0.5)
+  kramdown (= 1.4.0)
+  phantomjs (= 1.9.7.1)
+  pry
+  pry-byebug
+  pry-stack_explorer
+  puma (= 2.8.2)
+  rails (= 4.1.7)
+  rspec-rails (= 2.14.2)
+  sass (= 3.3.9)
+  sinatra (= 1.4.5)
+  teaspoon (= 0.8.0)
+  therubyracer (= 0.12.1)
+  uglifier (= 2.5.1)
+  webmock (= 1.18.0)
+  zeroclipboard-rails
diff --git a/pkgs/applications/networking/cluster/panamax/Gemfile-ui.nix b/pkgs/applications/networking/cluster/panamax/Gemfile-ui.nix
deleted file mode 100644
index 9fabe820cb3c..000000000000
--- a/pkgs/applications/networking/cluster/panamax/Gemfile-ui.nix
+++ /dev/null
@@ -1,482 +0,0 @@
-[
-{
-name = "actionmailer";
-hash = "05f36cd4897fd9229d89b09838edf0836dadab1065a2503a23eddd25a72a5b62";
-url = "http://rubygems.org/downloads/actionmailer-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "actionpack";
-hash = "5dfd227ed14e755db89f3fe3778271a280560bf5550323309d3d190880b7c11f";
-url = "http://rubygems.org/downloads/actionpack-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "actionview";
-hash = "5d8d50df260f7c0f65ee71fb0dcc8bb344b78d0ff7d26de4b152d8ebde19571b";
-url = "http://rubygems.org/downloads/actionview-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "activemodel";
-hash = "590288279d69fd6fba3a227275ca80a90131eb04e8d1381fbc7a1f5ac4ff9866";
-url = "http://rubygems.org/downloads/activemodel-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "activerecord";
-hash = "c52f2d21892a38c0817cafa0028f65217f5986a57921fdd2af7cc92a46059948";
-url = "http://rubygems.org/downloads/activerecord-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "activeresource";
-hash = "589266ba14c344903c582e82ad39da5f24067f9bcbcf8213d55f7a19e58b8539";
-url = "http://rubygems.org/downloads/activeresource-4.0.0.gem";
-version = "4.0.0";
-}
-{
-name = "activesupport";
-hash = "7a0d7b9c6e68b4cd01f9d686596aaf6671b0b16395cb97862f779666ccaf238e";
-url = "http://rubygems.org/downloads/activesupport-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "addressable";
-hash = "e822c28133d151d450778bbcf1f6e7742d4c3aba54498eb0da33d80a3990ee8c";
-url = "http://rubygems.org/downloads/addressable-2.3.6.gem";
-version = "2.3.6";
-}
-{
-name = "arel";
-hash = "c941f07bad89af26e8837c73d8a399b7777c721609f759eda015ed0081601636";
-url = "http://rubygems.org/downloads/arel-5.0.1.20140414130214.gem";
-version = "5.0.1.20140414130214";
-}
-{
-name = "binding_of_caller";
-hash = "d327682ce1d8e8cc46e282a46052946af0de16bef734014c63df0aac66334f96";
-url = "http://rubygems.org/downloads/binding_of_caller-0.7.2.gem";
-version = "0.7.2";
-}
-{
-name = "builder";
-hash = "62fb9ad70ea42219a0c8d209a30281803712c717df7cb8f5ce5f63b4d489d191";
-url = "http://rubygems.org/downloads/builder-3.2.2.gem";
-version = "3.2.2";
-}
-{
-name = "byebug";
-hash = "56358e944d1cdb83151d4400631306eb2539b5fdf1b5e784cdd984b14016ac51";
-url = "http://rubygems.org/downloads/byebug-3.5.1.gem";
-version = "3.5.1";
-}
-{
-name = "capybara";
-hash = "dac69117b32bbf56d3345e01a04426811e3c576a3216f2eb8bfaf861f527a28b";
-url = "http://rubygems.org/downloads/capybara-2.3.0.gem";
-version = "2.3.0";
-}
-{
-name = "coderay";
-hash = "5a943c59e36f7ef9dd2677855735656413af02e3f302431e9c548aabe89f3c15";
-url = "http://rubygems.org/downloads/coderay-1.1.0.gem";
-version = "1.1.0";
-}
-{
-name = "columnize";
-hash = "37d6e33624f2e3542667425504d204843788ce52905b2529654ab57d11fe6ab8";
-url = "http://rubygems.org/downloads/columnize-0.8.9.gem";
-version = "0.8.9";
-}
-{
-name = "coveralls";
-hash = "449284ddd071e2297d06d0a9d18fe4c2b4027848263b1087d4180fb44e03e36b";
-url = "http://rubygems.org/downloads/coveralls-0.7.0.gem";
-version = "0.7.0";
-}
-{
-name = "crack";
-hash = "ea4c34f052106f571235f627f561d28309151c09b841130bb7627c2d522589c6";
-url = "http://rubygems.org/downloads/crack-0.4.2.gem";
-version = "0.4.2";
-}
-{
-name = "ctl_base_ui";
-hash = "adb8be85e5bc292af2ee0d5e8482f011d82cc4e65e8270fda1981957015d0d40";
-url = "http://rubygems.org/downloads/ctl_base_ui-0.0.4.gem";
-version = "0.0.4";
-}
-{
-name = "debug_inspector";
-hash = "1594188ffd35b9973fa1e048497e4aa63abad0c3cbba0670e17935005e302781";
-url = "http://rubygems.org/downloads/debug_inspector-0.0.2.gem";
-version = "0.0.2";
-}
-{
-name = "debugger-linecache";
-hash = "bf5d371a295727c131618e3cd223c6939c51c7bb28ff172477bb340752e89e47";
-url = "http://rubygems.org/downloads/debugger-linecache-1.2.0.gem";
-version = "1.2.0";
-}
-{
-name = "diff-lcs";
-hash = "a1d3dde665292317a883d319066792e3f0e6a24cade4bc4cc47605d27664c9ed";
-url = "http://rubygems.org/downloads/diff-lcs-1.2.5.gem";
-version = "1.2.5";
-}
-{
-name = "docile";
-hash = "5d3ee40b3a6567fe460601f3f4a3e199a98de37434ebfa242d751d0c79181255";
-url = "http://rubygems.org/downloads/docile-1.1.5.gem";
-version = "1.1.5";
-}
-{
-name = "dotenv";
-hash = "35e10cfb1b6ba008f5f1f45b15809c33c424b1fb1ab58d358847cf651af0e027";
-url = "http://rubygems.org/downloads/dotenv-0.11.1.gem";
-version = "0.11.1";
-}
-{
-name = "dotenv-deployment";
-hash = "0c7db97431f091e11b88f26fd08d3f1a0570128d5e73a465c0380195b034a6a9";
-url = "http://rubygems.org/downloads/dotenv-deployment-0.0.2.gem";
-version = "0.0.2";
-}
-{
-name = "dotenv-rails";
-hash = "1e67a7a949a3336184cf3235cf8d2dc66aca8ae2a7f7594f5c37d210818bd064";
-url = "http://rubygems.org/downloads/dotenv-rails-0.11.1.gem";
-version = "0.11.1";
-}
-{
-name = "erubis";
-hash = "63653f5174a7997f6f1d6f465fbe1494dcc4bdab1fb8e635f6216989fb1148ba";
-url = "http://rubygems.org/downloads/erubis-2.7.0.gem";
-version = "2.7.0";
-}
-{
-name = "execjs";
-hash = "0bc9e196416a59cf16690ebdcc09ecd3fd692919e93e8245210402cc717a81e8";
-url = "http://rubygems.org/downloads/execjs-2.2.1.gem";
-version = "2.2.1";
-}
-{
-name = "haml";
-hash = "05b1cde6e0d770e800cb74f6bf1212446bc4573bbbfecc4002e1085c2658bff6";
-url = "http://rubygems.org/downloads/haml-4.0.5.gem";
-version = "4.0.5";
-}
-{
-name = "hike";
-hash = "154e2f2593845e5bcd8ed2ba3092600c55c6ad8c630722857de3fdaf334ccc44";
-url = "http://rubygems.org/downloads/hike-1.2.3.gem";
-version = "1.2.3";
-}
-{
-name = "i18n";
-hash = "b37dda25b30484f2674a851e24ae098a38564a61c976fa91a34bf8fceaa3923b";
-url = "http://rubygems.org/downloads/i18n-0.6.11.gem";
-version = "0.6.11";
-}
-{
-name = "jquery-rails";
-hash = "7ee42bba07bb858c11d81da798c2bfa3641b5afad5d420445b55d0118b29aa40";
-url = "http://rubygems.org/downloads/jquery-rails-3.1.2.gem";
-version = "3.1.2";
-}
-{
-name = "jquery-ui-rails";
-hash = "5b349e7066150b16d7a784183f040c083d51af3357937b8564aa0cc8b1cd59bd";
-url = "http://rubygems.org/downloads/jquery-ui-rails-4.2.1.gem";
-version = "4.2.1";
-}
-{
-name = "json";
-hash = "961bfbbfa9fda1e857e9c791e964e6664e0d43bf687b19669dfbc7cdbc5e0200";
-url = "http://rubygems.org/downloads/json-1.8.1.gem";
-version = "1.8.1";
-}
-{
-name = "kramdown";
-hash = "00611597850c4c9a0d7e00d4d8cf8eb446b3b9aef8f2b4569b7bf1583df03b00";
-url = "http://rubygems.org/downloads/kramdown-1.4.0.gem";
-version = "1.4.0";
-}
-{
-name = "libv8";
-hash = "988948213e992417dffee3cebbcf565c59f1702d539ec202cbc2c117b8205c10";
-url = "http://rubygems.org/downloads/libv8-3.16.14.7-x86_64-linux.gem";
-version = "3.16.14.7";
-}
-{
-name = "mail";
-hash = "d7fee1ec4e4ea9bb38b77de5baf53c17004133efcdff030bd1de5e3620306fd9";
-url = "http://rubygems.org/downloads/mail-2.6.3.gem";
-version = "2.6.3";
-}
-{
-name = "method_source";
-hash = "c2e9d0f4ebefd6b37efe38fe2964337b1d315fe198cad850681fd2da0027b1bc";
-url = "http://rubygems.org/downloads/method_source-0.8.2.gem";
-version = "0.8.2";
-}
-{
-name = "mime-types";
-hash = "38f29a89a273d15bfb99e839c6fe5cf7c463f223dd7ac5ee3c9287b1acd6d19a";
-url = "http://rubygems.org/downloads/mime-types-2.4.3.gem";
-version = "2.4.3";
-}
-{
-name = "mini_portile";
-hash = "762b3e241362de24b2eb2bb1b98638399b931e9e51bece5f8e2df7611eb16c26";
-url = "http://rubygems.org/downloads/mini_portile-0.6.0.gem";
-version = "0.6.0";
-}
-{
-name = "minitest";
-hash = "a41b54b1c6e64b102fe78bf265045896845c38177a10bdb32d04caf4e06542f3";
-url = "http://rubygems.org/downloads/minitest-5.4.3.gem";
-version = "5.4.3";
-}
-{
-name = "multi_json";
-hash = "2c98979877e87df0b338ebf5c86091b390f53d62c11a8232bd51ca007e0b82d2";
-url = "http://rubygems.org/downloads/multi_json-1.10.1.gem";
-version = "1.10.1";
-}
-{
-name = "nokogiri";
-hash = "dfb23254b87672a93582981c4ac5880d178ff32db6878fc351d75198aa544836";
-url = "http://rubygems.org/downloads/nokogiri-1.6.2.1.gem";
-version = "1.6.2.1";
-}
-{
-name = "phantomjs";
-hash = "87666a234180c69186df0d4a009f5cbbb0de58972f2217ee827affc5bf075a91";
-url = "http://rubygems.org/downloads/phantomjs-1.9.7.1.gem";
-version = "1.9.7.1";
-}
-{
-name = "pry";
-hash = "1f4925cdc8d83db67ba9b7ff542f042558c0ceb5579966e0fabc6d0eaa2b19c8";
-url = "http://rubygems.org/downloads/pry-0.10.1.gem";
-version = "0.10.1";
-}
-{
-name = "pry-byebug";
-hash = "f8bfffb58c6a37d2ee8edf8896a778b441237df3c90cf9272f64a4c88038669d";
-url = "http://rubygems.org/downloads/pry-byebug-2.0.0.gem";
-version = "2.0.0";
-}
-{
-name = "pry-stack_explorer";
-hash = "bfa09ca06ee08121fa34fb4e1eca776c0cb7530a7e96600d9a36e5e6189648a0";
-url = "http://rubygems.org/downloads/pry-stack_explorer-0.4.9.1.gem";
-version = "0.4.9.1";
-}
-{
-name = "puma";
-hash = "13ac36ce9535ead0b6ebbd540b5fa99ea53126c0f697a5ce96aefb8d5c75a7d0";
-url = "http://rubygems.org/downloads/puma-2.8.2.gem";
-version = "2.8.2";
-}
-{
-name = "rack";
-hash = "e64af00234e8faaa69ea81ef4e3800f40743c69560f0dda8fc9969660e775fa7";
-url = "http://rubygems.org/downloads/rack-1.5.2.gem";
-version = "1.5.2";
-}
-{
-name = "rack-protection";
-hash = "b9c08cb17b13c6672ef642cc4855b4c4ba8fcb1f66abc687f03cddf37f106b33";
-url = "http://rubygems.org/downloads/rack-protection-1.5.3.gem";
-version = "1.5.3";
-}
-{
-name = "rack-test";
-hash = "7e920b6aac888e4a3846e5997fb1cbf456bdb5846322b58dc31697a54a38b306";
-url = "http://rubygems.org/downloads/rack-test-0.6.2.gem";
-version = "0.6.2";
-}
-{
-name = "rails";
-hash = "20972f5ce418d5b938afa42680bcbe8c52770c0664429233fa0e567a25bd3515";
-url = "http://rubygems.org/downloads/rails-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "rails-observers";
-hash = "9e71de73929a9a7e8cde83c041989bbb25914f84047ce15dde37eefa650a5cd3";
-url = "http://rubygems.org/downloads/rails-observers-0.1.2.gem";
-version = "0.1.2";
-}
-{
-name = "railties";
-hash = "dfa7ef2174675c88492c62596bfe6d8aa78f3735305aaa372d5801f9328008d8";
-url = "http://rubygems.org/downloads/railties-4.1.7.gem";
-version = "4.1.7";
-}
-{
-name = "rake";
-hash = "82cfce8fb9c53bc2d96acc88456056b1ed5aab162b85f9419b7c5f7edbff8690";
-url = "http://rubygems.org/downloads/rake-10.4.1.gem";
-version = "10.4.1";
-}
-{
-name = "ref";
-hash = "8a8ec8f40f1e622c4324055d85300e03d9a78a9faf476ea0d382f1af9dbe0fa7";
-url = "http://rubygems.org/downloads/ref-1.0.5.gem";
-version = "1.0.5";
-}
-{
-name = "rest-client";
-hash = "a3203433b8b0c914648caea54395a8791a61e0df7d401c81f4e2b7f8a8fac75a";
-url = "http://rubygems.org/downloads/rest-client-1.6.7.gem";
-version = "1.6.7";
-}
-{
-name = "rspec-core";
-hash = "8c43f4dbc105ca622e72693c8aed533386580c0fa082bcd280777cda66f1525f";
-url = "http://rubygems.org/downloads/rspec-core-2.14.8.gem";
-version = "2.14.8";
-}
-{
-name = "rspec-expectations";
-hash = "c961c9dff8127c1b4ddd24358e5c921f8f09805a92c42ff996e66c39119f28da";
-url = "http://rubygems.org/downloads/rspec-expectations-2.14.5.gem";
-version = "2.14.5";
-}
-{
-name = "rspec-mocks";
-hash = "60eca91c74afd5f978eacdd60f4d81ff669910b6c24f023daecc70d364ac9abb";
-url = "http://rubygems.org/downloads/rspec-mocks-2.14.6.gem";
-version = "2.14.6";
-}
-{
-name = "rspec-rails";
-hash = "a75c843e8ecfee79b0aeefd392e6f740bc1e48e174bcc292e753846b145c36c9";
-url = "http://rubygems.org/downloads/rspec-rails-2.14.2.gem";
-version = "2.14.2";
-}
-{
-name = "safe_yaml";
-hash = "94a36065cd702f8939f928106f63b0e9049d0cddcbf5163ccc430332fdf46b18";
-url = "http://rubygems.org/downloads/safe_yaml-1.0.3.gem";
-version = "1.0.3";
-}
-{
-name = "sass";
-hash = "bfce1f74e41f135d32a346dff35358424ddd7062d371f20f487120318edc294c";
-url = "http://rubygems.org/downloads/sass-3.3.9.gem";
-version = "3.3.9";
-}
-{
-name = "simplecov";
-hash = "ce9ffc797f9e4493bf97bbf5e88073ad7351d8234561b56ea3bd2baa68a71e1a";
-url = "http://rubygems.org/downloads/simplecov-0.9.1.gem";
-version = "0.9.1";
-}
-{
-name = "simplecov-html";
-hash = "69393ce932c2898dd5074913e360078f651f094a9b7300b286a78f43b11c164a";
-url = "http://rubygems.org/downloads/simplecov-html-0.8.0.gem";
-version = "0.8.0";
-}
-{
-name = "sinatra";
-hash = "3a8083318938048090021481581158ede01e47659d06d192f97a5bfaf950d663";
-url = "http://rubygems.org/downloads/sinatra-1.4.5.gem";
-version = "1.4.5";
-}
-{
-name = "slop";
-hash = "76ccab03be66bfcab4838cdc07cab019cd3e192a3538266246749e79e4788803";
-url = "http://rubygems.org/downloads/slop-3.6.0.gem";
-version = "3.6.0";
-}
-{
-name = "sprockets";
-hash = "c25a4a37c9436e5a2c877b926156bce1826a0156d9cd96ca704ab085726ec2ae";
-url = "http://rubygems.org/downloads/sprockets-2.12.3.gem";
-version = "2.12.3";
-}
-{
-name = "sprockets-rails";
-hash = "2ba0eddfb651d7b8a5aab1d03b25d9a61333509a589b48e1355fbe40dd264da4";
-url = "http://rubygems.org/downloads/sprockets-rails-2.2.2.gem";
-version = "2.2.2";
-}
-{
-name = "teaspoon";
-hash = "7f5c90796186877f0e3c10914f8aa8866d3696c0667d9e5aaab36c96eaca6bc8";
-url = "http://rubygems.org/downloads/teaspoon-0.8.0.gem";
-version = "0.8.0";
-}
-{
-name = "term-ansicolor";
-hash = "8b5caf6839a0c1bbf7a55a9d2fbd3c172f623fa05c427f9b3ea5d75bdfe14fa8";
-url = "http://rubygems.org/downloads/term-ansicolor-1.3.0.gem";
-version = "1.3.0";
-}
-{
-name = "therubyracer";
-hash = "26565ce91657acb5d0921584cace7ee82723452d747d66ee8154298f6bc4ce80";
-url = "http://rubygems.org/downloads/therubyracer-0.12.1.gem";
-version = "0.12.1";
-}
-{
-name = "thor";
-hash = "9ff834f031b5550c743bb8a3139317fefdae9cdebd02d60de376658f427fe522";
-url = "http://rubygems.org/downloads/thor-0.19.1.gem";
-version = "0.19.1";
-}
-{
-name = "thread_safe";
-hash = "16315baa971c48d00104bcd35e8934e3f9ccfd3b8f429e3fca7ee2dfd81734b2";
-url = "http://rubygems.org/downloads/thread_safe-0.3.4.gem";
-version = "0.3.4";
-}
-{
-name = "tilt";
-hash = "39820562c4f5db45fe18de87ccc30a0e77a998bf5334b1d8c10a2f7dbc1f5903";
-url = "http://rubygems.org/downloads/tilt-1.4.1.gem";
-version = "1.4.1";
-}
-{
-name = "tins";
-hash = "5964d11f3784651370b685ea2751f3f88c75f4def29a1b04b19f224e0161ad49";
-url = "http://rubygems.org/downloads/tins-1.1.0.gem";
-version = "1.1.0";
-}
-{
-name = "tzinfo";
-hash = "fdb1d3fdf2776d490c82a0e589a08e7cbde70ac1ae7d2b1f0b7e77f3e6b801b0";
-url = "http://rubygems.org/downloads/tzinfo-1.2.2.gem";
-version = "1.2.2";
-}
-{
-name = "uglifier";
-hash = "e0badf2761a79855e2c008e50d3e9253bc60738d64230da25069ff9ac0c030ee";
-url = "http://rubygems.org/downloads/uglifier-2.5.1.gem";
-version = "2.5.1";
-}
-{
-name = "webmock";
-hash = "0360485651dfe94675a36f546367e2bb075570ab879fdb311b4bd2763a5141e4";
-url = "http://rubygems.org/downloads/webmock-1.18.0.gem";
-version = "1.18.0";
-}
-{
-name = "xpath";
-hash = "9ca4a1cc88d9ab16c591468cce7b5d00ee06a8a76b841f8438970c7a44c86c12";
-url = "http://rubygems.org/downloads/xpath-2.0.0.gem";
-version = "2.0.0";
-}
-{
-name = "zeroclipboard-rails";
-hash = "cc31aa9aae0b3aec173c966c1c7cf398374cfe37cc80fbbdc6aa57a000553d02";
-url = "http://rubygems.org/downloads/zeroclipboard-rails-0.1.0.gem";
-version = "0.1.0";
-}
-]
diff --git a/pkgs/applications/networking/cluster/panamax/api.nix b/pkgs/applications/networking/cluster/panamax/api.nix
index 6345e7fd10bb..415392627ea3 100644
--- a/pkgs/applications/networking/cluster/panamax/api.nix
+++ b/pkgs/applications/networking/cluster/panamax/api.nix
@@ -1,5 +1,5 @@
-{ stdenv, buildEnv, fetchgit, fetchurl, makeWrapper
-, ruby, rubygemsFun, libxslt, libxml2, sqlite, openssl, cacert, docker
+{ stdenv, buildEnv, fetchgit, fetchurl, makeWrapper, bundlerEnv, bundler_HEAD
+, ruby, libxslt, libxml2, sqlite, openssl, cacert, docker
 , dataDir ? "/var/lib/panamax-api" }:
 
 with stdenv.lib;
@@ -11,29 +11,29 @@ let
       database: <%= ENV["PANAMAX_DATABASE_PATH"] || "${dataDir}/db/mnt/db.sqlite3" %>
       timeout: 5000
   '';
-
+  env = bundlerEnv {
+    name = "panamax-api-gems";
+    inherit ruby;
+    gemset = ./gemset-api.nix;
+    gemfile = ./Gemfile-api;
+    lockfile = ./Gemfile-api.lock;
+  };
+  bundler = bundler_HEAD.override { inherit ruby; };
 in stdenv.mkDerivation rec {
   name = "panamax-api-${version}";
   version = "0.2.11";
 
-  bundler = fetchurl {
-    url = "http://rubygems.org/downloads/bundler-1.7.9.gem";
-    sha256 = "1gd201rh17xykab9pbqp0dkxfm7b9jri02llyvmrc0c5bz2vhycm";
-  };
-
   src = fetchgit {
     rev = "refs/tags/v${version}";
     url = "git://github.com/CenturyLinkLabs/panamax-api";
     sha256 = "01sz7jibn1rqfga85pr4p8wk6jfldzfaxj1726vs6znmcwhfkcgj";
   };
 
-  gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile-api.nix);
-
-  buildInputs = [ makeWrapper sqlite openssl ruby (rubygemsFun ruby) ];
+  buildInputs = [ makeWrapper sqlite openssl env.ruby bundler ];
 
   setSourceRoot = ''
     mkdir -p $out/share
-    cp -R git-export $out/share/panamax-api
+    cp -R panamax-api $out/share/panamax-api
     export sourceRoot="$out/share/panamax-api"
   '';
 
@@ -43,20 +43,12 @@ in stdenv.mkDerivation rec {
 
   configurePhase = ''
     export HOME=$PWD
-    export GEM_HOME=$PWD
+    export GEM_HOME=${env}/${env.ruby.gemPath}
     export RAILS_ENV=production
 
-    mkdir -p vendor/cache
-    ${concatStrings (map (gem: "ln -s ${gem} vendor/cache/${gem.name};") gemspec)}
-    ln -s ${bundler} vendor/cache/${bundler.name}
     ln -sf ${database_yml} config/database.yml
   '';
 
-  buildPhase = ''
-    gem install --local vendor/cache/${bundler.name}
-    bin/bundle install -j4 --verbose --local --deployment --without development test
-  '';
-
   installPhase = ''
     rm -rf log tmp
     mv ./db ./_db
@@ -65,15 +57,12 @@ in stdenv.mkDerivation rec {
     mkdir -p $out/bin
     makeWrapper bin/bundle "$out/bin/bundle" \
       --run "cd $out/share/panamax-api" \
-      --prefix "PATH" : "$out/share/panamax-api/bin:${ruby}/bin:$PATH" \
+      --prefix "PATH" : "$out/share/panamax-api/bin:${env.ruby}/bin:$PATH" \
       --prefix "HOME" : "$out/share/panamax-api" \
-      --prefix "GEM_HOME" : "$out/share/panamax-api" \
+      --prefix "GEM_HOME" : "${env}/${env.ruby.gemPath}" \
       --prefix "OPENSSL_X509_CERT_FILE" : "${cacert}/etc/ca-bundle.crt" \
-      --prefix "SSL_CERT_FILE" : "${cacert}/etc/ca-bundle.crt"
-  '';
-
-  postFixup = ''
-    rm -r vendor/cache/*
+      --prefix "SSL_CERT_FILE" : "${cacert}/etc/ca-bundle.crt" \
+      --prefix "GEM_PATH" : "$out/share/panamax-api:${bundler}/${env.ruby.gemPath}"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/networking/cluster/panamax/gemset-api.nix b/pkgs/applications/networking/cluster/panamax/gemset-api.nix
new file mode 100644
index 000000000000..62cf5dcd3afd
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/gemset-api.nix
@@ -0,0 +1,571 @@
+let
+  pkgs = import <nixpkgs> { };
+in {
+  "actionmailer" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0qjv5akjbpgd4cx518k522mssvc3y3nki65hi6fj5nbzi7a6rwq5";
+    };
+    dependencies = [
+      "actionpack"
+      "actionview"
+      "mail"
+    ];
+  };
+  "actionpack" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "07y1ny00h69xklq260smyl5md052f617gqrzkyw5sxafs5z25zax";
+    };
+    dependencies = [
+      "actionview"
+      "activesupport"
+      "rack"
+      "rack-test"
+    ];
+  };
+  "actionview" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "06sp37gfpn2jn7j6vlpp1y6vfi5kig60vyvixrjhyz0g4vgm13ax";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+      "erubis"
+    ];
+  };
+  "active_model_serializers" = {
+    version = "0.9.0";
+    source = {
+      type = "gem";
+      sha256 = "1ws3gx3wwlm17w7k0agwzmcmww6627lvqaqm828lzm3g1xqilkkl";
+    };
+    dependencies = [
+      "activemodel"
+    ];
+  };
+  "activemodel" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0rlqzz25l7vsphgkilg80kmk20d9h357awi27ax6zzb9klkqh0jr";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+    ];
+  };
+  "activerecord" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0j4r0m32mjbwmz9gs8brln35jzr1cn7h585ggj0w0f1ai4hjsby5";
+    };
+    dependencies = [
+      "activemodel"
+      "activesupport"
+      "arel"
+    ];
+  };
+  "activesupport" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "13i3mz66d5kp5y39gjwmcfqv0wb6mxm5k1nnz40wvd38dsf7n3bs";
+    };
+    dependencies = [
+      "i18n"
+      "json"
+      "minitest"
+      "thread_safe"
+      "tzinfo"
+    ];
+  };
+  "addressable" = {
+    version = "2.3.6";
+    source = {
+      type = "gem";
+      sha256 = "137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8";
+    };
+  };
+  "archive-tar-minitar" = {
+    version = "0.5.2";
+    source = {
+      type = "gem";
+      sha256 = "1j666713r3cc3wb0042x0wcmq2v11vwwy5pcaayy5f0lnd26iqig";
+    };
+  };
+  "arel" = {
+    version = "5.0.1.20140414130214";
+    source = {
+      type = "gem";
+      sha256 = "0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9";
+    };
+  };
+  "builder" = {
+    version = "3.2.2";
+    source = {
+      type = "gem";
+      sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
+    };
+  };
+  "coveralls" = {
+    version = "0.7.0";
+    source = {
+      type = "gem";
+      sha256 = "0sz30d7b83qqsj3i0fr691w05d62wj7x3afh0ryjkqkis3fq94j4";
+    };
+    dependencies = [
+      "multi_json"
+      "rest-client"
+      "simplecov"
+      "term-ansicolor"
+      "thor"
+    ];
+  };
+  "crack" = {
+    version = "0.4.2";
+    source = {
+      type = "gem";
+      sha256 = "1il94m92sz32nw5i6hdq14f1a2c3s9hza9zn6l95fvqhabq38k7a";
+    };
+    dependencies = [
+      "safe_yaml"
+    ];
+  };
+  "database_cleaner" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "19w25yda684pg29bggq26wy4lpyjvzscwg2hx3hmmmpysiwfnxgn";
+    };
+  };
+  "diff-lcs" = {
+    version = "1.2.5";
+    source = {
+      type = "gem";
+      sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
+    };
+  };
+  "docile" = {
+    version = "1.1.5";
+    source = {
+      type = "gem";
+      sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
+    };
+  };
+  "docker-api" = {
+    version = "1.13.0";
+    source = {
+      type = "gem";
+      sha256 = "1rara27gn7lxaf12dqkx8s1clssg10jndfcy4wz2fv6ms1i1lnp6";
+    };
+    dependencies = [
+      "archive-tar-minitar"
+      "excon"
+      "json"
+    ];
+  };
+  "erubis" = {
+    version = "2.7.0";
+    source = {
+      type = "gem";
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+    };
+  };
+  "excon" = {
+    version = "0.37.0";
+    source = {
+      type = "gem";
+      sha256 = "05x7asmsq5m419n1lhzk9bic02gwng4cqmrcqsfnd6kmkwm8csv2";
+    };
+  };
+  "faraday" = {
+    version = "0.8.9";
+    source = {
+      type = "gem";
+      sha256 = "17d79fsgx0xwh0mfxyz5pbr435qlw79phlfvifc546w2axdkp718";
+    };
+    dependencies = [
+      "multipart-post"
+    ];
+  };
+  "faraday_middleware" = {
+    version = "0.9.0";
+    source = {
+      type = "gem";
+      sha256 = "1kwvi2sdxd6j764a7q5iir73dw2v6816zx3l8cgfv0wr2m47icq2";
+    };
+    dependencies = [
+      "faraday"
+    ];
+  };
+  "fleet-api" = {
+    version = "0.6.0";
+    source = {
+      type = "gem";
+      sha256 = "0136mzc0fxp6mzh38n6xbg87cw9g9vq1nrlr3ylazbflvmlxgan6";
+    };
+    dependencies = [
+      "faraday"
+      "faraday_middleware"
+    ];
+  };
+  "hike" = {
+    version = "1.2.3";
+    source = {
+      type = "gem";
+      sha256 = "0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm";
+    };
+  };
+  "i18n" = {
+    version = "0.6.11";
+    source = {
+      type = "gem";
+      sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk";
+    };
+  };
+  "its" = {
+    version = "0.2.0";
+    source = {
+      type = "gem";
+      sha256 = "0rxwds9ipqp48mzqcaxzmfcqhawazg0zlhc1avv3i2cmm3np1z8g";
+    };
+    dependencies = [
+      "rspec-core"
+    ];
+  };
+  "json" = {
+    version = "1.8.1";
+    source = {
+      type = "gem";
+      sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn";
+    };
+  };
+  "kmts" = {
+    version = "2.0.1";
+    source = {
+      type = "gem";
+      sha256 = "1wk680q443lg35a25am6i8xawf16iqg5xnq1m8xd2gib4dsy1d8v";
+    };
+  };
+  "mail" = {
+    version = "2.6.3";
+    source = {
+      type = "gem";
+      sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "mime-types" = {
+    version = "2.4.3";
+    source = {
+      type = "gem";
+      sha256 = "16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq";
+    };
+  };
+  "minitest" = {
+    version = "5.4.3";
+    source = {
+      type = "gem";
+      sha256 = "1ws2cphg9jh45nrvs43s2ww5r14nb026bwlbwwpi0jz6qsqm86x4";
+    };
+  };
+  "multi_json" = {
+    version = "1.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
+    };
+  };
+  "multipart-post" = {
+    version = "1.2.0";
+    source = {
+      type = "gem";
+      sha256 = "12p7lnmc52di1r4h73h6xrpppplzyyhani9p7wm8l4kgf1hnmwnc";
+    };
+  };
+  "octokit" = {
+    version = "3.2.0";
+    source = {
+      type = "gem";
+      sha256 = "07ll3x1hv72zssb4hkdw56xg3xk6x4fch4yf38zljvbh388r11ng";
+    };
+    dependencies = [
+      "sawyer"
+    ];
+  };
+  "puma" = {
+    version = "2.8.2";
+    source = {
+      type = "gem";
+      sha256 = "1l57fmf8vyxfjv7ab5znq0k339cym5ghnm5xxfvd1simjp73db0k";
+    };
+    dependencies = [
+      "rack"
+    ];
+    buildInputs = [ pkgs.openssl ];
+  };
+  "rack" = {
+    version = "1.5.2";
+    source = {
+      type = "gem";
+      sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6";
+    };
+  };
+  "rack-test" = {
+    version = "0.6.2";
+    source = {
+      type = "gem";
+      sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
+    };
+    dependencies = [
+      "rack"
+    ];
+  };
+  "rails" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "059mpljplmhfz8rr4hk40q67fllcpsy809m4mwwbkm8qwif2z5r0";
+    };
+    dependencies = [
+      "actionmailer"
+      "actionpack"
+      "actionview"
+      "activemodel"
+      "activerecord"
+      "activesupport"
+      "railties"
+      "sprockets-rails"
+    ];
+  };
+  "railties" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "1n08h0rgj0aq5lvslnih6lvqz9wadpz6nnb25i4qhp37fhhyz9yz";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "rake"
+      "thor"
+    ];
+  };
+  "rake" = {
+    version = "10.4.0";
+    source = {
+      type = "gem";
+      sha256 = "0a10xzqc1lh6gjkajkslr0n40wjrniyiyzxkp9m5fc8wf7b74zw8";
+    };
+  };
+  "rest-client" = {
+    version = "1.6.7";
+    source = {
+      type = "gem";
+      sha256 = "0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "rspec-core" = {
+    version = "3.1.7";
+    source = {
+      type = "gem";
+      sha256 = "01bawvln663gffljwzpq3mrpa061cghjbvfbq15jvhmip3csxqc9";
+    };
+    dependencies = [
+      "rspec-support"
+    ];
+  };
+  "rspec-expectations" = {
+    version = "3.1.2";
+    source = {
+      type = "gem";
+      sha256 = "0m8d36wng1lpbcs54zhg1rxh63rgj345k3p0h0c06lgknz339nzh";
+    };
+    dependencies = [
+      "diff-lcs"
+      "rspec-support"
+    ];
+  };
+  "rspec-mocks" = {
+    version = "3.1.3";
+    source = {
+      type = "gem";
+      sha256 = "0gxk5w3klia4zsnp0svxck43xxwwfdqvhr3srv6p30f3m5q6rmzr";
+    };
+    dependencies = [
+      "rspec-support"
+    ];
+  };
+  "rspec-rails" = {
+    version = "3.1.0";
+    source = {
+      type = "gem";
+      sha256 = "1b1in3n1dc1bpf9wb3p3b2ynq05iacmr48jxzc73lj4g44ksh3wq";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "railties"
+      "rspec-core"
+      "rspec-expectations"
+      "rspec-mocks"
+      "rspec-support"
+    ];
+  };
+  "rspec-support" = {
+    version = "3.1.2";
+    source = {
+      type = "gem";
+      sha256 = "14y6v9r9lrh91ry9r79h85v0f3y9ja25w42nv5z9n0bipfcwhprb";
+    };
+  };
+  "safe_yaml" = {
+    version = "1.0.4";
+    source = {
+      type = "gem";
+      sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
+    };
+  };
+  "sawyer" = {
+    version = "0.5.4";
+    source = {
+      type = "gem";
+      sha256 = "01kl4zpf0gaacnkra5nikrzfpwj8f10hsvgyzm7z2s1mz4iipx2v";
+    };
+    dependencies = [
+      "addressable"
+      "faraday"
+    ];
+  };
+  "shoulda-matchers" = {
+    version = "2.6.1";
+    source = {
+      type = "gem";
+      sha256 = "1p3jhvd4dsj6d7nbmvnqhqhpmb8pnr05pi7jv9ajwqcys8140mc1";
+    };
+    dependencies = [
+      "activesupport"
+    ];
+  };
+  "simplecov" = {
+    version = "0.9.1";
+    source = {
+      type = "gem";
+      sha256 = "06hylxlalaxxldpbaqa54gc52wxdff0fixdvjyzr6i4ygxwzr7yf";
+    };
+    dependencies = [
+      "docile"
+      "multi_json"
+      "simplecov-html"
+    ];
+  };
+  "simplecov-html" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "0jhn3jql73x7hsr00wwv984iyrcg0xhf64s90zaqv2f26blkqfb9";
+    };
+  };
+  "sprockets" = {
+    version = "2.12.3";
+    source = {
+      type = "gem";
+      sha256 = "1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2";
+    };
+    dependencies = [
+      "hike"
+      "multi_json"
+      "rack"
+      "tilt"
+    ];
+  };
+  "sprockets-rails" = {
+    version = "2.2.0";
+    source = {
+      type = "gem";
+      sha256 = "042fxqskvaa0wn9kpy02nv6p7sa355py9pi58zw96l30170sd3hl";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "sprockets"
+    ];
+  };
+  "sqlite3" = {
+    version = "1.3.9";
+    source = {
+      type = "gem";
+      sha256 = "07m6a6flmyyi0rkg0j7x1a9861zngwjnximfh95cli2zzd57914r";
+    };
+  };
+  "term-ansicolor" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b";
+    };
+    dependencies = [
+      "tins"
+    ];
+  };
+  "thor" = {
+    version = "0.19.1";
+    source = {
+      type = "gem";
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+    };
+  };
+  "thread_safe" = {
+    version = "0.3.4";
+    source = {
+      type = "gem";
+      sha256 = "1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n";
+    };
+  };
+  "tilt" = {
+    version = "1.4.1";
+    source = {
+      type = "gem";
+      sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir";
+    };
+  };
+  "tins" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "1yxa5kyp9mw4w866wlg7c32ingzqxnzh3ir9yf06pwpkmq3mrbdi";
+    };
+  };
+  "tzinfo" = {
+    version = "1.2.2";
+    source = {
+      type = "gem";
+      sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
+    };
+    dependencies = [
+      "thread_safe"
+    ];
+  };
+  "webmock" = {
+    version = "1.20.0";
+    source = {
+      type = "gem";
+      sha256 = "0bl5v0xzcj24lx7xpsnywv3liqnqb5lfxysmmfb2fgi0n8586i6m";
+    };
+    dependencies = [
+      "addressable"
+      "crack"
+    ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/panamax/gemset-ui.nix b/pkgs/applications/networking/cluster/panamax/gemset-ui.nix
new file mode 100644
index 000000000000..3793a2502158
--- /dev/null
+++ b/pkgs/applications/networking/cluster/panamax/gemset-ui.nix
@@ -0,0 +1,760 @@
+let
+  pkgs = import <nixpkgs> { };
+in {
+  "actionmailer" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0qjv5akjbpgd4cx518k522mssvc3y3nki65hi6fj5nbzi7a6rwq5";
+    };
+    dependencies = [
+      "actionpack"
+      "actionview"
+      "mail"
+    ];
+  };
+  "actionpack" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "07y1ny00h69xklq260smyl5md052f617gqrzkyw5sxafs5z25zax";
+    };
+    dependencies = [
+      "actionview"
+      "activesupport"
+      "rack"
+      "rack-test"
+    ];
+  };
+  "actionview" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "06sp37gfpn2jn7j6vlpp1y6vfi5kig60vyvixrjhyz0g4vgm13ax";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+      "erubis"
+    ];
+  };
+  "activemodel" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0rlqzz25l7vsphgkilg80kmk20d9h357awi27ax6zzb9klkqh0jr";
+    };
+    dependencies = [
+      "activesupport"
+      "builder"
+    ];
+  };
+  "activerecord" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "0j4r0m32mjbwmz9gs8brln35jzr1cn7h585ggj0w0f1ai4hjsby5";
+    };
+    dependencies = [
+      "activemodel"
+      "activesupport"
+      "arel"
+    ];
+  };
+  "activeresource" = {
+    version = "4.0.0";
+    source = {
+      type = "gem";
+      sha256 = "0fc5igjijyjzsl9q5kybkdzhc92zv8wsv0ifb0y90i632jx6d4jq";
+    };
+    dependencies = [
+      "activemodel"
+      "activesupport"
+      "rails-observers"
+    ];
+  };
+  "activesupport" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "13i3mz66d5kp5y39gjwmcfqv0wb6mxm5k1nnz40wvd38dsf7n3bs";
+    };
+    dependencies = [
+      "i18n"
+      "json"
+      "minitest"
+      "thread_safe"
+      "tzinfo"
+    ];
+  };
+  "addressable" = {
+    version = "2.3.6";
+    source = {
+      type = "gem";
+      sha256 = "137fj0whmn1kvaq8wjalp8x4qbblwzvg3g4bfx8d8lfi6f0w48p8";
+    };
+  };
+  "arel" = {
+    version = "5.0.1.20140414130214";
+    source = {
+      type = "gem";
+      sha256 = "0dhnc20h1v8ml3nmkxq92rr7qxxpk6ixhwvwhgl2dbw9mmxz0hf9";
+    };
+  };
+  "binding_of_caller" = {
+    version = "0.7.2";
+    source = {
+      type = "gem";
+      sha256 = "15jg6dkaq2nzcd602d7ppqbdxw3aji961942w93crs6qw4n6h9yk";
+    };
+    dependencies = [
+      "debug_inspector"
+    ];
+  };
+  "builder" = {
+    version = "3.2.2";
+    source = {
+      type = "gem";
+      sha256 = "14fii7ab8qszrvsvhz6z2z3i4dw0h41a62fjr2h1j8m41vbrmyv2";
+    };
+  };
+  "byebug" = {
+    version = "3.5.1";
+    source = {
+      type = "gem";
+      sha256 = "0ldc2r0b316rrn2fgdgiznskj9gb0q9n60243laq7nqw9na8wdan";
+    };
+    dependencies = [
+      "columnize"
+      "debugger-linecache"
+      "slop"
+    ];
+  };
+  "capybara" = {
+    version = "2.3.0";
+    source = {
+      type = "gem";
+      sha256 = "12x24zsn3y7sigmz45ijd9bkq7l14r2a00ay6k9mdgrbncbr3ins";
+    };
+    dependencies = [
+      "mime-types"
+      "nokogiri"
+      "rack"
+      "rack-test"
+      "xpath"
+    ];
+  };
+  "coderay" = {
+    version = "1.1.0";
+    source = {
+      type = "gem";
+      sha256 = "059wkzlap2jlkhg460pkwc1ay4v4clsmg1bp4vfzjzkgwdckr52s";
+    };
+  };
+  "columnize" = {
+    version = "0.8.9";
+    source = {
+      type = "gem";
+      sha256 = "1f3azq8pvdaaclljanwhab78hdw40k908ma2cwk59qzj4hvf7mip";
+    };
+  };
+  "coveralls" = {
+    version = "0.7.0";
+    source = {
+      type = "gem";
+      sha256 = "0sz30d7b83qqsj3i0fr691w05d62wj7x3afh0ryjkqkis3fq94j4";
+    };
+    dependencies = [
+      "multi_json"
+      "rest-client"
+      "simplecov"
+      "term-ansicolor"
+      "thor"
+    ];
+  };
+  "crack" = {
+    version = "0.4.2";
+    source = {
+      type = "gem";
+      sha256 = "1il94m92sz32nw5i6hdq14f1a2c3s9hza9zn6l95fvqhabq38k7a";
+    };
+    dependencies = [
+      "safe_yaml"
+    ];
+  };
+  "ctl_base_ui" = {
+    version = "0.0.4";
+    source = {
+      type = "gem";
+      sha256 = "0h0dbl0mf6cql7yp10jywv22rn0iy2188phdxvr2ladwwn2vxf5d";
+    };
+    dependencies = [
+      "haml"
+      "jquery-rails"
+      "jquery-ui-rails"
+      "rails"
+      "sass"
+    ];
+  };
+  "debug_inspector" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "109761g00dbrw5q0dfnbqg8blfm699z4jj70l4zrgf9mzn7ii50m";
+    };
+  };
+  "debugger-linecache" = {
+    version = "1.2.0";
+    source = {
+      type = "gem";
+      sha256 = "0iwyx190fd5vfwj1gzr8pg3m374kqqix4g4fc4qw29sp54d3fpdz";
+    };
+  };
+  "diff-lcs" = {
+    version = "1.2.5";
+    source = {
+      type = "gem";
+      sha256 = "1vf9civd41bnqi6brr5d9jifdw73j9khc6fkhfl1f8r9cpkdvlx1";
+    };
+  };
+  "docile" = {
+    version = "1.1.5";
+    source = {
+      type = "gem";
+      sha256 = "0m8j31whq7bm5ljgmsrlfkiqvacrw6iz9wq10r3gwrv5785y8gjx";
+    };
+  };
+  "dotenv" = {
+    version = "0.11.1";
+    source = {
+      type = "gem";
+      sha256 = "09z0y0d6bks7i0sqvd8szfqj9i1kkj01anzly7shi83b3gxhrq9m";
+    };
+    dependencies = [
+      "dotenv-deployment"
+    ];
+  };
+  "dotenv-deployment" = {
+    version = "0.0.2";
+    source = {
+      type = "gem";
+      sha256 = "1ad66jq9a09qq1js8wsyil97018s7y6x0vzji0dy34gh65sbjz8c";
+    };
+  };
+  "dotenv-rails" = {
+    version = "0.11.1";
+    source = {
+      type = "gem";
+      sha256 = "0r6hif0i1lipbi7mkxx7wa5clsn65n6wyd9jry262cx396lsfrqy";
+    };
+    dependencies = [
+      "dotenv"
+    ];
+  };
+  "erubis" = {
+    version = "2.7.0";
+    source = {
+      type = "gem";
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+    };
+  };
+  "execjs" = {
+    version = "2.2.1";
+    source = {
+      type = "gem";
+      sha256 = "1s41g9qwq0h4452q4gp934lnkzfkxh4wrg8fd4bcynba86bf3j8b";
+    };
+  };
+  "haml" = {
+    version = "4.0.5";
+    source = {
+      type = "gem";
+      sha256 = "1xmzb0k5q271090crzmv7dbw8ss4289bzxklrc0fhw6pw3kcvc85";
+    };
+    dependencies = [
+      "tilt"
+    ];
+  };
+  "hike" = {
+    version = "1.2.3";
+    source = {
+      type = "gem";
+      sha256 = "0i6c9hrszzg3gn2j41v3ijnwcm8cc2931fnjiv6mnpl4jcjjykhm";
+    };
+  };
+  "i18n" = {
+    version = "0.6.11";
+    source = {
+      type = "gem";
+      sha256 = "0fwjlgmgry2blf8zlxn9c555cf4a16p287l599kz5104ncjxlzdk";
+    };
+  };
+  "jquery-rails" = {
+    version = "3.1.2";
+    source = {
+      type = "gem";
+      sha256 = "0h5a565i3l2mbd221m6mz9d1nr53pz19i9qxv08qr1dv0yx2pr3y";
+    };
+    dependencies = [
+      "railties"
+      "thor"
+    ];
+  };
+  "jquery-ui-rails" = {
+    version = "4.2.1";
+    source = {
+      type = "gem";
+      sha256 = "1garrnqwh35acj2pp4sp6fpm2g881h23y644lzbic2qmcrq9wd2v";
+    };
+    dependencies = [
+      "railties"
+    ];
+  };
+  "json" = {
+    version = "1.8.1";
+    source = {
+      type = "gem";
+      sha256 = "0002bsycvizvkmk1jyv8px1hskk6wrjfk4f7x5byi8gxm6zzn6wn";
+    };
+  };
+  "kramdown" = {
+    version = "1.4.0";
+    source = {
+      type = "gem";
+      sha256 = "001vy0ymiwbvkdbb9wpqmswv6imliv7xim00gq6rlk0chnbiaq80";
+    };
+  };
+  "libv8" = {
+    version = "3.16.14.7";
+    source = {
+      type = "gem";
+      sha256 = "0dv5q5n5nf6b8h3fybwmsr3vkj70w4g1jpf6661j3hsv9vp0g4qq";
+    };
+  };
+  "mail" = {
+    version = "2.6.3";
+    source = {
+      type = "gem";
+      sha256 = "1nbg60h3cpnys45h7zydxwrl200p7ksvmrbxnwwbpaaf9vnf3znp";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "method_source" = {
+    version = "0.8.2";
+    source = {
+      type = "gem";
+      sha256 = "1g5i4w0dmlhzd18dijlqw5gk27bv6dj2kziqzrzb7mpgxgsd1sf2";
+    };
+  };
+  "mime-types" = {
+    version = "2.4.3";
+    source = {
+      type = "gem";
+      sha256 = "16nissnb31wj7kpcaynx4gr67i7pbkzccfg8k7xmplbkla4rmwiq";
+    };
+  };
+  "mini_portile" = {
+    version = "0.6.0";
+    source = {
+      type = "gem";
+      sha256 = "09kcn4g63xrdirgwxgjikqg976rr723bkc9bxfr29pk22cj3wavn";
+    };
+  };
+  "minitest" = {
+    version = "5.4.3";
+    source = {
+      type = "gem";
+      sha256 = "1ws2cphg9jh45nrvs43s2ww5r14nb026bwlbwwpi0jz6qsqm86x4";
+    };
+  };
+  "multi_json" = {
+    version = "1.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1ll21dz01jjiplr846n1c8yzb45kj5hcixgb72rz0zg8fyc9g61c";
+    };
+  };
+  "nokogiri" = {
+    version = "1.6.2.1";
+    source = {
+      type = "gem";
+      sha256 = "0dj8ajm9hlfpa71qz1xn5prqy5qdi32ll74qh8ssjwknp1a35cnz";
+    };
+    dependencies = [
+      "mini_portile"
+    ];
+  };
+  "phantomjs" = {
+    version = "1.9.7.1";
+    source = {
+      type = "gem";
+      sha256 = "14as0yzwbzvshbp1f8igjxcdxc5vbjgh0jhdvy393il084inlrl7";
+    };
+  };
+  "pry" = {
+    version = "0.10.1";
+    source = {
+      type = "gem";
+      sha256 = "1j0r5fm0wvdwzbh6d6apnp7c0n150hpm9zxpm5xvcgfqr36jaj8z";
+    };
+    dependencies = [
+      "coderay"
+      "method_source"
+      "slop"
+    ];
+  };
+  "pry-byebug" = {
+    version = "2.0.0";
+    source = {
+      type = "gem";
+      sha256 = "17b6720ci9345wkzj369ydyj6hdlg2krd26zivpd4dvaijszzgzq";
+    };
+    dependencies = [
+      "byebug"
+      "pry"
+    ];
+  };
+  "pry-stack_explorer" = {
+    version = "0.4.9.1";
+    source = {
+      type = "gem";
+      sha256 = "1828jqcfdr9nk86n15ky199vf33cfz51wkpv6kx230g0dsh9r85z";
+    };
+    dependencies = [
+      "binding_of_caller"
+      "pry"
+    ];
+  };
+  "puma" = {
+    version = "2.8.2";
+    source = {
+      type = "gem";
+      sha256 = "1l57fmf8vyxfjv7ab5znq0k339cym5ghnm5xxfvd1simjp73db0k";
+    };
+    dependencies = [
+      "rack"
+    ];
+    buildInputs = [ pkgs.openssl ];
+  };
+  "rack" = {
+    version = "1.5.2";
+    source = {
+      type = "gem";
+      sha256 = "19szfw76cscrzjldvw30jp3461zl00w4xvw1x9lsmyp86h1g0jp6";
+    };
+  };
+  "rack-protection" = {
+    version = "1.5.3";
+    source = {
+      type = "gem";
+      sha256 = "0cvb21zz7p9wy23wdav63z5qzfn4nialik22yqp6gihkgfqqrh5r";
+    };
+    dependencies = [
+      "rack"
+    ];
+  };
+  "rack-test" = {
+    version = "0.6.2";
+    source = {
+      type = "gem";
+      sha256 = "01mk715ab5qnqf6va8k3hjsvsmplrfqpz6g58qw4m3l8mim0p4ky";
+    };
+    dependencies = [
+      "rack"
+    ];
+  };
+  "rails" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "059mpljplmhfz8rr4hk40q67fllcpsy809m4mwwbkm8qwif2z5r0";
+    };
+    dependencies = [
+      "actionmailer"
+      "actionpack"
+      "actionview"
+      "activemodel"
+      "activerecord"
+      "activesupport"
+      "railties"
+      "sprockets-rails"
+    ];
+  };
+  "rails-observers" = {
+    version = "0.1.2";
+    source = {
+      type = "gem";
+      sha256 = "1lsw19jzmvipvrfy2z04hi7r29dvkfc43h43vs67x6lsj9rxwwcy";
+    };
+    dependencies = [
+      "activemodel"
+    ];
+  };
+  "railties" = {
+    version = "4.1.7";
+    source = {
+      type = "gem";
+      sha256 = "1n08h0rgj0aq5lvslnih6lvqz9wadpz6nnb25i4qhp37fhhyz9yz";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "rake"
+      "thor"
+    ];
+  };
+  "rake" = {
+    version = "10.4.1";
+    source = {
+      type = "gem";
+      sha256 = "1446zzdpwpvwkd0zk19b2smmmvdiarh4b26cdbcw4fy5p67wxkw2";
+    };
+  };
+  "ref" = {
+    version = "1.0.5";
+    source = {
+      type = "gem";
+      sha256 = "19qgpsfszwc2sfh6wixgky5agn831qq8ap854i1jqqhy1zsci3la";
+    };
+  };
+  "rest-client" = {
+    version = "1.6.7";
+    source = {
+      type = "gem";
+      sha256 = "0nn7zalgidz2yj0iqh3xvzh626krm2al79dfiij19jdhp0rk8853";
+    };
+    dependencies = [
+      "mime-types"
+    ];
+  };
+  "rspec-core" = {
+    version = "2.14.8";
+    source = {
+      type = "gem";
+      sha256 = "0psjy5kdlz3ph39br0m01w65i1ikagnqlg39f8p65jh5q7dz8hwc";
+    };
+  };
+  "rspec-expectations" = {
+    version = "2.14.5";
+    source = {
+      type = "gem";
+      sha256 = "1ni8kw8kjv76jvwjzi4jba00k3qzj9f8wd94vm6inz0jz3gwjqf9";
+    };
+    dependencies = [
+      "diff-lcs"
+    ];
+  };
+  "rspec-mocks" = {
+    version = "2.14.6";
+    source = {
+      type = "gem";
+      sha256 = "1fwsmijd6w6cmqyh4ky2nq89jrpzh56hzmndx9wgkmdgfhfakv30";
+    };
+  };
+  "rspec-rails" = {
+    version = "2.14.2";
+    source = {
+      type = "gem";
+      sha256 = "1j9nbha6p12kwy9c5g3lw541xg20yzk95lzgmsq7kvngiqz88p57";
+    };
+    dependencies = [
+      "actionpack"
+      "activemodel"
+      "activesupport"
+      "railties"
+      "rspec-core"
+      "rspec-expectations"
+      "rspec-mocks"
+    ];
+  };
+  "safe_yaml" = {
+    version = "1.0.3";
+    source = {
+      type = "gem";
+      sha256 = "063bykyk40s3rhy1dxfbvl69s179n1iny418z4wqjbvhrmjn18wl";
+    };
+  };
+  "sass" = {
+    version = "3.3.9";
+    source = {
+      type = "gem";
+      sha256 = "0k19vj73283i907z4wfkc9qdska2b19z7ps6lcr5s4qzwis1zkmz";
+    };
+  };
+  "simplecov" = {
+    version = "0.9.1";
+    source = {
+      type = "gem";
+      sha256 = "06hylxlalaxxldpbaqa54gc52wxdff0fixdvjyzr6i4ygxwzr7yf";
+    };
+    dependencies = [
+      "docile"
+      "multi_json"
+      "simplecov-html"
+    ];
+  };
+  "simplecov-html" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "0jhn3jql73x7hsr00wwv984iyrcg0xhf64s90zaqv2f26blkqfb9";
+    };
+  };
+  "sinatra" = {
+    version = "1.4.5";
+    source = {
+      type = "gem";
+      sha256 = "0qyna3wzlnvsz69d21lxcm3ixq7db08mi08l0a88011qi4qq701s";
+    };
+    dependencies = [
+      "rack"
+      "rack-protection"
+      "tilt"
+    ];
+  };
+  "slop" = {
+    version = "3.6.0";
+    source = {
+      type = "gem";
+      sha256 = "00w8g3j7k7kl8ri2cf1m58ckxk8rn350gp4chfscmgv6pq1spk3n";
+    };
+  };
+  "sprockets" = {
+    version = "2.12.3";
+    source = {
+      type = "gem";
+      sha256 = "1bn2drr8bc2af359dkfraq0nm0p1pib634kvhwn5lvj3r4vllnn2";
+    };
+    dependencies = [
+      "hike"
+      "multi_json"
+      "rack"
+      "tilt"
+    ];
+  };
+  "sprockets-rails" = {
+    version = "2.2.2";
+    source = {
+      type = "gem";
+      sha256 = "192d4vfl1gjz6phli6sqk98364x6v4jkpl5imajvimsinvgyv81b";
+    };
+    dependencies = [
+      "actionpack"
+      "activesupport"
+      "sprockets"
+    ];
+  };
+  "teaspoon" = {
+    version = "0.8.0";
+    source = {
+      type = "gem";
+      sha256 = "1j3brbm9cv5km9d9wzb6q2b3cvc6m254z48h7h77z1w6c5wr0p3z";
+    };
+    dependencies = [
+      "railties"
+    ];
+  };
+  "term-ansicolor" = {
+    version = "1.3.0";
+    source = {
+      type = "gem";
+      sha256 = "1a2gw7gmpmx57sdpyhjwl0zn4bqp7jyjz7aslpvvphd075layp4b";
+    };
+    dependencies = [
+      "tins"
+    ];
+  };
+  "therubyracer" = {
+    version = "0.12.1";
+    source = {
+      type = "gem";
+      sha256 = "106fqimqyaalh7p6czbl5m2j69z8gv7cm10mjb8bbb2p2vlmqmi6";
+    };
+    dependencies = [
+      "libv8"
+      "ref"
+    ];
+  };
+  "thor" = {
+    version = "0.19.1";
+    source = {
+      type = "gem";
+      sha256 = "08p5gx18yrbnwc6xc0mxvsfaxzgy2y9i78xq7ds0qmdm67q39y4z";
+    };
+  };
+  "thread_safe" = {
+    version = "0.3.4";
+    source = {
+      type = "gem";
+      sha256 = "1cil2zcdzqkyr8zrwhlg7gywryg36j4mxlxw0h0x0j0wjym5nc8n";
+    };
+  };
+  "tilt" = {
+    version = "1.4.1";
+    source = {
+      type = "gem";
+      sha256 = "00sr3yy7sbqaq7cb2d2kpycajxqf1b1wr1yy33z4bnzmqii0b0ir";
+    };
+  };
+  "tins" = {
+    version = "1.1.0";
+    source = {
+      type = "gem";
+      sha256 = "0jddc40lw8lzn421p6pjvvs7b37qyd8jgsl5nrq16rc46wgx2r2r";
+    };
+  };
+  "tzinfo" = {
+    version = "1.2.2";
+    source = {
+      type = "gem";
+      sha256 = "1c01p3kg6xvy1cgjnzdfq45fggbwish8krd0h864jvbpybyx7cgx";
+    };
+    dependencies = [
+      "thread_safe"
+    ];
+  };
+  "uglifier" = {
+    version = "2.5.1";
+    source = {
+      type = "gem";
+      sha256 = "1vihq309mzv9a2i0s8v4imrn1g2kj8z0vr88q3i5b657c4kxzfp0";
+    };
+    dependencies = [
+      "execjs"
+      "json"
+    ];
+  };
+  "webmock" = {
+    version = "1.18.0";
+    source = {
+      type = "gem";
+      sha256 = "1r21a4x7dljb3cqxp7w7mdq5a1xvw9kn6m3gldsldsfza5b4hq03";
+    };
+    dependencies = [
+      "addressable"
+      "crack"
+    ];
+  };
+  "xpath" = {
+    version = "2.0.0";
+    source = {
+      type = "gem";
+      sha256 = "04kcr127l34p7221z13blyl0dvh0bmxwx326j72idayri36a394w";
+    };
+    dependencies = [
+      "nokogiri"
+    ];
+  };
+  "zeroclipboard-rails" = {
+    version = "0.1.0";
+    source = {
+      type = "gem";
+      sha256 = "00ixal0a0mxaqsyzp06c6zz4qdwqydy1qv4n7hbyqfhbmsdalcfc";
+    };
+    dependencies = [
+      "railties"
+    ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/panamax/ui.nix b/pkgs/applications/networking/cluster/panamax/ui.nix
index 3181fb976e03..4d4e4fe964d2 100644
--- a/pkgs/applications/networking/cluster/panamax/ui.nix
+++ b/pkgs/applications/networking/cluster/panamax/ui.nix
@@ -1,30 +1,33 @@
-{ stdenv, fetchgit, fetchurl, makeWrapper
+{ stdenv, fetchgit, fetchurl, makeWrapper, bundlerEnv, bundler_HEAD
 , ruby, rubygemsFun, openssl, sqlite, dataDir ? "/var/lib/panamax-ui"}:
 
 with stdenv.lib;
 
+let
+  env = bundlerEnv {
+    name = "panamax-api-gems";
+    inherit ruby;
+    gemset = ./gemset-ui.nix;
+    gemfile = ./Gemfile-ui;
+    lockfile = ./Gemfile-ui.lock;
+  };
+  bundler = bundler_HEAD.override { inherit ruby; };
+in
 stdenv.mkDerivation rec {
   name = "panamax-ui-${version}";
   version = "0.2.11";
 
-  bundler = fetchurl {
-    url = "http://rubygems.org/downloads/bundler-1.7.9.gem";
-    sha256 = "1gd201rh17xykab9pbqp0dkxfm7b9jri02llyvmrc0c5bz2vhycm";
-  };
-
   src = fetchgit {
     rev = "refs/tags/v${version}";
     url = "git://github.com/CenturyLinkLabs/panamax-ui";
     sha256 = "17j5ac8fzp377bzg7f239jdcc9j0c63bkx0ill5nl10i3h05z7jh";
   };
 
-  gemspec = map (gem: fetchurl { url=gem.url; sha256=gem.hash; }) (import ./Gemfile-ui.nix);
-
-  buildInputs = [ makeWrapper ruby openssl sqlite (rubygemsFun ruby) ];
+  buildInputs = [ makeWrapper env.ruby openssl sqlite bundler ];
 
   setSourceRoot = ''
     mkdir -p $out/share
-    cp -R git-export $out/share/panamax-ui
+    cp -R panamax-ui $out/share/panamax-ui
     export sourceRoot="$out/share/panamax-ui"
   '';
 
@@ -37,18 +40,12 @@ stdenv.mkDerivation rec {
 
   configurePhase = ''
     export HOME=$PWD
-    export GEM_HOME=$PWD
-
-    mkdir -p vendor/cache
-    ${concatStrings (map (gem: "ln -s ${gem} vendor/cache/${gem.name};") gemspec)}
-    ln -s ${bundler} vendor/cache/${bundler.name}
+    export GEM_HOME=${env}/${env.ruby.gemPath}
   '';
 
   buildPhase = ''
-    gem install --local vendor/cache/${bundler.name}
-    bin/bundle install --verbose --local --without development test
     rm -f ./bin/*
-    ruby ./gems/bundler-*/bin/bundle exec rake rails:update:bin
+    bundle exec rake rails:update:bin
   '';
 
   installPhase = ''
@@ -58,10 +55,10 @@ stdenv.mkDerivation rec {
     mkdir -p $out/bin
     makeWrapper bin/bundle "$out/bin/bundle" \
       --run "cd $out/share/panamax-ui" \
-      --prefix "PATH" : "$out/share/panamax-ui/bin:${ruby}/bin:$PATH" \
+      --prefix "PATH" : "$out/share/panamax-ui/bin:${env.ruby}/bin:$PATH" \
       --prefix "HOME" : "$out/share/panamax-ui" \
-      --prefix "GEM_HOME" : "$out/share/panamax-ui" \
-      --prefix "GEM_PATH" : "$out/share/panamax-ui"
+      --prefix "GEM_HOME" : "${env}/${env.ruby.gemPath}" \
+      --prefix "GEM_PATH" : "$out/share/panamax-ui:${bundler}/${env.ruby.gemPath}"
   '';
 
   meta = with stdenv.lib; {