puppet-library 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MzE2OGYxMDE4NjM3NTVkMDFmOGFjYTcwMmM3Y2YwYTg0ZmE1MzIxYg==
5
- data.tar.gz: !binary |-
6
- NGE3YWE2MWUwZGFiZjBhZDVhZjA2NzZkNDg3YmUyNDk1MThiYTk1Nw==
2
+ SHA1:
3
+ metadata.gz: 6f9c3cf2e116027a1009cf54a51a6ba183de0580
4
+ data.tar.gz: ef8af80971ad97d5aca06fd4cb011c48ed4645bf
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MmI3ZTljMjZmNjYxMWM2ODEwZjY5ZDJjODJiMzEyZGE3OTNmOTI2NzJhOTM2
10
- NjNjNzQ1YWVhMmJkZGNiOGQyNTAxNGJlN2Y0ZDAyM2U3OWEwZjMzNzg5Nzkw
11
- NGMzNDc2YmM3YjFmMjQwN2ZlMGEyNTUxMGM3M2IyZGJjOWJkMmM=
12
- data.tar.gz: !binary |-
13
- ZTkzNjBmN2UwMjlmZTkwNWQ3OGQ4OTM1MGU5OTQzZmNiYTNkZWZlZmY1ODg4
14
- MGQ2ZGExZmIzM2U0ZDEzZGViMmYyMzBkZWVkY2U5ZDEyYmQ0NzE5ZTlmYWQx
15
- ZTdkNGZkYTdiNzAwNzg3ODQ5ZDQ2NGViMmYyOTBhYmM0NTE0MzM=
6
+ metadata.gz: a695a4a49383c10faca50142781097319f9c5f1154f02ddf32b328f1ef6a71f5a7aa203936c96e77026cc9675ab6eb79297784a303a8bd156bfd2e33f0b39533
7
+ data.tar.gz: 9a4c3cf05cba46d86208be6958d0c657e9858e54bf50e107fa9a7aebcac2eef7df8e0079ff71a5fe565bbd8315c50806828b7f078358b673dba02e9baeb07474
data/CHANGELOG.yml CHANGED
@@ -40,4 +40,8 @@
40
40
  - tag: v0.5.0
41
41
  changes:
42
42
  - Added module search field to web UI
43
-
43
+ - tag: v0.6.0
44
+ changes:
45
+ - Add config API for running with Passenger
46
+ - Load configuration from a config file
47
+ - Fixed version number bug that made the app crash with some Rubygems versions
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Puppet Library
2
2
 
