diff --git a/config_defaults.yml b/config_defaults.yml
index 150cf4cddc862d0e6579a5e19cdb71e7253c1408..63cce235ef0d33b6d4221fcbeaa7de43a7026617 100644
--- a/config_defaults.yml
+++ b/config_defaults.yml
@@ -556,46 +556,52 @@ Rakefile:
 Gemfile:
   required:
     ':development':
-      # hardcode JSON version to what's shipped in pdk for now
-      - gem: json
-        version: '= 2.0.4'
-        condition: "Gem::Requirement.create('~> 2.4.2').satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))"
-      - gem: json
-        version: '= 2.1.0'
-        condition: "Gem::Requirement.create(['>= 2.5.0', '< 2.7.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))"
-      - gem: json
-        version: '= 2.3.0'
-        condition: "Gem::Requirement.create(['>= 2.7.0', '< 2.8.0']).satisfied_by?(Gem::Version.new(RUBY_VERSION.dup))"
-      - gem: 'puppet-module-posix-default-r#{minor_version}'
-        version: '~> 1.0'
-        platforms: ruby
-      - gem: 'puppet-module-posix-dev-r#{minor_version}'
-        version: '~> 1.0'
-        platforms: ruby
-      - gem: 'puppet-module-win-default-r#{minor_version}'
-        version: '~> 1.0'
-        platforms:
-          - mswin
-          - mingw
-          - x64_mingw
-      - gem: 'puppet-module-win-dev-r#{minor_version}'
+      - gem: 'json'
+        version: '~> 2.0'
+      - gem: 'voxpupuli-puppet-lint-plugins'
+        version: '~> 3.0'
+      - gem: 'facterdb'
+        version: '~> 1.18'
+      - gem: 'metadata-json-lint'
+        version:
+        - '>= 2.0.2'
+        - '< 4.0.0'
+      - gem: 'puppetlabs_spec_helper'
+        version:
+        - '>= 3.0.0'
+        - '< 5.0.0'
+      - gem: 'rspec-puppet-facts'
+        version: '~> 2.0'
+      - gem: 'codecov'
+        version: '~> 0.2'
+      - gem: 'dependency_checker'
+        version: '~> 0.2'
+      - gem: 'parallel_tests'
+        version: '~> 3.4'
+      - gem: 'pry'
+        version: '~> 0.10'
+      - gem: 'simplecov-console'
+        version: '~> 0.5'
+      - gem: 'puppet-debugger'
         version: '~> 1.0'
+      - gem: 'rubocop'
+        version: '= 1.6.1'
+      - gem: 'rubocop-performance'
+        version: '= 1.9.1'
+      - gem: 'rubocop-rspec'
+        version: '= 2.0.1'
+      - gem: 'rb-readline'
+        version: '= 0.5.5'
         platforms:
           - mswin
           - mingw
           - x64_mingw
-      - gem: 'voxpupuli-puppet-lint-plugins'
-        version: '>= 3.0'
     ':system_tests':
-      - gem: 'puppet-module-posix-system-r#{minor_version}'
-        version: '~> 1.0'
+      - gem: 'puppet_litmus'
+        version: '< 1.0.0'
         platforms: ruby
-      - gem: 'puppet-module-win-system-r#{minor_version}'
-        version: '~> 1.0'
-        platforms:
-          - mswin
-          - mingw
-          - x64_mingw
+      - gem: 'serverspec'
+        version: '~> 2.41'
 .gitlab-ci.yml:
   defaults:
     cache:
diff --git a/moduleroot/Gemfile.erb b/moduleroot/Gemfile.erb
index 2e5f391c0aa9052ea964c0b8479024c109887028..743dd7452bc162546fa3fc82040fc7e131cf401d 100644
--- a/moduleroot/Gemfile.erb
+++ b/moduleroot/Gemfile.erb
@@ -1,11 +1,20 @@
 <%
 def gem_length(gem)
-  if gem['from_env']
-    version_len = " *location_for(ENV['#{gem['from_env']}'])".length + ((" || '#{gem['version']}'".length if gem['version']) || 0)
+  if gem['version']
+    gem_output = ''
+    Array(gem['version']).each do |version|
+      gem_output += " '#{version}',"
+    end
+    gem_output = gem_output.chomp(',')
+
+    if gem['from_env']
+      version_len = " *location_for(ENV['#{gem['from_env']}'])".length + " ||#{gem_output}".length
+    else
+      version_len = ",#{gem_output}".length
+    end
   else
-    version_len = (", '#{gem['version']}'".length if gem['version']) || 0
+    version_len = 0
   end
-
   gem['gem'].length + version_len
 end
 
@@ -13,10 +22,17 @@ def gem_spec(gem, max_len)
   output = "\"#{gem['gem']}\""
 
   if gem['version']
+    gem_output = ''
+    # For each version requirement given add to the string and place a `,`
+    Array(gem['version']).each do |version|
+      gem_output += " '#{version}',"
+    end
+    gem_output = gem_output.chomp(',')
+
     if gem['from_env']
-      output += ", *location_for(ENV['#{gem['from_env']}'] || '#{gem['version']}')"
+      output += ", *location_for(ENV['#{gem['from_env']}'] ||#{gem_output})"
     else
-      output += ", '#{gem['version']}'"
+      output += ",#{gem_output}"
     end
   end
 
@@ -55,9 +71,6 @@ def location_for(place_or_version, fake_version = nil)
   end
 end
 
-ruby_version_segments = Gem::Version.new(RUBY_VERSION.dup).segments
-minor_version = ruby_version_segments[0..1].join('.')
-
 <%
   groups = {}
   (@configs['required'].keys + ((@configs['optional'] || {}).keys)).uniq.each do |key|