bib-vagrant 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 321c5c79c1c30f4f74a06e99065d2d3efd47ee03
4
- data.tar.gz: 5065e81e14aa4a075bdb949ddf4ae4e3164b3756
3
+ metadata.gz: 7133007baecfa23b1110bb1da199c3287ca47c24
4
+ data.tar.gz: cdd0a1c46083cf22fe43e000217a2621668ede60
5
5
  SHA512:
6
- metadata.gz: 81fe49a54adf89136038fb269dd716e245b28bb35b96750da69cd53d7e7b59420fbe5266d3891cbd827c84b5d17cf3389c09c9387d4e4a855d09e650a4328401
7
- data.tar.gz: 5b0d4ed21cd034e2dc9f75948f5e04f7212062064ec61ae9f241e4adb0c31bbfb2709803b6fcc7592089bab0230a2dd2bff6cbc93687b479575dc799c81ea6f2
6
+ metadata.gz: 152b6356535d41c0bf127a49fce4507b24d568916d59f66ffdc81948526d5af668285202eea17960030f6ab38c1cc454149050c982ea4eb617c6b613836fc323
7
+ data.tar.gz: 0bc5861591fc18e20184ea6ee386cd10543c65053eb773d3f9796c3436eecd877ece2c60aba8e370cc3d7b196c4d04a12f66b2328eb41d171b5d1c3f4c2e41fc
data/README.md CHANGED
@@ -117,7 +117,30 @@ npm_userpass: <npm or github authentication token>
117
117
 
118
118
  NOTE: the npm_registry should be in the format of 'http[s]://host.domain.tld/' - The trailing slash is important
119
119
 
120
+ ## Developing and Testing
121
+
122
+ Make sure you are using a Bundler version which is compatible with Vagrant which comes from GitHub like defined here:
123
+
124
+ ```
125
+ group :development do
126
+ gem 'vagrant', git: 'https://github.com/mitchellh/vagrant.git'
127
+ end
128
+ ```
129
+
130
+ Bundler version 1.7.15 works fine and can be installed like this:
131
+
132
+ ```
133
+ gem install bundler -v '~> 1.7.0'
134
+ ```
135
+
136
+ Then, when you want to test Bib Vagrant use:
137
+
138
+ ```
139
+ bundle _1.7.15_ exec vagrant
140
+ ```
141
+
142
+ Happy developing and testing.
143
+
120
144
  ## Contributing
121
145
 
122
146
  See [Contributing](CONTRIBUTING.md)
123
-
@@ -1,93 +1,175 @@
1
1
  require 'yaml'
2
2
 
3
+
4
+ class String
5
+ def red
6
+ "\033[31m#{self}\033[0m"
7
+ end
8
+ end
9
+
10
+
3
11
  module Bib
4
12
  module Vagrant
5
- class Config
6
- @@home_dir = nil
7
- @@verbose = true
13
+ class << self
14
+ # Checks for plugins and takes a plugin list plus optional true/false for checking some
15
+ # _esoteric_ plugin constellation, see Bib::Vagrant#check_esoteric_plugin_constellation.
16
+ #
17
+ # ==== Example where given plugins are all mandatory (plugins are given as an array)
18
+ #
19
+ # Bib::Vagrant.check_plugins(['landrush', 'vagrant-hosts'])
20
+ #
21
+ # ==== Example where a plugin may be mandatory but doesn't need to (plugins are given as a hash)
22
+ #
23
+ # Bib::Vagrant.check_plugins(
24
+ # {
25
+ # 'landrush' => true,
26
+ # 'vagrant-hosts' => false
27
+ # },
28
+ # true
29
+ # )
30
+ def check_plugins(plugins, check_esoteric_plugin_constellation = true)
31
+ complete = true
32
+
33
+ plugins.each do |plugin, mandatory|
34
+ next if ::Vagrant.has_plugin?(plugin)
35
+ next if ENV['VAGRANT_CI']
36
+ puts "!!! - You are missing a plugin: #{plugin}"
37
+ puts '---'
38
+ puts "### - Please run: vagrant plugin install #{plugin}"
39
+ puts '---'
40
+ puts "!!! - Read more here: #{plugin_list[plugin]}"
41
+ complete = false if mandatory
42
+ end
8
43
 
9
- def initialize(home = '~', verbose = true)
10
- @@home = home
11
- @@verbose = verbose
12
- end
44
+ if check_esoteric_plugin_constellation
45
+ complete = self.check_esoteric_plugin_constellation ? complete : false
46
+ end
13
47
 
