omnijack 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.travis.yml +6 -0
  4. data/CHANGELOG.md +11 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE.txt +15 -0
  7. data/NOTICE +5 -0
  8. data/README.md +119 -0
  9. data/Rakefile +23 -0
  10. data/features/list.feature +19 -0
  11. data/features/metadata.feature +43 -0
  12. data/features/platforms.feature +23 -0
  13. data/features/step_definitions/list.rb +12 -0
  14. data/features/step_definitions/metadata.rb +20 -0
  15. data/features/step_definitions/platforms.rb +8 -0
  16. data/features/step_definitions/project.rb +20 -0
  17. data/features/support/env.rb +4 -0
  18. data/lib/omnijack/config.rb +67 -0
  19. data/lib/omnijack/list.rb +94 -0
  20. data/lib/omnijack/metadata.rb +244 -0
  21. data/lib/omnijack/platforms.rb +96 -0
  22. data/lib/omnijack/project/metaprojects.rb +38 -0
  23. data/lib/omnijack/project.rb +63 -0
  24. data/lib/omnijack/version.rb +24 -0
  25. data/lib/omnijack.rb +54 -0
  26. data/omnijack.gemspec +37 -0
  27. data/spec/omnijack/config_spec.rb +55 -0
  28. data/spec/omnijack/list_spec.rb +133 -0
  29. data/spec/omnijack/metadata_spec.rb +577 -0
  30. data/spec/omnijack/platforms_spec.rb +132 -0
  31. data/spec/omnijack/project/angry_chef_spec.rb +55 -0
  32. data/spec/omnijack/project/chef_container_spec.rb +55 -0
  33. data/spec/omnijack/project/chef_dk_spec.rb +55 -0
  34. data/spec/omnijack/project/chef_server_spec.rb +55 -0
  35. data/spec/omnijack/project/chef_spec.rb +55 -0
  36. data/spec/omnijack/project_spec.rb +52 -0
  37. data/spec/omnijack_spec.rb +109 -0
  38. data/spec/spec_helper.rb +38 -0
  39. data/spec/support/real_test_data.json +131 -0
  40. data/vendor/chef/LICENSE +201 -0
  41. data/vendor/chef/NOTICE +21 -0
  42. data/vendor/chef/lib/chef/exceptions.rb +353 -0
  43. data/vendor/chef/lib/chef/mixin/params_validate.rb +242 -0
  44. metadata +276 -0