3
- A private server for your Puppet modules. Compatible with [librarian-puppet](http://librarian-puppet.com).
3
+ A private Puppet Forge. Compatible with [librarian-puppet](http://librarian-puppet.com).
4
4
 
5
5
  [![Build Status](https://travis-ci.org/drrb/puppet-library.png?branch=master)](https://travis-ci.org/drrb/puppet-library)
6
6
  [![Coverage Status](https://coveralls.io/repos/drrb/puppet-library/badge.png)](https://coveralls.io/r/drrb/puppet-library)
@@ -95,11 +95,35 @@ Puppet Library is tested against Ruby versions:
95
95
  - 2.0.0
96
96
  - 2.1.0
97
97
 
98
- ## Running with Phusion Passenger
98
+ ## Config file (EXPERIMENTAL)
99
+
100
+ Instead of specifying command-line options, you can configure Puppet Library with a configuration file.
101
+ To use a configuration file, point to it on the command line:
102
+
103
+ ```sh
104
+ puppet-library --config-file my-puppet-library-config.yml
105
+ ```
106
+
107
+ A configuration file looks like this:
108
+
109
+ ```yaml
110
+ port: 4567
111
+ server: thin
112
+ daemonize: true
113
+ pidfile: /var/run/puppetlibrary.pid
114
+ forges:
115
+ - Directory: /var/lib/modules
116
+ - Proxy: http://forge.puppetlabs.com
117
+ ```
118
+
119
+ ## Running with Phusion Passenger (EXPERIMENTAL)
99
120
 
100
121
  To run Puppet Library with [Phusion Passenger](https://www.phusionpassenger.com):
101
122
 
102
123
  ```sh
124
+ # Install Puppet Library
125
+ sudo gem install puppet-library
126
+
103
127
  # Create a Passenger-compatible directory structure
104
128
  mkdir -p /webapps/puppet-library/{public,tmp}
105
129
 
@@ -108,6 +132,7 @@ cat > /webapps/puppet-library/config.ru <<EOF
108
132
  require "rubygems"
109
133
  require "puppet_library"
110
134
 
135
+ # NB: this config API is not yet stable, and may change without notice
111
136
  server = PuppetLibrary::Server.set_up do |library|
112
137
  # Serve our private modules
113
138
  library.forge PuppetLibrary::Forge::Directory.new("/var/lib/modules")
data/Rakefile CHANGED
@@ -22,11 +22,11 @@ require 'json'
22
22
  require 'yaml'
23
23
  require 'net/http'
24
24
 
25
- SUPPORTED_VERSIONS = %w[1.8 1.9 2.0 2.1]
25
+ SUPPORTED_RUBY_VERSIONS = %w[1.8 1.9 2.0 2.1 system]
26
26
  # The integration test doesn't work on Ruby 1.8, and Puppet doesn't work on 2.1
27
- INTEGRATION_TEST_INCOMPATIBLE_VERSIONS = %w[1.8 2.1]
27
+ INTEGRATION_TEST_INCOMPATIBLE_RUBY_VERSIONS = %w[1.8 2.1]
28
28
  # Capybara needs Nokogiri, which needs 1.9+
29
- ACCEPTANCE_TEST_INCOMPATIBLE_VERSIONS = %w[1.8]
29
+ ACCEPTANCE_TEST_INCOMPATIBLE_RUBY_VERSIONS = %w[1.8 system]
30
30
 
31
31
  class String
32
32
  def green
@@ -43,13 +43,13 @@ class String
43
43
  end
44
44
 
45
45
  def ruby_version_supports_integration_test?(version = RUBY_VERSION)
46
- ! INTEGRATION_TEST_INCOMPATIBLE_VERSIONS.find do |bad_version|
46
+ ! INTEGRATION_TEST_INCOMPATIBLE_RUBY_VERSIONS.find do |bad_version|
47
47
  version.start_with? bad_version
48
48
  end
49
49
  end
50
50
 
51
51
  def ruby_version_supports_acceptance_tests?(version = RUBY_VERSION)
52
- ! ACCEPTANCE_TEST_INCOMPATIBLE_VERSIONS.find do |bad_version|
52
+ ! ACCEPTANCE_TEST_INCOMPATIBLE_RUBY_VERSIONS.find do |bad_version|
53
53
  version.start_with? bad_version
54
54
  end
55
55
  end
@@ -90,7 +90,7 @@ task :default => [:test, 'coveralls:push']
90
90
 
91
91
  desc "Check it works on all local rubies"
92
92
  task :verify do
93
- versions = %w[1.8 1.9 2.0 2.1]
93
+ versions = SUPPORTED_RUBY_VERSIONS
94
94
  puts "\nRunning Specs".green
95
95
  spec_results = versions.map do |ruby_version|
96
96
  puts "\n- Ruby #{ruby_version}".green
@@ -115,7 +115,7 @@ task :verify do
115
115
  puts "| Version | Specs | ITs | ATs |"
116
116
  puts "+---------+-------+-------+-------+"
117
117
  versions.zip(results).each do |(version, (spec_result, integration_test_result, acceptance_test_result))|
118
- v = version
118
+ v = version.ljust(7)
119
119
  s = spec_result ? "pass".green : "fail".red
120
120
  if ruby_version_supports_integration_test? version
121
121
  i = integration_test_result ? "pass".green : "fail".red
@@ -128,7 +128,7 @@ task :verify do
128
128
  else
129
129
  a = "skip".yellow
130
130
  end
131
- puts "| #{v} | #{s} | #{i} | #{a} |"
131
+ puts "| #{v} | #{s} | #{i} | #{a} |"
132
132
  end
133
133
  puts "+---------+-------+-------+-------+"
134
134
 
@@ -169,22 +169,25 @@ task "push-release" => ["check-license", :verify] do
169
169
  puts "Releasing #{PuppetLibrary::VERSION}"
170
170
  Rake::Task[:release].invoke
171
171
 
172
- puts "Registering release notes for #{PuppetLibrary::VERSION}"
173
- Rake::Task["register-release[#{PuppetLibrary::VERSION}]"].invoke
172
+ upload_release_notes(PuppetLibrary::VERSION)
174
173
 
175
- major, minor, patch = PuppetLibrary::VERSION.split(".").map {|n| n.to_i}
176
- new_version = "#{major}.#{minor + 1}.0"
177
- puts "Updating version number to #{new_version}"
178
- system(%q[sed -i '' -E 's/VERSION = ".*"/VERSION = "] + new_version + %q["/' lib/puppet_library/version.rb]) or fail "Couldn't update version"
179
- PuppetLibrary::VERSION.replace new_version
180
- system "git commit lib/puppet_library/version.rb --message='[release] Incremented version number'" or fail "Couldn't commit new version number"
174
+ increment_version
175
+ end
176
+
177
+ desc "Increment version number and commit it"
178
+ task "increment-version" do
179
+ increment_version
181
180
  end
182
181
 
183
182
  desc "Register release with Github"
184
183
  task "register-release", [:version] do |task, args|
184
+ upload_release_notes(args[:version])
185
+ end
186
+
187
+ def upload_release_notes(version)
188
+ puts "Registering release notes for #{PuppetLibrary::VERSION}"
185
189
  github = Github.new
186
190
 
187
- version = args[:version]
188
191
  unless version =~ /\d+\.\d+\.\d+/
189
192
  raise "Bad version: '#{version}'"
190
193
  end
@@ -216,6 +219,15 @@ task "register-release", [:version] do |task, args|
216
219
  puts "Done"
217
220
  end
218
221
 
222
+ def increment_version
223
+ major, minor, patch = PuppetLibrary::VERSION.split(".").map {|n| n.to_i}
224
+ new_version = "#{major}.#{minor + 1}.0"
225
+ puts "Updating version number to #{new_version}"
226
+ system(%q[sed -i '' -E 's/VERSION = ".*"/VERSION = "] + new_version + %q["/' lib/puppet_library/version.rb]) or fail "Couldn't update version"
227
+ PuppetLibrary::VERSION.replace new_version
228
+ system "git commit lib/puppet_library/version.rb --message='[release] Incremented version number'" or fail "Couldn't commit new version number"
229
+ end
230
+
219
231
  class Github
220
232
  def initialize
221
233
  @base_url = "https://api.github.com"
data/TODO.yml CHANGED
@@ -1,17 +1,20 @@
1
- bugs:
2
- - Using captialised Author name to create full module name
3
1
  features:
4
- - Use config from a config file
5
- - Allow proxy to cache downloaded modules/API calls on disk
6
- - |
7
- Accept --cache-dir option to specify a parent cache directory (people
8
- will need to embed the server or use a config file for more control)
2
+ - disk cache:
3
+ - Allow proxy to cache downloaded modules/API calls on disk
4
+ - |
5
+ Accept --cache-dir option to specify a parent cache directory (people
6
+ will need to embed the server or use a config file for more control)
9
7
  - Validate repo dirs (make sure they're readable)
10
8
  - Allow failover between module repositories
11
- - Web UI: asynchronous
9
+ - Web UI: asynchronous (index page loads too slowly)
10
+ - Look in /etc/puppet-library.yml for config by default
11
+ - Named subforges:
12
+ - per-subforge queries
13
+ - upload modules (web form and API)
14
+ - browse proxy cache
15
+ - clear proxy cache (web form and API)
16
+ - delete modules from disk (web form)
12
17
  - Authentication
13
18
 
14
19
  dubious_features:
15
20
  - Make proxy cache TTL configurable
16
- - REST API to clear proxy cache
17
- - REST API to upload modules
@@ -16,6 +16,7 @@
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
18
  require 'rack'
19
+ require 'yaml'
19
20
  require 'puppet_library/forge/directory'
20
21
  require 'puppet_library/forge/multi'
21
22
  require 'puppet_library/version'
@@ -42,6 +43,10 @@ module PuppetLibrary
42
43
  option_parser = OptionParser.new do |opts|
43
44
  opts.banner = "Usage: #{File.basename $0} [options]"
44
45
 
46
+ opts.on("-c", "--config-file FILE", "Config file to read config values from") do |config_file|
47
+ options[:config_file] = config_file
48
+ end
49
+
45
50
  opts.on("-p", "--port PORT", "Port to listen on (defaults to whatever Rack wants to use)") do |port|
46
51
  options[:port] = port
47
52
  end
@@ -54,12 +59,10 @@ module PuppetLibrary
54
59
  options[:hostname] = hostname
55
60
  end
56
61
 
57
- options[:daemonize] = false
58
62
  opts.on("--daemonize", "Run the server in the background") do
59
63
  options[:daemonize] = true
60
64
  end
61
65
 
62
- options[:pidfile] = nil
63
66
  opts.on("--pidfile FILE", "Write a pidfile to this location after starting (implies --daemonize)") do |pidfile|
64
67
  options[:daemonize] = true
65
68
  options[:pidfile] = File.expand_path pidfile
@@ -83,10 +86,12 @@ module PuppetLibrary
83
86
  end
84
87
 
85
88
  def build_server(options)
86
- if options[:forges].empty?
87
- options[:forges] << [ Forge::Proxy, "http://forge.puppetlabs.com" ]
89
+ if options[:config_file]
90
+ load_config(options)
88
91
  end
89
92
 
93
+ load_defaults(options)
94
+
90
95
  Server.set_up do |server|
91
96
  options[:forges].each do |(forge_type, config)|
92
97
  subforge = forge_type.new(config)
@@ -120,6 +125,32 @@ module PuppetLibrary
120
125
  :pid => options[:pidfile]
121
126
  )
122
127
  end
128
+
129
+ def load_config(options)
130
+ config = read_yaml_file(options[:config_file])
131
+ options[:daemonize] = config["daemonize"]
132
+ options[:port] = config["port"]
133
+ options[:pidfile] = config["pidfile"]
134
+ options[:server] = config["server"]
135
+
136
+ forges_config = config["forges"] || []
137
+ configured_forges = forges_config.map do |forge|
138
+ [ Forge.const_get(forge.keys.first), forge.values.first ]
139
+ end
140
+ options[:forges] = configured_forges + options[:forges]
141
+ end
142
+
143
+ def load_defaults(options)
144
+ options[:daemonize] ||= false
145
+ options[:pidfile] ||= nil
146
+ if options[:forges].empty?
147
+ options[:forges] << [ Forge::Proxy, "http://forge.puppetlabs.com" ]
148
+ end
149
+ end
150
+
151
+ def read_yaml_file(path)
152
+ YAML.load_file(File.expand_path(path)) || {}
153
+ end
123
154
  end
124
155
 
125
156
  class ExpectedError < StandardError
@@ -17,6 +17,22 @@
17
17
 
18
18
  require 'rubygems/package'
19
19
 
20
+ module Gem
21
+ def Version.new(version)
22
+ begin
23
+ super(version.to_s.gsub("-",".pre."))
24
+ rescue ArgumentError => e
25
+ # If it starts with numbers, use those
26
+ if version =~ /^\d+(\.\d+)*/
27
+ super(version[/^\d+(\.\d+)*/])
28
+ # Somebody's really made a mess of this version number
29
+ else
30
+ super("0")
31
+ end
32
+ end
33
+ end
34
+ end
35
+
20
36
  class Array
21
37
  # Like 'uniq' with a block, but also works on Ruby < 1.9
22
38
  def unique_by
@@ -31,6 +47,10 @@ class Array
31
47
  end
32
48
  end
33
49
 
50
+ def version_sort
51
+ version_sort_by { |e| e }
52
+ end
53
+
34
54
  def version_sort_by
35
55
  sort_by do |element|
36
56
  version = yield(element)
@@ -16,5 +16,5 @@
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
18
  module PuppetLibrary
19
- VERSION = "0.5.0"
19
+ VERSION = "0.6.0"
20
20
  end
@@ -29,6 +29,7 @@ module PuppetLibrary
29
29
  allow(Server).to receive(:new).with(forge).and_return(server)
30
30
  return server
31
31
  end
32
+ let(:config_file) { Tempfile.new("puppet-library.yml") }
32
33
  let(:log) { double('log').as_null_object }
33
34
  let(:library) { PuppetLibrary.new(log) }
34
35
  let(:default_options) {{ :app => server, :Host => nil, :Port => nil, :server => nil, :daemonize => false, :pid => nil }}
@@ -105,13 +106,36 @@ module PuppetLibrary
105
106
  end
106
107
  end
107
108
 
109
+ context "when using --config-file option" do
110
+ it "uses config values from config file as config defaults" do
111
+ config = {
112
+ "port" => 4567,
113
+ "daemonize" => true,
114
+ "server" => "thin",
115
+ "pidfile" => "/var/run/puppet-library.pid",
116
+ "forges" => [
117
+ { "Directory" => "/var/lib/modules" },
118
+ { "Proxy" => "http://forge.puppetlabs.com" }
119
+ ]
120
+ }
121
+ File.open(config_file.path, "w") { |f| f << config.to_yaml }
122
+ expect(Forge::Directory).to receive(:new).with("/var/lib/modules")
123
+ expect(Forge::Proxy).to receive(:new).with("http://forge.puppetlabs.com")
124
+ expect(forge).to receive(:add_forge).twice
125
+ expect(Rack::Server).to receive(:start).with(default_options_with(:Port => 4567, :daemonize => true, :pid => "/var/run/puppet-library.pid", :server => "thin"))
126
+
127
+ library.go(["--config-file", config_file.path])
128
+ end
129
+ end
130
+
108
131
  context "when using --proxy option" do
109
132
  it "adds a proxy module forge for each option specified" do
110
133
  proxy1 = double('proxy1')
111
134
  proxy2 = double('proxy2')
112
135
  expect(Forge::Proxy).to receive(:new).with("http://forge1.example.com").and_return(proxy1)
113
136
  expect(Forge::Proxy).to receive(:new).with("http://forge2.example.com").and_return(proxy2)
114
- expect(forge).to receive(:add_forge).twice
137
+ expect(forge).to receive(:add_forge).with(proxy1)
138
+ expect(forge).to receive(:add_forge).with(proxy2)
115
139
  expect(Rack::Server).to receive(:start).with(default_options)
116
140
 
117
141
  library.go(["--proxy", "http://forge1.example.com", "--proxy", "http://forge2.example.com"])
data/spec/util_spec.rb CHANGED
@@ -29,5 +29,15 @@ describe 'util' do
29
29
  expect(family.unique_by {|p| p["name"]}).to eq [son, mom]
30
30
  end
31
31
  end
32
+
33
+ describe "#version_sort" do
34
+ it "sorts according to version numbers" do
35
+ expect(["2.0.0", "1.10.0", "1.2.0"].version_sort).to eq ["1.2.0", "1.10.0", "2.0.0"]
36
+ end
37
+
38
+ it "copes with odd versions" do
39
+ expect(["1.10.0-badprerelease", "1.3", "1.10.0", "xxx", "1.10.0.rc1", "1.2.0"].version_sort).to eq ["xxx", "1.2.0", "1.3", "1.10.0-badprerelease", "1.10.0.rc1", "1.10.0"]
40
+ end
41
+ end
32
42
  end
33
43
  end
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-library
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - drrb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-01 00:00:00.000000000 Z
11
+ date: 2014-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sinatra
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: haml
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -70,42 +70,42 @@ dependencies:
70
70
  name: coveralls
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: gitsu
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: librarian-puppet
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ! '>='
101
+ - - '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ! '>='
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
@@ -126,14 +126,14 @@ dependencies:
126
126
  name: pry
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ! '>='
129
+ - - '>='
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ! '>='
136
+ - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  - !ruby/object:Gem::Dependency
@@ -154,140 +154,140 @@ dependencies:
154
154
  name: rack-test
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ! '>='
157
+ - - '>='
158
158
  - !ruby/object:Gem::Version
159
159
  version: '0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ! '>='
164
+ - - '>='
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: rake
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
- - - ! '>='
171
+ - - '>='
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
- - - ! '>='
178
+ - - '>='
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: rspec
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
- - - ! '>='
185
+ - - '>='
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
- - - ! '>='
192
+ - - '>='
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: simplecov
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ! '>='
199
+ - - '>='
200
200
  - !ruby/object:Gem::Version
201
201
  version: '0'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ! '>='
206
+ - - '>='
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: guard
211
211
  requirement: !ruby/object:Gem::Requirement
212
212
  requirements:
213
- - - ! '>='
213
+ - - '>='
214
214
  - !ruby/object:Gem::Version
215
215
  version: '0'
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
- - - ! '>='
220
+ - - '>='
221
221
  - !ruby/object:Gem::Version
222
222
  version: '0'
223
223
  - !ruby/object:Gem::Dependency
224
224
  name: guard-rspec
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
- - - ! '>='
227
+ - - '>='
228
228
  - !ruby/object:Gem::Version
229
229
  version: '0'
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - ! '>='
234
+ - - '>='
235
235
  - !ruby/object:Gem::Version
236
236
  version: '0'
237
237
  - !ruby/object:Gem::Dependency
238
238
  name: terminal-notifier-guard
239
239
  requirement: !ruby/object:Gem::Requirement
240
240
  requirements:
241
- - - ! '>='
241
+ - - '>='
242
242
  - !ruby/object:Gem::Version
243
243
  version: '0'
244
244
  type: :development
245
245
  prerelease: false
246
246
  version_requirements: !ruby/object:Gem::Requirement
247
247
  requirements:
248
- - - ! '>='
248
+ - - '>='
249
249
  - !ruby/object:Gem::Version
250
250
  version: '0'
251
251
  - !ruby/object:Gem::Dependency
252
252
  name: capybara
253
253
  requirement: !ruby/object:Gem::Requirement
254
254
  requirements:
255
- - - ! '>='
255
+ - - '>='
256
256
  - !ruby/object:Gem::Version
257
257
  version: '0'
258
258
  type: :development
259
259
  prerelease: false
260
260
  version_requirements: !ruby/object:Gem::Requirement
261
261
  requirements:
262
- - - ! '>='
262
+ - - '>='
263
263
  - !ruby/object:Gem::Version
264
264
  version: '0'
265
265
  - !ruby/object:Gem::Dependency
266
266
  name: nokogiri
267
267
  requirement: !ruby/object:Gem::Requirement
268
268
  requirements:
269
- - - ! '>='
269
+ - - '>='
270
270
  - !ruby/object:Gem::Version
271
271
  version: '0'
272
272
  type: :development
273
273
  prerelease: false
274
274
  version_requirements: !ruby/object:Gem::Requirement
275
275
  requirements:
276
- - - ! '>='
276
+ - - '>='
277
277
  - !ruby/object:Gem::Version
278
278
  version: '0'
279
279
  - !ruby/object:Gem::Dependency
280
280
  name: cucumber
281
281
  requirement: !ruby/object:Gem::Requirement
282
282
  requirements:
283
- - - ! '>='
283
+ - - '>='
284
284
  - !ruby/object:Gem::Version
285
285
  version: '0'
286
286
  type: :development
287
287
  prerelease: false
288
288
  version_requirements: !ruby/object:Gem::Requirement
289
289
  requirements:
290
- - - ! '>='
290
+ - - '>='
291
291
  - !ruby/object:Gem::Version
292
292
  version: '0'
293
293
  description: A Puppet module server
@@ -362,17 +362,17 @@ require_paths:
362
362
  - lib
363
363
  required_ruby_version: !ruby/object:Gem::Requirement
364
364
  requirements:
365
- - - ! '>='
365
+ - - '>='
366
366
  - !ruby/object:Gem::Version
367
367
  version: '0'
368
368
  required_rubygems_version: !ruby/object:Gem::Requirement
369
369
  requirements:
370
- - - ! '>='
370
+ - - '>='
371
371
  - !ruby/object:Gem::Version
372
372
  version: '0'
373
373
  requirements: []
374
374
  rubyforge_project:
375
- rubygems_version: 2.2.1
375
+ rubygems_version: 2.0.3
376
376
  signing_key:
377
377
  specification_version: 4
378
378
  summary: Puppet Library is a private Puppet module server that's compatible with librarian-puppet.