14
- def get
15
- vagrantconfig = get_defaults
48
+ complete
49
+ end
16
50
 
17
- begin
18
- localconfigfile = File.open(get_path, 'r')
19
- vagrantconfig.merge!(YAML.load(localconfigfile.read))
20
- rescue Errno::ENOENT
21
- puts 'WARNING: No vagrant user-config found, using default cookbook path' if @@verbose
22
- create(get_path, vagrantconfig)
51
+ # Checks for some _esoteric_ plugin constellation.
52
+ #
53
+ # Please follow the output instructions when the _esoteric_ constellation is met.
54
+ def check_esoteric_plugin_constellation
55
+ complete = true
56
+
57
+ if ::Vagrant.has_plugin?('landrush') && !Gem.loaded_specs['celluloid'].nil?
58
+ if Gem.loaded_specs['celluloid'].version.to_s == '0.16.1'
59
+ puts 'This is an esoteric issue for vagrant 1.7.4/landrush 18 and virtualbox 5.x'
60
+ puts 'celluloid is 0.16.1'
61
+ puts 'Please do the following on your HOST OS'
62
+ puts ' export GEM_HOME=~/.vagrant.d/gems'
63
+ puts ' gem uninstall celluloid -v 0.16.1'
64
+ puts ' gem install celluloid -v 0.16.0'
65
+ complete = false
66
+ end
23
67
  end
24
68
 
25
- vagrantconfig
69
+ complete
26
70
  end
27
71
 
28
- def has?
29
- File.exist?(get_path)
72
+ # Returns an array which lists plugins to check where index is the name of the plugin and value
73
+ # is the url where the user can get more information about it.
74
+ def plugin_list
75
+ {
76
+ 'landrush' => 'https://github.com/phinze/landrush',
77
+ 'vagrant-hosts' => 'https://github.com/adrienthebo/vagrant-hosts',
78
+ 'vagrant-faster' => 'https://github.com/rdsubhas/vagrant-faster#how-much-does-it-allocate',
79
+ 'vagrant-cachier' => 'https://github.com/easybib/issues/wiki/Knowledgebase:-Global-Vagrant-setup#enable-vagrant-cachier-globally',
80
+ 'bib-vagrant' => 'See https://github.com/easybiblabs/bib-vagrant/blob/master/README.md'
81
+ }
30
82
  end
31
83
 
32
- def get_path
33
- File.expand_path("#{@@home}/.config/easybib/vagrantdefault.yml")
84
+ def init_github_hostkey(machine)
85
+ machine.vm.provision 'shell' do |s|
86
+ s.inline = 'ssh -T git@github.com -o StrictHostKeyChecking=no; exit 0'
87
+ s.privileged = false
88
+ end
34
89
  end
35
90
 
36
- def validate!(config)
37
- current_config_keys = config.keys
38
-
39
- get_defaults.keys.each do |required_key|
40
- fail "Missing #{required_key}!" unless current_config_keys.include?(required_key)
91
+ def check_gatling
92
+ unless ::Vagrant.has_plugin?('vagrant-gatling-rsync')
93
+ puts "\nERROR: you're using rsync - you'll need the vagrant-gatling-rsync plugin\n"
94
+ puts 'do'
95
+ puts "\n\tvagrant plugin install vagrant-gatling-rsync\n\n"
96
+ puts "(also: see the README for how to increase the inotify limit)\n"
97
+ exit 1
41
98
  end
99
+ puts "\nNOTE: you're using rsync, run\n\n\tvagrant gatling-rsync-auto\n\nto auto-sync the shared folders\n\n"
100
+ end
42
101
 
43
- errors = []
44
- log_level = %w(debug info warn error fatal)
45
- bool = [TrueClass, FalseClass]
46
-
47
- cookbook_path = File.expand_path(config['cookbook_path'])
48
-
49
- errors << 'nfs: must be a boolean' unless bool.include?(config['nfs'].class)
50
- errors << 'gui: must be a boolean' unless bool.include?(config['gui'].class)
51
- errors << 'cookbook_path: does not exist' unless File.directory?(cookbook_path)
52
- errors << "chef_log_level: must be one of #{log_level.join}" unless log_level.include?(config['chef_log_level'])
102
+ def install_node_artifacts(machine, node_uri)
103
+ machine.vm.provision 'shell', inline: <<-SHELL
104
+ echo "grabbing /usr/lib/node_modules.."
105
+ sudo wget --continue -O /tmp/usr_node.tgz #{node_uri}
106
+ sudo mkdir -p /usr/lib/node_modules
107
+ sudo tar --overwrite -zxof /tmp/usr_node.tgz -C /usr/lib/
108
+ echo ".. done."
109
+ SHELL
110
+ end
53
111
 
