chefspec-bootstrap 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_todo.yml +35 -0
- data/Gemfile +5 -0
- data/README.md +6 -7
- data/bin/chefspec-bootstrap +27 -14
- data/chefspec-bootstrap.gemspec +7 -8
- data/lib/api_map.rb +52 -53
- data/lib/chefspec-bootstrap.rb +52 -66
- data/templates/default.erb +2 -1
- metadata +8 -25
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTA2YjJjMWJkYTNmNDU4OGNlOWFmMGVlNDBjMzdiYTRlMjk5OTRkMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Y2I2OTdlNmNkZDYzMTA4MThhMjY3M2U2OGNlOWVjZGRlZTBiZjExMA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NDE1Y2NjYTljNjJlMTA4NjkzZGM2ODU4ZTNjNmFlMTZlMzMyZTFhZWJkNTU4
|
10
|
+
NzM2MDE0N2NiMTI1NGYwZTM0MWQwZDZjN2RhY2EyMGQxZTQ1NDA3YjE2OWI5
|
11
|
+
M2JkMjlhYjExZGQ4ZGVhM2VjNmU1MWE1OGEzNzIxZGE5MzE4N2U=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MTNkYzA3ZmY3MDQxYjk3NmMzZGI5NWJkYWVkZWIwYzI1OWRjMzgxNGQwYjk3
|
14
|
+
NzQxYmE2YWFmZjFkZDEyMTIwNDM3NDQyYzFiMDRkODA1MzZkOWU1N2I5Nzg2
|
15
|
+
ODQyY2FmNGVlNDMxYzcwODc3Zjc5MGNhMmI5MGFmZjc0OGM4NDM=
|
data/.rubocop.yml
ADDED
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# This configuration was generated by `rubocop --auto-gen-config`
|
2
|
+
# on 2014-06-09 15:47:50 -0400 using RuboCop version 0.23.0.
|
3
|
+
# The point is for the user to remove these configuration records
|
4
|
+
# one by one as the offenses are removed from the code base.
|
5
|
+
# Note that changes in the inspected code, or installation of new
|
6
|
+
# versions of RuboCop, may require this file to be generated again.
|
7
|
+
|
8
|
+
# Offense count: 1
|
9
|
+
# Cop supports --auto-correct.
|
10
|
+
Lint/RescueException:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
# Offense count: 2
|
14
|
+
Lint/UselessAssignment:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
# Offense count: 1
|
18
|
+
# Configuration parameters: CountComments.
|
19
|
+
Style/ClassLength:
|
20
|
+
Max: 134
|
21
|
+
|
22
|
+
# Offense count: 2
|
23
|
+
# Configuration parameters: Exclude.
|
24
|
+
Style/FileName:
|
25
|
+
Enabled: false
|
26
|
+
|
27
|
+
# Offense count: 1
|
28
|
+
# Configuration parameters: MaxLineLength.
|
29
|
+
Style/IfUnlessModifier:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
# Offense count: 1
|
33
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
34
|
+
Style/Next:
|
35
|
+
Enabled: false
|
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -3,7 +3,7 @@ chefspec-bootstrap
|
|
3
3
|
|
4
4
|
A command line tool to get started with ChefSpec. Generates spec files for your untested recipes.
|
5
5
|
|
6
|
-
Given a cookbook called `
|
6
|
+
Given a cookbook called `my_cookbook` with a recipe called `my_recipe.rb`:
|
7
7
|
```ruby
|
8
8
|
package "apache2"
|
9
9
|
|
@@ -16,11 +16,11 @@ template "/etc/apache2/sites-available/mysite" do
|
|
16
16
|
end
|
17
17
|
```
|
18
18
|
|
19
|
-
The command line tool will generate the following
|
19
|
+
The command line tool will generate output the following to stdout:
|
20
20
|
```ruby
|
21
21
|
require 'chefspec'
|
22
22
|
|
23
|
-
describe '
|
23
|
+
describe 'my_cookbook::my_recipe' do
|
24
24
|
let(:chef_run) { ChefSpec::Runner.new.converge(described_recipe) }
|
25
25
|
|
26
26
|
it "installs the apache2 package" do
|
@@ -47,15 +47,14 @@ gem install chefspec-bootstrap
|
|
47
47
|
|
48
48
|
Run the command-line tool
|
49
49
|
```
|
50
|
-
chefspec-bootstrap
|
50
|
+
chefspec-bootstrap my_cookbook/recipes/my_recipe.rb
|
51
51
|
```
|
52
52
|
|
53
53
|
Options
|
54
54
|
---
|
55
55
|
```
|
56
|
-
|
57
|
-
|
58
|
-
--template, -t <s>: ERB template file used to generate specs
|
56
|
+
Usage: chefspec-bootstrap <recipe.rb> [options]
|
57
|
+
-t, --template TEMPLATEFILE ERB template file used to generate specs
|
59
58
|
```
|
60
59
|
|
61
60
|
Creating a custom template
|
data/bin/chefspec-bootstrap
CHANGED
@@ -1,23 +1,36 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'rspec/expectations'
|
3
4
|
require 'chefspec-bootstrap'
|
4
|
-
require '
|
5
|
+
require 'optparse'
|
5
6
|
|
6
|
-
|
7
|
+
options = {:template => nil}
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
optparse = OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: chefspec-bootstrap <recipe.rb> [options]"
|
11
|
+
|
12
|
+
opts.on('-t', '--template <file>', "ERB template file used to generate specs") do |t|
|
13
|
+
options[:template] = t
|
14
|
+
end
|
15
|
+
|
16
|
+
opts.on('-s', '--spechelper <file>', "spec_helper.rb file. By default, looks in spec/spec_helper.rb") do |s|
|
17
|
+
options[:spec_helper] = s
|
18
|
+
end
|
19
|
+
|
20
|
+
opts.on('-o', '--output <file>', "File to output spec. Prints to stdout if not specified.") do |o|
|
21
|
+
options[:output_file] = o
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
25
|
+
abort "Recipe not specified!" if ARGV.empty?
|
26
|
+
|
27
|
+
optparse.parse!
|
28
|
+
|
29
|
+
recipe = ARGV[0]
|
16
30
|
bootstrap = ChefSpec::Bootstrap.new(
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
opts[:recursive]
|
31
|
+
recipe,
|
32
|
+
options[:template],
|
33
|
+
options[:spec_helper],
|
34
|
+
options[:output_file]
|
22
35
|
)
|
23
|
-
bootstrap.generate
|
36
|
+
bootstrap.generate
|
data/chefspec-bootstrap.gemspec
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'chefspec-bootstrap'
|
3
|
-
s.version = '0.0.
|
4
|
-
s.date = '2014-
|
5
|
-
s.summary =
|
6
|
-
s.description =
|
7
|
-
s.authors = [
|
3
|
+
s.version = '0.0.4'
|
4
|
+
s.date = '2014-12-01'
|
5
|
+
s.summary = 'Bootstrap your ChefSpec tests.'
|
6
|
+
s.description = 'Automatically generate ChefSpec tests based on your recipes.'
|
7
|
+
s.authors = ['Alexander Meng']
|
8
8
|
s.email = 'alexbmeng@gmail.com'
|
9
|
-
s.files = `git ls-files`.split(
|
9
|
+
s.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
10
10
|
s.homepage = 'http://rubygems.org/gems/chefspec-bootstrap'
|
11
11
|
s.license = 'Apache'
|
12
|
-
s.executables = [
|
12
|
+
s.executables = ['chefspec-bootstrap']
|
13
13
|
s.required_ruby_version = '>= 1.9'
|
14
14
|
|
15
15
|
s.add_dependency 'chefspec', '~> 3.4.0'
|
16
|
-
s.add_dependency 'trollop', '~> 2.0.0'
|
17
16
|
end
|
data/lib/api_map.rb
CHANGED
@@ -1,82 +1,81 @@
|
|
1
1
|
module ChefSpec
|
2
2
|
class APIMap
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
EXPECT_CREATE_IF_MISSING = "create_%{noun}_if_missing"
|
3
|
+
IT_CREATE_IF_MISSING = 'creates the %{adjective} %{noun} if it is missing'
|
4
|
+
IT_MODIFY = 'modifies the %{adjective} %{noun}'
|
5
|
+
IT_TOUCH = 'touches the %{adjective} %{noun}'
|
6
|
+
EXPECT_CREATE_IF_MISSING = 'create_%{noun}_if_missing'
|
8
7
|
|
9
8
|
def map
|
10
9
|
{
|
11
|
-
:
|
12
|
-
:
|
13
|
-
:
|
10
|
+
cookbook_file: {
|
11
|
+
it: { create_if_missing: IT_CREATE_IF_MISSING },
|
12
|
+
expect: { create_if_missing: EXPECT_CREATE_IF_MISSING }
|
14
13
|
},
|
15
|
-
:
|
16
|
-
:
|
14
|
+
deploy: {
|
15
|
+
it: { force_deploy: 'force deploys the %{adjective} %{noun}' }
|
17
16
|
},
|
18
|
-
:
|
19
|
-
:
|
17
|
+
env: {
|
18
|
+
it: { modify: IT_MODIFY }
|
20
19
|
},
|
21
|
-
:
|
22
|
-
:
|
20
|
+
execute: {
|
21
|
+
it: { run: 'executes %{adjective}' }
|
23
22
|
},
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
23
|
+
file: {
|
24
|
+
it: {
|
25
|
+
create_if_missing: IT_CREATE_IF_MISSING,
|
26
|
+
touch: IT_TOUCH
|
28
27
|
},
|
29
|
-
:
|
28
|
+
expect: { create_if_missing: EXPECT_CREATE_IF_MISSING }
|
30
29
|
},
|
31
|
-
:
|
32
|
-
:
|
33
|
-
:
|
34
|
-
:
|
30
|
+
git: {
|
31
|
+
it: {
|
32
|
+
default: '%{verb}s the %{adjective} git repository',
|
33
|
+
checkout: 'checks out the %{adjective} git repository'
|
35
34
|
}
|
36
35
|
},
|
37
|
-
:
|
38
|
-
:
|
36
|
+
group: {
|
37
|
+
it: { modify: IT_MODIFY }
|
39
38
|
},
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
39
|
+
http_request: {
|
40
|
+
it: {
|
41
|
+
default: 'performs a %{verb} HTTP request to %{adjective}'
|
43
42
|
}
|
44
43
|
},
|
45
|
-
:
|
46
|
-
:
|
47
|
-
:
|
44
|
+
ifconfig: {
|
45
|
+
it: {
|
46
|
+
default: '%{verb}s the %{adjective} network interface using %{noun}'
|
48
47
|
}
|
49
48
|
},
|
50
|
-
:
|
51
|
-
:
|
52
|
-
:
|
53
|
-
:
|
49
|
+
registry_key: {
|
50
|
+
it: {
|
51
|
+
create_if_missing: IT_CREATE_IF_MISSING,
|
52
|
+
delete: '%{verb}s the %{adjective} %{noun} value'
|
54
53
|
},
|
55
|
-
:
|
54
|
+
expect: { create_if_missing: EXPECT_CREATE_IF_MISSING }
|
56
55
|
},
|
57
|
-
:
|
58
|
-
:
|
59
|
-
:
|
56
|
+
remote_directory: {
|
57
|
+
it: { create_if_missing: IT_CREATE_IF_MISSING },
|
58
|
+
expect: { create_if_missing: EXPECT_CREATE_IF_MISSING }
|
60
59
|
},
|
61
|
-
:
|
62
|
-
:
|
63
|
-
:
|
64
|
-
:
|
60
|
+
remote_file: {
|
61
|
+
it: {
|
62
|
+
create_if_missing: IT_CREATE_IF_MISSING,
|
63
|
+
touch: IT_TOUCH
|
65
64
|
},
|
66
|
-
:
|
65
|
+
expect: { create_if_missing: EXPECT_CREATE_IF_MISSING }
|
67
66
|
},
|
68
|
-
:
|
69
|
-
:
|
70
|
-
:
|
71
|
-
:
|
67
|
+
subversion: {
|
68
|
+
it: {
|
69
|
+
default: '%{verb}s the %{adjective} svn repository',
|
70
|
+
checkout: 'checks out the %{adjective} svn repository'
|
72
71
|
}
|
73
72
|
},
|
74
|
-
:
|
75
|
-
:
|
76
|
-
:
|
77
|
-
:
|
73
|
+
template: {
|
74
|
+
it: {
|
75
|
+
create_if_missing: IT_CREATE_IF_MISSING,
|
76
|
+
touch: IT_TOUCH
|
78
77
|
},
|
79
|
-
:
|
78
|
+
expect: { create_if_missing: EXPECT_CREATE_IF_MISSING }
|
80
79
|
}
|
81
80
|
}
|
82
81
|
end
|
data/lib/chefspec-bootstrap.rb
CHANGED
@@ -6,76 +6,65 @@ require_relative 'api_map'
|
|
6
6
|
|
7
7
|
module ChefSpec
|
8
8
|
class Bootstrap
|
9
|
-
|
10
|
-
def initialize(cookbooks_dir, cookbooks_path, spec_dir, template_file, recursive)
|
11
|
-
@cookbooks_dir = cookbooks_dir
|
12
|
-
@cookbooks_path = cookbooks_path
|
13
|
-
@spec_dir = spec_dir
|
9
|
+
def initialize(recipe, template_file, spec_helper_file, output_file)
|
14
10
|
@template_file = template_file
|
15
|
-
@
|
11
|
+
@recipe = recipe
|
12
|
+
@spec_helper_file = spec_helper_file || 'spec/spec_helper.rb'
|
13
|
+
@output_file = output_file
|
16
14
|
end
|
17
15
|
|
18
16
|
def setup
|
19
|
-
|
20
|
-
abort "Unable to locate
|
17
|
+
unless File.exist?(@recipe)
|
18
|
+
abort "Unable to locate recipe file (#{@recipe})"
|
21
19
|
end
|
22
20
|
|
23
|
-
|
21
|
+
unless @template_file
|
24
22
|
@template_file = root.join('templates', 'default.erb')
|
25
23
|
end
|
26
24
|
|
27
|
-
|
25
|
+
unless File.exist?(@template_file)
|
28
26
|
abort "Unable to locate template file (#{@template_file})"
|
29
27
|
end
|
30
28
|
|
31
29
|
@api_map = ChefSpec::APIMap.new.map
|
32
30
|
|
33
31
|
begin
|
34
|
-
require File.expand_path(
|
32
|
+
require File.expand_path(@spec_helper_file)
|
35
33
|
@spec_helper = true
|
36
34
|
rescue LoadError
|
37
35
|
@spec_helper = false
|
38
36
|
::RSpec.configure do |config|
|
39
|
-
config.cookbook_path =
|
37
|
+
config.cookbook_path = ['cookbooks']
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
44
42
|
def generate
|
45
|
-
setup
|
46
|
-
|
47
|
-
erb = ERB.new(File.read(@template_file))
|
43
|
+
setup
|
48
44
|
|
49
|
-
|
50
|
-
path, recipe_file = File.split(path)
|
51
|
-
recipe = recipe_file.split('.')[0]
|
52
|
-
cookbook = path.split(File::SEPARATOR)[1]
|
45
|
+
abort 'Output file already exists. Refusing to override.' if @output_file and File.exist?(@output_file)
|
53
46
|
|
54
|
-
|
55
|
-
|
56
|
-
puts filename
|
47
|
+
erb = ERB.new(File.read(@template_file))
|
57
48
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
49
|
+
path, recipe_file = File.split(@recipe)
|
50
|
+
recipe = recipe_file.split('.')[0]
|
51
|
+
cookbook = path.split(File::SEPARATOR)[1]
|
52
|
+
chef_run = get_chef_run(cookbook, recipe)
|
62
53
|
|
63
|
-
|
64
|
-
chef_run = get_chef_run(cookbook, recipe)
|
54
|
+
puts 'Chefspec execution failed. Generating generic spec.' unless chef_run
|
65
55
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
puts " execution failed. Creating empty spec file."
|
70
|
-
end
|
56
|
+
resources = get_resources(chef_run, cookbook, recipe)
|
57
|
+
test_cases = generate_test_cases(resources)
|
58
|
+
spec_helper = @spec_helper
|
71
59
|
|
72
|
-
|
73
|
-
test_cases = generate_test_cases(resources)
|
60
|
+
spec_output = erb.result(binding)
|
74
61
|
|
75
|
-
|
76
|
-
|
77
|
-
|
62
|
+
if @output_file
|
63
|
+
File.open(@output_file, 'w') do |spec_file|
|
64
|
+
spec_file.write(spec_output)
|
78
65
|
end
|
66
|
+
else
|
67
|
+
puts spec_output
|
79
68
|
end
|
80
69
|
end
|
81
70
|
|
@@ -84,19 +73,17 @@ module ChefSpec
|
|
84
73
|
end
|
85
74
|
|
86
75
|
def get_chef_run(cookbook, recipe)
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
return nil
|
91
|
-
end
|
76
|
+
return ChefSpec::Runner.new.converge("#{cookbook}::#{recipe}")
|
77
|
+
rescue Exception => e
|
78
|
+
return nil
|
92
79
|
end
|
93
80
|
|
94
81
|
def get_resource_name(resource)
|
95
|
-
|
82
|
+
resource.name || resource.identity
|
96
83
|
end
|
97
84
|
|
98
85
|
def get_all_resources(chef_run)
|
99
|
-
|
86
|
+
chef_run.resource_collection.all_resources
|
100
87
|
end
|
101
88
|
|
102
89
|
def get_resources(chef_run, cookbook, recipe)
|
@@ -106,7 +93,7 @@ module ChefSpec
|
|
106
93
|
return resources
|
107
94
|
else
|
108
95
|
return resources.select do |resource|
|
109
|
-
resource.cookbook_name == cookbook.to_sym
|
96
|
+
resource.cookbook_name == cookbook.to_sym && resource.recipe_name == recipe
|
110
97
|
end
|
111
98
|
end
|
112
99
|
else
|
@@ -118,7 +105,7 @@ module ChefSpec
|
|
118
105
|
test_cases = []
|
119
106
|
resources.each do |resource|
|
120
107
|
verbs = resource.action
|
121
|
-
|
108
|
+
unless verbs.respond_to?(:each)
|
122
109
|
verbs = [verbs]
|
123
110
|
end
|
124
111
|
|
@@ -126,25 +113,25 @@ module ChefSpec
|
|
126
113
|
adjective = resource.name
|
127
114
|
|
128
115
|
verbs.each do |verb|
|
129
|
-
|
130
|
-
test_cases.push(
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
|
116
|
+
unless verb == :nothing
|
117
|
+
test_cases.push(
|
118
|
+
it: get_it_block(noun, verb, adjective),
|
119
|
+
expect: get_expect_block(noun, verb),
|
120
|
+
name: adjective
|
121
|
+
)
|
135
122
|
end
|
136
123
|
end
|
137
124
|
end
|
138
|
-
|
125
|
+
test_cases
|
139
126
|
end
|
140
127
|
|
141
128
|
def get_it_block(noun, verb, adjective)
|
142
|
-
it =
|
143
|
-
noun_readable = noun.to_s.gsub(
|
144
|
-
verb_readable = verb.to_s.gsub(
|
145
|
-
string_variables = {:
|
129
|
+
it = '%{verb}s the %{adjective} %{noun}'
|
130
|
+
noun_readable = noun.to_s.gsub('_', ' ')
|
131
|
+
verb_readable = verb.to_s.gsub('_', ' ')
|
132
|
+
string_variables = { noun: noun_readable, verb: verb_readable, adjective: adjective }
|
146
133
|
|
147
|
-
if @api_map[noun]
|
134
|
+
if @api_map[noun] && @api_map[noun][:it]
|
148
135
|
if @api_map[noun][:it][verb]
|
149
136
|
it = @api_map[noun][:it][verb]
|
150
137
|
elsif @api_map[noun][:it][:default]
|
@@ -152,14 +139,14 @@ module ChefSpec
|
|
152
139
|
end
|
153
140
|
end
|
154
141
|
|
155
|
-
|
142
|
+
escape_string(it % string_variables)
|
156
143
|
end
|
157
144
|
|
158
145
|
def get_expect_block(noun, verb)
|
159
|
-
expect =
|
160
|
-
string_variables = {:
|
146
|
+
expect = '%{verb}_%{noun}'
|
147
|
+
string_variables = { noun: noun, verb: verb }
|
161
148
|
|
162
|
-
if @api_map[noun]
|
149
|
+
if @api_map[noun] && @api_map[noun][:expect]
|
163
150
|
if @api_map[noun][:expect][verb]
|
164
151
|
expect = @api_map[noun][:expect][verb]
|
165
152
|
elsif @api_map[noun][:expect][:default]
|
@@ -167,12 +154,11 @@ module ChefSpec
|
|
167
154
|
end
|
168
155
|
end
|
169
156
|
|
170
|
-
|
157
|
+
escape_string(expect % string_variables)
|
171
158
|
end
|
172
159
|
|
173
160
|
def escape_string(string)
|
174
|
-
|
161
|
+
string.gsub('\\', '\\\\').gsub("\"", "\\\"")
|
175
162
|
end
|
176
|
-
|
177
163
|
end
|
178
164
|
end
|
data/templates/default.erb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'chefspec'
|
1
|
+
require 'chefspec'<% if spec_helper %>
|
2
|
+
require_relative '../spec_helper'<% end %>
|
2
3
|
|
3
4
|
describe '<%= cookbook %>::<%= recipe %>' do
|
4
5
|
let(:chef_run) { ChefSpec::Runner.new.converge(described_recipe) }<% if not test_cases.empty? %><% test_cases.each do |test_case| %>
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chefspec-bootstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alexander Meng
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-12-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: chefspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,27 +20,10 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 3.4.0
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: trollop
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 2.0.0
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 2.0.0
|
46
27
|
description: Automatically generate ChefSpec tests based on your recipes.
|
47
28
|
email: alexbmeng@gmail.com
|
48
29
|
executables:
|
@@ -51,6 +32,9 @@ extensions: []
|
|
51
32
|
extra_rdoc_files: []
|
52
33
|
files:
|
53
34
|
- .gitignore
|
35
|
+
- .rubocop.yml
|
36
|
+
- .rubocop_todo.yml
|
37
|
+
- Gemfile
|
54
38
|
- LICENSE
|
55
39
|
- README.md
|
56
40
|
- bin/chefspec-bootstrap
|
@@ -61,26 +45,25 @@ files:
|
|
61
45
|
homepage: http://rubygems.org/gems/chefspec-bootstrap
|
62
46
|
licenses:
|
63
47
|
- Apache
|
48
|
+
metadata: {}
|
64
49
|
post_install_message:
|
65
50
|
rdoc_options: []
|
66
51
|
require_paths:
|
67
52
|
- lib
|
68
53
|
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
54
|
requirements:
|
71
55
|
- - ! '>='
|
72
56
|
- !ruby/object:Gem::Version
|
73
57
|
version: '1.9'
|
74
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
59
|
requirements:
|
77
60
|
- - ! '>='
|
78
61
|
- !ruby/object:Gem::Version
|
79
62
|
version: '0'
|
80
63
|
requirements: []
|
81
64
|
rubyforge_project:
|
82
|
-
rubygems_version:
|
65
|
+
rubygems_version: 2.2.2
|
83
66
|
signing_key:
|
84
|
-
specification_version:
|
67
|
+
specification_version: 4
|
85
68
|
summary: Bootstrap your ChefSpec tests.
|
86
69
|
test_files: []
|