@@ -0,0 +1,132 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../spec_helper'
20
+ require_relative '../../lib/omnijack/platforms'
21
+
22
+ describe Omnijack::Platforms do
23
+ let(:name) { :chef_dk }
24
+ let(:obj) { described_class.new(name) }
25
+
26
+ describe '#method_missing' do
27
+ let(:to_h) { { thing1: 'yup', thing2: 'nope', thing3: 'maybe' } }
28
+
29
+ before(:each) do
30
+ allow_any_instance_of(described_class).to receive(:to_h).and_return(to_h)
31
+ end
32
+
33
+ it 'sets up methods for the platform hash keys' do
34
+ expect(obj.thing1).to eq('yup')
35
+ expect(obj.thing2).to eq('nope')
36
+ expect(obj.thing3).to eq('maybe')
37
+ end
38
+
39
+ it 'raises an exception otherwise' do
40
+ expect { obj.thing4 }.to raise_error(NoMethodError)
41
+ end
42
+ end
43
+
44
+ describe '#[]' do
45
+ let(:to_h) { { thing1: 'yup', thing2: 'nope', thing3: 'maybe' } }
46
+
47
+ before(:each) do
48
+ allow_any_instance_of(described_class).to receive(:to_h).and_return(to_h)
49
+ end
50
+
51
+ it 'returns the correct data' do
52
+ expect(obj[:thing1]).to eq('yup')
53
+ expect(obj[:thing2]).to eq('nope')
54
+ expect(obj[:thing3]).to eq('maybe')
55
+ end
56
+ end
57
+
58
+ describe '#to_h' do
59
+ context 'fake data' do
60
+ let(:raw_data) { '{"thing1": "yup", "thing2": "nope"}' }
61
+
62
+ before(:each) do
63
+ allow_any_instance_of(described_class).to receive(:raw_data)
64
+ .and_return(raw_data)
65
+ end
66
+
67
+ it 'returns the correct result hash' do
68
+ expect(obj.to_h).to eq(thing1: 'yup', thing2: 'nope')
69
+ end
70
+ end
71
+
72
+ context 'real data' do
73
+ let(:obj) { described_class.new(:chef) }
74
+
75
+ it 'returns the expected data' do
76
+ expect(obj.to_h[:el]).to eq('Enterprise Linux')
77
+ end
78
+ end
79
+ end
80
+
81
+ describe '#to_s' do
82
+ let(:raw_data) { 'SOME STUFF' }
83
+
84
+ before(:each) do
85
+ allow_any_instance_of(described_class).to receive(:raw_data)
86
+ .and_return(raw_data)
87
+ end
88
+
89
+ it 'returns the raw HTTP GET string' do
90
+ expect(obj.to_s).to eq(raw_data)
91
+ end
92
+ end
93
+
94
+ describe '#raw_data' do
95
+ let(:read) { '{"thing1": "yup", "thing2": "nope"}' }
96
+ let(:open) { double(read: read) }
97
+
98
+ before(:each) do
99
+ allow_any_instance_of(URI::HTTP).to receive(:open).and_return(open)
100
+ end
101
+
102
+ it 'returns a GET of the API URL' do
103
+ res = obj
104
+ expect(res.send(:raw_data)).to eq(read)
105
+ expect(res.instance_variable_get(:@raw_data)).to eq(read)
106
+ end
107
+ end
108
+
109
+ describe '#api_url' do
110
+ let(:base_url) { 'http://example.com/chef' }
111
+ let(:endpoint) { '/example_platform_names' }
112
+
113
+ before(:each) do
114
+ [:base_url, :endpoint].each do |i|
115
+ allow_any_instance_of(described_class).to receive(i).and_return(send(i))
116
+ end
117
+ end
118
+
119
+ it 'constructs a URL based on base + endpoint' do
120
+ expected = URI.parse('http://example.com/chef/example_platform_names')
121
+ expect(obj.send(:api_url)).to eq(expected)
122
+ end
123
+ end
124
+
125
+ describe '#endpoint' do
126
+ let(:name) { :chef_container }
127
+
128
+ it 'returns the appropriate metadata endpoint' do
129
+ expect(obj.send(:endpoint)).to eq('/chef_container_platform_names')
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,55 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../../spec_helper'
20
+ require_relative '../../../lib/omnijack/project/metaprojects'
21
+
22
+ describe Omnijack::Project::AngryChef do
23
+ let(:args) { nil }
24
+ let(:obj) { described_class.new(args) }
25
+
26
+ describe '#initialize' do
27
+ context 'no additional args' do
28
+ it 'initializes an angry_chef project' do
29
+ res = obj
30
+ expect(res.name).to eq(:angry_chef)
31
+ expect(res.instance_variable_get(:@name)).to eq(:angry_chef)
32
+ end
33
+ end
34
+
35
+ context 'some additional args' do
36
+ let(:args) { { version: '6.6.6', prerelease: true } }
37
+
38
+ it 'holds onto those args' do
39
+ res = obj
40
+ expect(res.args).to eq(args)
41
+ expect(res.instance_variable_get(:@args)).to eq(args)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#name' do
47
+ it 'returns angry_chef' do
48
+ expect(obj.name).to eq(:angry_chef)
49
+ end
50
+
51
+ it 'refuses attempts to override' do
52
+ expect { obj.name('bad') }.to raise_error
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../../spec_helper'
20
+ require_relative '../../../lib/omnijack/project/metaprojects'
21
+
22
+ describe Omnijack::Project::ChefContainer do
23
+ let(:args) { nil }
24
+ let(:obj) { described_class.new(args) }
25
+
26
+ describe '#initialize' do
27
+ context 'no additional args' do
28
+ it 'initializes a chef_container project' do
29
+ res = obj
30
+ expect(res.name).to eq(:chef_container)
31
+ expect(res.instance_variable_get(:@name)).to eq(:chef_container)
32
+ end
33
+ end
34
+
35
+ context 'some additional args' do
36
+ let(:args) { { version: '6.6.6', prerelease: true } }
37
+
38
+ it 'holds onto those args' do
39
+ res = obj
40
+ expect(res.args).to eq(args)
41
+ expect(res.instance_variable_get(:@args)).to eq(args)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#name' do
47
+ it 'returns chef_container' do
48
+ expect(obj.name).to eq(:chef_container)
49
+ end
50
+
51
+ it 'refuses attempts to override' do
52
+ expect { obj.name('bad') }.to raise_error
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../../spec_helper'
20
+ require_relative '../../../lib/omnijack/project/metaprojects'
21
+
22
+ describe Omnijack::Project::ChefDk do
23
+ let(:args) { nil }
24
+ let(:obj) { described_class.new(args) }
25
+
26
+ describe '#initialize' do
27
+ context 'no additional args' do
28
+ it 'initializes a chef_dk project' do
29
+ res = obj
30
+ expect(res.name).to eq(:chef_dk)
31
+ expect(res.instance_variable_get(:@name)).to eq(:chef_dk)
32
+ end
33
+ end
34
+
35
+ context 'some additional args' do
36
+ let(:args) { { version: '6.6.6', prerelease: true } }
37
+
38
+ it 'holds onto those args' do
39
+ res = obj
40
+ expect(res.args).to eq(args)
41
+ expect(res.instance_variable_get(:@args)).to eq(args)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#name' do
47
+ it 'returns chef_dk' do
48
+ expect(obj.name).to eq(:chef_dk)
49
+ end
50
+
51
+ it 'refuses attempts to override' do
52
+ expect { obj.name('bad') }.to raise_error
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../../spec_helper'
20
+ require_relative '../../../lib/omnijack/project/metaprojects'
21
+
22
+ describe Omnijack::Project::ChefServer do
23
+ let(:args) { nil }
24
+ let(:obj) { described_class.new(args) }
25
+
26
+ describe '#initialize' do
27
+ context 'no additional args' do
28
+ it 'initializes a chef_server project' do
29
+ res = obj
30
+ expect(res.name).to eq(:chef_server)
31
+ expect(res.instance_variable_get(:@name)).to eq(:chef_server)
32
+ end
33
+ end
34
+
35
+ context 'some additional args' do
36
+ let(:args) { { version: '6.6.6', prerelease: true } }
37
+
38
+ it 'holds onto those args' do
39
+ res = obj
40
+ expect(res.args).to eq(args)
41
+ expect(res.instance_variable_get(:@args)).to eq(args)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#name' do
47
+ it 'returns chef_server' do
48
+ expect(obj.name).to eq(:chef_server)
49
+ end
50
+
51
+ it 'refuses attempts to override' do
52
+ expect { obj.name('bad') }.to raise_error
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,55 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../../spec_helper'
20
+ require_relative '../../../lib/omnijack/project/metaprojects'
21
+
22
+ describe Omnijack::Project::Chef do
23
+ let(:args) { nil }
24
+ let(:obj) { described_class.new(args) }
25
+
26
+ describe '#initialize' do
27
+ context 'no additional args' do
28
+ it 'initializes a chef project' do
29
+ res = obj
30
+ expect(res.name).to eq(:chef)
31
+ expect(res.instance_variable_get(:@name)).to eq(:chef)
32
+ end
33
+ end
34
+
35
+ context 'some additional args' do
36
+ let(:args) { { version: '6.6.6', prerelease: true } }
37
+
38
+ it 'holds onto those args' do
39
+ res = obj
40
+ expect(res.args).to eq(args)
41
+ expect(res.instance_variable_get(:@args)).to eq(args)
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '#name' do
47
+ it 'returns chef' do
48
+ expect(obj.name).to eq(:chef)
49
+ end
50
+
51
+ it 'refuses attempts to override' do
52
+ expect { obj.name('bad') }.to raise_error
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,52 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative '../spec_helper'
20
+ require_relative '../../lib/omnijack/project'
21
+
22
+ describe Omnijack::Project do
23
+ let(:args) { nil }
24
+ let(:obj) { described_class.new(:chef_dk, args) }
25
+
26
+ describe '#list' do
27
+ it 'returns a List object' do
28
+ res = obj
29
+ [res.list, res.instance_variable_get(:@list)].each do |i|
30
+ expect(i).to be_an_instance_of(Omnijack::List)
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '#metadata' do
36
+ it 'returns a Metadata object' do
37
+ res = obj
38
+ [res.metadata, res.instance_variable_get(:@metadata)].each do |i|
39
+ expect(i).to be_an_instance_of(Omnijack::Metadata)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#platforms' do
45
+ it 'returns a Platforms object' do
46
+ res = obj
47
+ [res.platforms, res.instance_variable_get(:@platforms)].each do |i|
48
+ expect(i).to be_an_instance_of(Omnijack::Platforms)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,109 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+ require_relative 'spec_helper'
20
+ require_relative '../lib/omnijack'
21
+
22
+ describe Omnijack do
23
+ let(:name) { :chef_dk }
24
+ let(:args) { nil }
25
+ let(:obj) { described_class.new(name, args) }
26
+
27
+ describe '#initialize' do
28
+ shared_examples_for 'any context' do
29
+ it 'sets the project name' do
30
+ expect(obj.name).to eq(:chef_dk)
31
+ expect(obj.instance_variable_get(:@name)).to eq(:chef_dk)
32
+ end
33
+ end
34
+
35
+ context 'no args provided' do
36
+ let(:obj) { described_class.new(name) }
37
+
38
+ it_behaves_like 'any context'
39
+
40
+ it 'holds an empty hash for the args' do
41
+ expect(obj.args).to eq({})
42
+ expect(obj.instance_variable_get(:@args)).to eq({})
43
+ end
44
+ end
45
+
46
+ context 'some additional args' do
47
+ let(:args) { { pants: 'off', shorts: 'on' } }
48
+
49
+ it_behaves_like 'any context'
50
+
51
+ it 'holds onto the args' do
52
+ expect(obj.args).to eq(args)
53
+ expect(obj.instance_variable_get(:@args)).to eq(args)
54
+ end
55
+ end
56
+
57
+ context 'a base_url arg provided' do
58
+ let(:args) { { base_url: 'https://example.com' } }
59
+
60
+ it 'sets the given arg' do
61
+ expect(obj.send(:base_url)).to eq(args[:base_url])
62
+ expect(obj.instance_variable_get(:@base_url)).to eq(args[:base_url])
63
+ end
64
+ end
65
+ end
66
+
67
+ describe '#base_url' do
68
+ context 'no argument provided' do
69
+ it 'uses the default' do
70
+ res = obj
71
+ expected = 'https://www.getchef.com/chef'
72
+ expect(res.base_url).to eq(expected)
73
+ expect(res.instance_variable_get(:@base_url)).to eq(expected)
74
+ end
75
+ end
76
+
77
+ context 'a valid argument provided' do
78
+ let(:obj) do
79
+ o = super()
80
+ o.base_url('http://example.com') && o
81
+ end
82
+
83
+ it 'uses the provided arg' do
84
+ expect(obj.base_url).to eq('http://example.com')
85
+ expect(obj.instance_variable_get(:@base_url))
86
+ .to eq('http://example.com')
87
+ end
88
+ end
89
+
90
+ context 'an invalid argument provided' do
91
+ let(:obj) do
92
+ o = super()
93
+ o.base_url(:hello) && o
94
+ end
95
+
96
+ it 'raises an exception' do
97
+ expect { obj }.to raise_error(Chef::Exceptions::ValidationFailed)
98
+ end
99
+ end
100
+ end
101
+
102
+ describe '#name' do
103
+ let(:name) { 'chef_container' }
104
+
105
+ it 'returns the project name, symbolized' do
106
+ expect(obj.name).to eq(:chef_container)
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,38 @@
1
+ # Encoding: UTF-8
2
+ #
3
+ # Author:: Jonathan Hartman (<j@p4nt5.com>)
4
+ #
5
+ # Copyright (C) 2014, Jonathan Hartman
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ require 'net/http'
21
+ require 'rspec'
22
+ require 'simplecov'
23
+ require 'simplecov-console'
24
+ require 'coveralls'
25
+
26
+ RSpec.configure do |c|
27
+ c.color = true
28
+ end
29
+
30
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
31
+ Coveralls::SimpleCov::Formatter,
32
+ SimpleCov::Formatter::HTMLFormatter,
33
+ SimpleCov::Formatter::Console
34
+ ]
35
+ SimpleCov.minimum_coverage 90
36
+ SimpleCov.start do
37
+ add_filter 'vendor/*'
38
+ end