54
- unless config['additional_json'].empty?
55
- errors << 'additional_json: must be empty or valid json' unless is_valid_json?(config['additional_json'])
112
+ def add_composertoken_to_dna(dna, vagrantconfig)
113
+ if vagrantconfig.key?('composer_github_token') && !vagrantconfig['composer_github_token'].empty?
114
+ puts "[info] Replacing OAuth2 Token for composer with user token: #{vagrantconfig['composer_github_token']}"
115
+ dna['composer']['oauth_key'] = vagrantconfig['composer_github_token']
116
+ else
117
+ puts "[error] You don't have a token setup in!".red
118
+ puts ' 1. https://github.com/settings/tokens (with repo scope only)'
119
+ puts ' 2. Add this line to ~/.config/easybib/vagrantdefault.yml:'
120
+ puts ' composer_github_token: your-token-here'
121
+ puts ''
122
+ puts "Run `vagrant #{ARGV[0]}` again!"
123
+ exit
56
124
  end
125
+ dna
126
+ end
57
127
 
58
- return true if errors.count == 0
59
-
60
- fail "Errors: #{errors.join(', ')}"
128
+ def prepare_app_settings(vagrantconfig, machine, dna, applicationlist = 'applications')
129
+ dna = add_composertoken_to_dna(dna, vagrantconfig)
130
+ dna['vagrant'][applicationlist].each do |app, app_config|
131
+ vagrant_share = File.expand_path(app_config['app_root_location'])
132
+ host_folder = "#{File.dirname(__FILE__)}/sites/#{app}"
133
+ if vagrantconfig['nfs']
134
+ machine.vm.synced_folder host_folder, vagrant_share, type: 'nfs', mount_options: ['nolock,vers=3,udp,noatime,actimeo=1']
135
+ elsif vagrantconfig['rsync']
136
+ machine.vm.synced_folder host_folder, vagrant_share, type: 'rsync'
137
+ else
138
+ machine.vm.synced_folder host_folder, vagrant_share, owner: 'vagrant'
139
+ end
140
+ end
141
+ dna
61
142
  end
62
143
 
63
- private
144
+ def setup_landrush_hostnames(config, host_ip, dna, applicationlist = 'applications')
145
+ hosts_list = []
64
146
 
65
- def create(localconfigpath, vagrantconfig)
66
- FileUtils.mkdir_p(File.dirname(localconfigpath))
67
- File.open(localconfigpath, 'w+') do |file|
68
- file.write(vagrantconfig.to_yaml)
69
- puts "INFO: Created default vagrant user-config in #{localconfigpath}" if @@verbose
70
- puts 'INFO: You probably want to fix the path to the cookbooks in this file.' if @@verbose
147
+ dna['vagrant'][applicationlist].each do |_app, app_config|
148
+ # Populate Landrush and vagrant-hosts
149
+ host_name = "#{app_config['domain_name']}"
150
+ hosts_list.push(host_name)
151
+ config.landrush.host host_name, host_ip
71
152
  end
72
- rescue
73
- puts "WARNING: Unable to create default #{localconfigpath} - please do it manually." if @@verbose
74
- end
75
153
 
76
- def get_defaults
77
- {
78
- 'nfs' => false,
79
- 'cookbook_path' => '~/Sites/easybib/cookbooks',
80
- 'chef_log_level' => 'debug',
81
- 'additional_json' => '{}',
82
- 'gui' => false
83
- }
154
+ # This loop will actually populate the /etc/hsots on the guest and host OS via vagrant-hosts
155
+ hosts_flat = hosts_list.map { |name| name.split(' ') }.flatten.uniq
156
+ config.vm.provision :hosts do |provisioner|
157
+ # Add a single hostname
158
+ provisioner.add_host host_ip, hosts_flat
159
+ end
84
160
  end
85
161
 
