chefspec-bootstrap 0.0.3 → 0.0.4
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.
- 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: []
|