86
- def is_valid_json?(json)
87
- JSON.parse(json)
88
- return true
89
- rescue JSON::ParserError
90
- false
162
+ def default_provision(machine)
163
+ # remove locale passing via ssh also generate a default locale on the guest OS
164
+ machine.vm.provision 'shell', inline: 'sed -i "s/@AcceptEnv LANG LC_\*/# AcceptEnv LANG LC_\*/g" /etc/ssh/sshd_config'
165
+ machine.vm.provision 'shell', inline: 'locale-gen en_US.UTF-8'
166
+
167
+ # uncomment the next line and re-run provision if you end up with a
168
+ # "Failed to fetch mirror://mirrors.ubuntu.com/mirrors.txt" error:
169
+ # machine.vm.provision "shell", inline: "apt-spy2 fix --commit --launchpad --country=US"
170
+ # machine.vm.provision "shell", inline: "apt-spy2 fix --commit --launchpad --country=Germany"
171
+
172
+ machine.vm.provision 'shell', inline: 'apt-get update -y'
91
173
  end
92
174
  end
93
175
  end
@@ -0,0 +1,94 @@
1
+ require 'yaml'
2
+
3
+ module Bib
4
+ module Vagrant
5
+ class Config
6
+ @@home_dir = nil
7
+ @@verbose = true
8
+
9
+ def initialize(home = '~', verbose = true)
10
+ @@home = home
11
+ @@verbose = verbose
12
+ end
13
+
14
+ def get
15
+ vagrantconfig = get_defaults
16
+
17
+ begin
18
+ localconfigfile = File.open(get_path, 'r')
19
+ vagrantconfig.merge!(YAML.load(localconfigfile.read))
20
+ rescue Errno::ENOENT
21
+ puts 'WARNING: No vagrant user-config found, using default cookbook path' if @@verbose
22
+ create(get_path, vagrantconfig)
23
+ end
24
+
25
+ vagrantconfig
26
+ end
27
+
28
+ def has?
29
+ File.exist?(get_path)
30
+ end
31
+
32
+ def get_path
33
+ File.expand_path("#{@@home}/.config/easybib/vagrantdefault.yml")
34
+ end
35
+
36
+ def validate!(config)
37
+ current_config_keys = config.keys
38
+
39
+ get_defaults.keys.each do |required_key|
40
+ fail "Missing #{required_key}!" unless current_config_keys.include?(required_key)
41
+ end
42
+
43
+ errors = []
44
+ log_level = %w(debug info warn error fatal)
45
+ bool = [TrueClass, FalseClass]
46
+
47
+ cookbook_path = File.expand_path(config['cookbook_path'])
48
+
49
+ errors << 'nfs: must be a boolean' unless bool.include?(config['nfs'].class)
50
+ errors << 'gui: must be a boolean' unless bool.include?(config['gui'].class)
51
+ errors << 'cookbook_path: does not exist' unless File.directory?(cookbook_path)
52
+ errors << "chef_log_level: must be one of #{log_level.join}" unless log_level.include?(config['chef_log_level'])
53
+
54
+ unless config['additional_json'].empty?
55
+ errors << 'additional_json: must be empty or valid json' unless is_valid_json?(config['additional_json'])
56
+ end
57
+
58
+ return true if errors.count == 0
59
+
60
+ fail "Errors: #{errors.join(', ')}"
61
+ end
62
+
63
+ private
64
+
65
+ def create(localconfigpath, vagrantconfig)
66
+ FileUtils.mkdir_p(File.dirname(localconfigpath))
67
+ File.open(localconfigpath, 'w+') do |file|
68
+ file.write(vagrantconfig.to_yaml)
69
+ puts "INFO: Created default vagrant user-config in #{localconfigpath}" if @@verbose
70
+ puts 'INFO: You probably want to fix the path to the cookbooks in this file.' if @@verbose
71
+ end
72
+ rescue
73
+ puts "WARNING: Unable to create default #{localconfigpath} - please do it manually." if @@verbose
74
+ end
75
+
76
+ def get_defaults
77
+ {
78
+ 'nfs' => false,
79
+ 'cookbook_path' => '~/Sites/easybib/cookbooks',
80
+ 'chef_log_level' => 'debug',
81
+ 'additional_json' => '{}',
82
+ 'gui' => false
83
+ }
84
+ end
85
+
86
+ def is_valid_json?(json)
87
+ JSON.parse(json)
88
+ return true
89
+ rescue JSON::ParserError
90
+ false
91
+ end
92
+ end
93
+ end
94
+ end
@@ -18,6 +18,12 @@ end
18
18
  class BibConfigurePlugin < Vagrant.plugin('2')
19
19
  name 'NPM configuration Provisioner'
20
20
 
21
+ # Create a local config, unless it already exists
22
+ action_hook(:environment_load) do |hook|
23
+ config = Bib::Vagrant::Config.new
24
+ config.get # Creates the config file unless existing already and the gets it
25
+ end
26
+
21
27
  # This plugin provides a provisioner called unix_reboot.
22
28
  provisioner 'bib_configure_npm' do
23
29
  # Create a provisioner.
data/lib/bib/vagrant.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative 'version'
2
2
  require_relative 'bib_vagrant'
3
+ require_relative 'bib_vagrant_config'
3
4
  require_relative 'bib_vagrant_npm_provisioner'
4
5
 
5
6
  require 'thor'
data/lib/bib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Bib
2
2
  module Vagrant
3
- VERSION = '0.1.3'
3
+ VERSION = '0.1.4'
4
4
  end
5
5
  end
data/test/config_test.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'bib/bib_vagrant'
2
+ require 'bib/bib_vagrant_config'
2
3
 
3
4
  class ConfigTest < Minitest::Test
4
5
  @@fixture_dir = nil
metadata CHANGED
@@ -1,127 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bib-vagrant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
- - '''tillk'','
8
- - '''fh'','
9
- - '''gilleyj'''
7
+ - "'tillk',"
8
+ - "'fh',"
9
+ - "'gilleyj'"
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-01-13 00:00:00.000000000 Z
13
+ date: 2016-02-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: thor
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - ">="
20
20
  - !ruby/object:Gem::Version
21
21
  version: 0.18.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '>='
26
+ - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: 0.18.1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: colored
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - '>='
33
+ - - ">="
34
34
  - !ruby/object:Gem::Version
35
35
  version: '1.2'
36
36
  type: :runtime
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - '>='
40
+ - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: '1.2'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: rest_client
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - '>='
47
+ - - ">="
48
48
  - !ruby/object:Gem::Version
49
49
  version: '0'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - '>='
54
+ - - ">="
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: json
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '>='
61
+ - - ">="
62
62
  - !ruby/object:Gem::Version
63
63
  version: '0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '>='
68
+ - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: bundler
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ~>
75
+ - - "~>"
76
76
  - !ruby/object:Gem::Version
77
77
  version: '1.5'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ~>
82
+ - - "~>"
83
83
  - !ruby/object:Gem::Version
84
84
  version: '1.5'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: rake
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - '>='
89
+ - - ">="
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - '>='
96
+ - - ">="
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: minitest
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - ~>
103
+ - - "~>"
104
104
  - !ruby/object:Gem::Version
105
105
  version: 5.0.8
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - ~>
110
+ - - "~>"
111
111
  - !ruby/object:Gem::Version
112
112
  version: 5.0.8
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: coveralls
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - '>='
117
+ - - ">="
118
118
  - !ruby/object:Gem::Version
119
119
  version: '0'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - '>='
124
+ - - ">="
125
125
  - !ruby/object:Gem::Version
126
126
  version: '0'
127
127
  description: A rubygem to centralize configuration and setup in every project's Vagrantfile
@@ -132,8 +132,8 @@ executables:
132
132
  extensions: []
133
133
  extra_rdoc_files: []
134
134
  files:
135
- - .gitignore
136
- - .travis.yml
135
+ - ".gitignore"
136
+ - ".travis.yml"
137
137
  - CONTRIBUTING.md
138
138
  - Gemfile
139
139
  - LICENSE.txt
@@ -143,6 +143,7 @@ files:
143
143
  - bib-vagrant.gemspec
144
144
  - bin/bib-vagrant
145
145
  - lib/bib/bib_vagrant.rb
146
+ - lib/bib/bib_vagrant_config.rb
146
147
  - lib/bib/bib_vagrant_npm_provisioner.rb
147
148
  - lib/bib/plugin.rb
148
149
  - lib/bib/vagrant.rb
@@ -158,20 +159,19 @@ require_paths:
158
159
  - lib
159
160
  required_ruby_version: !ruby/object:Gem::Requirement
160
161
  requirements:
161
- - - '>='
162
+ - - ">="
162
163
  - !ruby/object:Gem::Version
163
164
  version: '0'
164
165
  required_rubygems_version: !ruby/object:Gem::Requirement
165
166
  requirements:
166
- - - '>='
167
+ - - ">="
167
168
  - !ruby/object:Gem::Version
168
169
  version: '0'
169
170
  requirements: []
170
171
  rubyforge_project:
171
- rubygems_version: 2.0.14
172
+ rubygems_version: 2.4.8
172
173
  signing_key:
173
174
  specification_version: 4
174
175
  summary: Centralize configuration and setup
175
176
  test_files:
176
177
  - test/config_test.rb
177
- has_rdoc: