chefspec 8.0.0 → 9.2.1

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
  SHA256:
3
- metadata.gz: 888dff160c4e09262e47271fc25e19e24dfa5415f9c17566d5fab2c3b07d3f38
4
- data.tar.gz: a79eacde94a5abdad1ab8e4530ed95d46255323927fbfe9706873aa7d6d99545
3
+ metadata.gz: d5591af3861eae4ba3b5d9c37d274f38fa0279c9a5d91e2668d923251d1885ae
4
+ data.tar.gz: 36be14ae6da887efee4516070e3b6884e43950a8b9fddbbc28660d1ea7f6c841
5
5
  SHA512:
6
- metadata.gz: 76b576b0e8fd51f067bda1eaca73ebb3bd5f49f0ce366ac4c59d84942b2d1437cead58afc7fd1b0c96e7051e656342e2b2ac9e1d2d3c183953ed8fefba15b79f
7
- data.tar.gz: f5ba63555cde2fb189c53ceedfffd46491744605ea50f8927f85502c8ba480455a69ba397cdc27d1ace387509e95b8c5442b10b411ea50b3d18aaf075c0a5b3d
6
+ metadata.gz: 24e86fab969faea333b44ab9db94663efe783383c37760ce581bd0a088e1f3dc96927dc8bab7624da966d5e60440cf6c97e31a2b56b3c72a89135b0805d17ebc
7
+ data.tar.gz: d6b244cc4207077b59a6f53f343b632fe2550549b4e3778bdbfca9848a510861d7fdbe885bc26556c38ba5d74dbb5d619e1073521a2d0a4da3f7d1bd3b94576d
@@ -25,6 +25,6 @@ Gem::Specification.new do |s|
25
25
 
26
26
  s.add_dependency 'chef', '>= 14'
27
27
  s.add_dependency 'chef-cli'
28
- s.add_dependency 'fauxhai', '>= 6.11'
28
+ s.add_dependency 'fauxhai-ng', '>= 7.5'
29
29
  s.add_dependency 'rspec', '~> 3.0'
30
30
  end
@@ -3,6 +3,7 @@ module ChefSpec
3
3
  autoload :Core, 'chefspec/api/core'
4
4
  autoload :Described, 'chefspec/api/described'
5
5
  autoload :DoNothing, 'chefspec/api/do_nothing'
6
+ autoload :IncludeAnyRecipe, 'chefspec/api/include_any_recipe'
6
7
  autoload :IncludeRecipe, 'chefspec/api/include_recipe'
7
8
  autoload :Link, 'chefspec/api/link'
8
9
  autoload :Notifications, 'chefspec/api/notifications'
@@ -19,6 +20,7 @@ module ChefSpec
19
20
  klass.include(ChefSpec::API::Core)
20
21
  klass.include(ChefSpec::API::Described)
21
22
  klass.include(ChefSpec::API::DoNothing)
23
+ klass.include(ChefSpec::API::IncludeAnyRecipe)
22
24
  klass.include(ChefSpec::API::IncludeRecipe)
23
25
  klass.include(ChefSpec::API::DoNothing)
24
26
  klass.include(ChefSpec::API::RenderFile)
@@ -0,0 +1,24 @@
1
+ module ChefSpec
2
+ module API
3
+ module IncludeAnyRecipe
4
+ #
5
+ # Assert that a Chef run includes any recipe.
6
+ #
7
+ # include_recipe 'apache2::default'
8
+ #
9
+ # The Examples section demonstrates the different ways to test an
10
+ # +include_any_recipe+ directive with ChefSpec.
11
+ #
12
+ # @example Assert the Chef run did not include any recipes
13
+ # expect(chef_run).not_to include_any_recipe
14
+ #
15
+ #
16
+ # @return [ChefSpec::Matchers::IncludeAnyRecipeMatcher]
17
+ #
18
+ def include_any_recipe
19
+ ChefSpec::Matchers::IncludeAnyRecipeMatcher.new
20
+ end
21
+ alias_method :include_any_recipes, :include_any_recipe
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  require "chef/version"
2
- require "mixlib/shellout"
2
+ require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
3
3
 
4
4
  module ChefSpec
5
5
  module API
@@ -35,7 +35,7 @@ module ChefSpec
35
35
  before do
36
36
  allow(StubsFor).to receive(:setup_stubs_for) do |object, type|
37
37
  type_stubs = _chefspec_stubs_for_registry[type]
38
- resource_object = object.is_a?(Chef::Provider) ? object.new_resource : object
38
+ resource_object = object.respond_to?(:new_resource) ? object.new_resource : object
39
39
  stubs = type_stubs[nil] + type_stubs[resource_object.resource_name.to_s] + type_stubs[resource_object.to_s]
40
40
  stubs.each do |stub|
41
41
  instance_exec(object, &stub)
@@ -56,23 +56,25 @@ module ChefSpec
56
56
  # expect(subject.some_method).to eq "asdf"
57
57
  # end
58
58
  # @param target [String, nil] Resource name to inject, or nil for all resources.
59
- # @param current_resource [Boolean] If true, also register stubs for current_resource objects on the same target.
59
+ # @param current_value [Boolean] If true, also register stubs for current_value objects on the same target.
60
60
  # @param block [Proc] A block taking the resource object as a parameter.
61
61
  # @return [void]
62
- def stubs_for_resource(target=nil, current_resource: true, &block)
62
+ def stubs_for_resource(target=nil, current_value: true, current_resource: true, &block)
63
+ current_value = false if !current_resource
63
64
  _chefspec_stubs_for_registry[:resource][target] << block
64
- stubs_for_current_resource(target, &block) if current_resource
65
+ stubs_for_current_value(target, &block) if current_value
65
66
  end
66
67
 
67
- # Register stubs for current_resource objects.
68
+ # Register stubs for current_value objects.
68
69
  #
69
70
  # @see #stubs_for_resource
70
71
  # @param target [String, nil] Resource name to inject, or nil for all resources.
71
72
  # @param block [Proc] A block taking the resource object as a parameter.
72
73
  # @return [void]
73
- def stubs_for_current_resource(target=nil, &block)
74
- _chefspec_stubs_for_registry[:current_resource][target] << block
74
+ def stubs_for_current_value(target=nil, &block)
75
+ _chefspec_stubs_for_registry[:current_value][target] << block
75
76
  end
77
+ alias_method :stubs_for_current_resource, :stubs_for_current_value
76
78
 
77
79
  # Register stubs for provider objects.
78
80
  #
@@ -111,10 +113,11 @@ module ChefSpec
111
113
  before { stubs_for_resource(*args, &block) }
112
114
  end
113
115
 
114
- # (see StubsFor#stubs_for_current_resource)
115
- def stubs_for_current_resource(*args, &block)
116
- before { stubs_for_current_resource(*args, &block) }
116
+ # (see StubsFor#stubs_for_current_value)
117
+ def stubs_for_current_value(*args, &block)
118
+ before { stubs_for_current_value(*args, &block) }
117
119
  end
120
+ alias_method :stubs_for_current_resource, :stubs_for_current_value
118
121
 
119
122
  # (see StubsFor#stubs_for_provider)
120
123
  def stubs_for_provider(*args, &block)
@@ -90,6 +90,26 @@ module ChefSpec
90
90
  @outputs << block
91
91
  end
92
92
 
93
+ #
94
+ # Change the template for reporting of converage analysis.
95
+ #
96
+ # @param [string] path
97
+ # The template file to use for the output of the report
98
+ #
99
+ # @return [true]
100
+ #
101
+ def set_template(file = 'human.erb')
102
+ [
103
+ ChefSpec.root.join('templates', 'coverage', file),
104
+ File.expand_path(file, Dir.pwd)
105
+ ].each do |temp|
106
+ if File.exist?(temp)
107
+ @template = temp
108
+ return
109
+ end
110
+ end
111
+ raise Error::TemplateNotFound.new(path: file)
112
+ end
93
113
  #
94
114
  # Add a resource to the resource collection. Only new resources are added
95
115
  # and only resources that match the given filter are covered (which is *
@@ -18,3 +18,4 @@ require_relative 'extensions/chef/lwrp_base'
18
18
  require_relative 'extensions/chef/resource/freebsd_package'
19
19
  require_relative 'extensions/chef/run_context/cookbook_compiler'
20
20
  require_relative 'extensions/chef/cookbook_loader'
21
+ require_relative 'extensions/ohai/system'
@@ -1,5 +1,5 @@
1
1
  require 'chef/provider'
2
- require 'chefspec/api'
2
+ require_relative '../../api'
3
3
 
4
4
  Chef::Provider.prepend(Module.new do
5
5
  def self.name
@@ -1,6 +1,6 @@
1
1
  require 'chef/resource'
2
2
  require 'chef/version'
3
- require 'chefspec/api'
3
+ require_relative '../../api'
4
4
 
5
5
  #
6
6
  # Three concerns:
@@ -21,7 +21,8 @@ module ChefSpec::Extensions::Chef::Resource
21
21
  # If we're directly inside a `load_current_resource`, this is probably
22
22
  # something like `new_resource.class.new` so we want to call this a current_resource,
23
23
  # Otherwise it's probably a normal resource instantiation.
24
- mode = caller[1].include?("`load_current_resource'") ? :current_resource : :resource
24
+ mode = :resource
25
+ mode = :current_value if caller.any? { |x| x.include?("`load_current_resource'") || x.include?("`load_after_resource'") }
25
26
  ChefSpec::API::StubsFor.setup_stubs_for(self, mode)
26
27
  end
27
28
  end
@@ -33,7 +34,7 @@ module ChefSpec::Extensions::Chef::Resource
33
34
  super.tap do |dup_resource|
34
35
  # We're directly inside a load_current_resource, which is probably via
35
36
  # the load_current_value DSL system, so call this a current resource.
36
- ChefSpec::API::StubsFor.setup_stubs_for(dup_resource, :current_resource) if stack.first.include?("`load_current_resource'")
37
+ ChefSpec::API::StubsFor.setup_stubs_for(dup_resource, :current_value) if caller.any? { |x| x.include?("`load_current_resource'") || x.include?("`load_after_resource'") }
37
38
  end
38
39
  end
39
40
 
@@ -133,7 +134,7 @@ module ChefSpec::Extensions::Chef::Resource
133
134
  super
134
135
  end
135
136
 
136
- def provides(name, *args, &block)
137
+ def provides(name, **options, &block)
137
138
  provides_names << name unless provides_names.include?(name)
138
139
  inject_actions(*allowed_actions)
139
140
  super
@@ -22,6 +22,15 @@ Chef::RunContext::CookbookCompiler.prepend(Module.new do
22
22
  super
23
23
  end
24
24
 
25
+ def load_ohai_plugins_from_cookbook(cookbook)
26
+ return super unless $CHEFSPEC_MODE
27
+ $CHEFSPEC_OHAI_PRELOAD ||= {}
28
+ # Already loaded this once.
29
+ return if $CHEFSPEC_OHAI_PRELOAD[cookbook]
30
+ $CHEFSPEC_OHAI_PRELOAD[cookbook] = true
31
+ super
32
+ end
33
+
25
34
  def load_lwrps_from_cookbook(cookbook)
26
35
  return super unless $CHEFSPEC_MODE
27
36
  $CHEFSPEC_LWRP_PRELOAD ||= {}
@@ -0,0 +1,11 @@
1
+ require 'ohai/system'
2
+
3
+ Ohai::System.prepend(Module.new do
4
+ # If an Ohai segment exists, don't actually pull data in for ohai.
5
+ # (we have fake data for that)
6
+ # @see Ohai::System#run_additional_plugins
7
+ def run_additional_plugins(plugin_path)
8
+ return super unless $CHEFSPEC_MODE
9
+ # noop
10
+ end
11
+ end)
@@ -1,5 +1,5 @@
1
- require 'fileutils'
2
- require 'singleton'
1
+ require 'fileutils' unless defined?(FileUtils)
2
+ require 'singleton' unless defined?(Singleton)
3
3
 
4
4
  module ChefSpec
5
5
  class FileCachePathProxy
@@ -133,6 +133,18 @@ module ChefSpec
133
133
  # Called when LWRPs are finished loading
134
134
  def lwrp_load_complete; end
135
135
 
136
+ # Called when an ohai plugin file loading starts
137
+ def ohai_plugin_load_start(file_count); end
138
+
139
+ # Called when an ohai plugin file has been loaded
140
+ def ohai_plugin_file_loaded(path); end
141
+
142
+ # Called when an ohai plugin file has an error on load.
143
+ def ohai_plugin_file_load_failed(path, exception); end
144
+
145
+ # Called when an ohai plugin file loading has finished
146
+ def ohai_plugin_load_complete; end
147
+
136
148
  # Called before attribute files are loaded
137
149
  def attribute_load_start(attribute_file_count); end
138
150
 
@@ -1,6 +1,7 @@
1
1
  module ChefSpec
2
2
  module Matchers
3
3
  require_relative 'matchers/do_nothing_matcher'
4
+ require_relative 'matchers/include_any_recipe_matcher'
4
5
  require_relative 'matchers/include_recipe_matcher'
5
6
  require_relative 'matchers/link_to_matcher'
6
7
  require_relative 'matchers/notifications_matcher'
@@ -0,0 +1,51 @@
1
+ module ChefSpec::Matchers
2
+ class IncludeAnyRecipeMatcher
3
+ def matches?(runner)
4
+ @runner = runner
5
+ !(loaded_recipes - run_list_recipes).empty?
6
+ end
7
+
8
+ def description
9
+ 'include any recipe'
10
+ end
11
+
12
+ def failure_message
13
+ 'expected to include any recipe'
14
+ end
15
+
16
+ def failure_message_when_negated
17
+ 'expected not to include any recipes'
18
+ end
19
+
20
+ private
21
+
22
+ #
23
+ # The list of run_list recipes on the Chef run (normalized)
24
+ #
25
+ # @return [Array<String>]
26
+ #
27
+ def run_list_recipes
28
+ @runner.run_context.node.run_list.run_list_items.map { |x| with_default(x.name) }
29
+ end
30
+
31
+ #
32
+ # Automatically appends "+::default+" to recipes that need them.
33
+ #
34
+ # @param [String] name
35
+ #
36
+ # @return [String]
37
+ #
38
+ def with_default(name)
39
+ name.include?('::') ? name : "#{name}::default"
40
+ end
41
+
42
+ #
43
+ # The list of loaded recipes on the Chef run (normalized)
44
+ #
45
+ # @return [Array<String>]
46
+ #
47
+ def loaded_recipes
48
+ @runner.run_context.loaded_recipes.map { |name| with_default(name) }
49
+ end
50
+ end
51
+ end
@@ -1,4 +1,4 @@
1
- require "chefspec/solo_runner"
1
+ require_relative "solo_runner"
2
2
 
3
3
  module ChefSpec
4
4
  # As we start to migrate back to only SoloRunner, include this alias for now.
@@ -1,3 +1,3 @@
1
1
  module ChefSpec
2
- VERSION = '8.0.0'
2
+ VERSION = '9.2.1'
3
3
  end
@@ -122,7 +122,7 @@ module ChefSpec
122
122
  require "chef_zero/data_store/memory_store_v2"
123
123
  ChefZero::DataStore::MemoryStoreV2.new
124
124
  when :on_disk
125
- require "tmpdir"
125
+ require "tmpdir" unless defined?(Dir.mktmpdir)
126
126
  require "chef_zero/data_store/raw_file_store"
127
127
  tmpdir = Dir.mktmpdir
128
128
  ChefZero::DataStore::RawFileStore.new(Dir.mktmpdir)
@@ -1,6 +1,11 @@
1
1
  require 'chefspec'
2
2
  require 'support/hash'
3
3
 
4
+
5
+ ChefSpec::Coverage.start! do
6
+ set_template 'table.erb'
7
+ end
8
+
4
9
  RSpec.configure do |config|
5
10
  config.expect_with(:rspec) { |c| c.syntax = :expect }
6
11
  config.filter_run(focus: true)
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe ChefSpec::Matchers::IncludeAnyRecipeMatcher do
4
+ let(:node) { double('Chef::Node', run_list: run_list) }
5
+ let(:run_list) { double('Chef::RunList', run_list_items: run_list_items) }
6
+ let(:run_list_items) { [run_list_item_one] }
7
+ let(:run_list_item_one) { double('Chef::RunList::RunListItem', name: 'one') }
8
+ let(:run_list_item_two) { double('Chef::RunList::RunListItem', name: 'two') }
9
+ let(:loaded_recipes) { %w(one) }
10
+ let(:chef_run) { double('chef run', run_context: { loaded_recipes: loaded_recipes, node: node }) }
11
+
12
+ subject { described_class.new }
13
+
14
+ describe '#failure_message' do
15
+ it 'has the right value' do
16
+ subject.matches?(chef_run)
17
+ expect(subject.failure_message).to eq('expected to include any recipe')
18
+ end
19
+ end
20
+
21
+ describe '#failure_message_when_negated' do
22
+ it 'has the right value' do
23
+ subject.matches?(chef_run)
24
+ expect(subject.failure_message_when_negated).to eq('expected not to include any recipes')
25
+ end
26
+ end
27
+
28
+ describe '#description' do
29
+ it 'has the right value' do
30
+ subject.matches?(chef_run)
31
+ expect(subject.description).to eq('include any recipe')
32
+ end
33
+ end
34
+
35
+ describe '#matches?' do
36
+ context 'when 0 recipes are included' do
37
+ let(:loaded_recipes) { %w(one) }
38
+
39
+ it 'returns false' do
40
+ expect(subject.matches?(chef_run)).to be false
41
+ end
42
+ end
43
+
44
+ context 'when at least one recipe is included' do
45
+ let(:loaded_recipes) { %w(one two) }
46
+
47
+ it 'returns true' do
48
+ expect(subject.matches?(chef_run)).to be true
49
+ end
50
+ end
51
+ end
52
+ end
@@ -98,7 +98,7 @@ describe ChefSpec::SoloRunner do
98
98
  it 'sets the attributes from fauxhai' do
99
99
  expect(hash['os']).to eq('linux')
100
100
  expect(hash['languages']['ruby']['ruby_bin']).to eq('/usr/local/bin/ruby')
101
- expect(hash['os_version']).to match(/4.15.0-.*-.*/) # avoid failing when fauxhai data changes
101
+ expect(hash['os_version']).to match(/5.3.0-.*-.*/) # avoid failing when fauxhai data changes
102
102
  expect(hash['fqdn']).to eq('fauxhai.local')
103
103
  expect(hash['domain']).to eq('local')
104
104
  expect(hash['ipaddress']).to eq('10.0.0.2')
@@ -0,0 +1,22 @@
1
+
2
+ <% if @total == 0 %>
3
+ No Chef resources found, skipping coverage calculation...
4
+ <% else %>
5
+ ChefSpec Coverage report generated...
6
+
7
+ Total Resources: <%= @total %>
8
+ Touched Resources: <%= @touched %>
9
+ Touch Coverage: <%= @coverage %>%
10
+
11
+ <% if @untouched_resources.empty? %>
12
+ You are awesome and so is your test coverage! Have a fantastic day!
13
+
14
+ <% else %>
15
+ Untouched Resources:
16
+
17
+ <% @untouched_resources.each do |resource| %>
18
+ <%= resource.to_s.ljust(32) %> <%= resource.source_file %>:<%= resource.source_line %>
19
+ <% end %>
20
+
21
+ <% end %>
22
+ <% end %>
@@ -0,0 +1,8 @@
1
+ { "resources":[
2
+ <%= @all_resources.map { |resource| resource.to_json }.join(",\n") %>
3
+ ],
4
+ "resource_count": <%= @total %>,
5
+ "resources_touched": <%= @touched %>,
6
+ "resource_coverage": <%= @coverage %>
7
+
8
+ }
@@ -0,0 +1,14 @@
1
+ <%='Touched'.to_s.ljust(8) %> <%='Resource'.to_s.ljust(48) %> File:Line
2
+ <% @all_resources.each do |resource| %>
3
+ <%=resource.touched?.to_s.ljust(8) %> <%= resource.to_s.ljust(48) %> <%= resource.source_file %>:<%= resource.source_line %>
4
+ <% end %>
5
+
6
+ <% if @total == 0 %>
7
+ No Chef resources found, skipping coverage calculation...
8
+ <% else %>
9
+ ChefSpec Coverage report generated...
10
+
11
+ Total Resources: <%= @total %>
12
+ Touched Resources: <%= @touched %>
13
+ Touch Coverage: <%= @coverage %>%
14
+ <% end %>
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chefspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0
4
+ version: 9.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Crump
8
8
  - Seth Vargo
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-16 00:00:00.000000000 Z
12
+ date: 2020-08-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chef
@@ -40,19 +40,19 @@ dependencies:
40
40
  - !ruby/object:Gem::Version
41
41
  version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
- name: fauxhai
43
+ name: fauxhai-ng
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '6.11'
48
+ version: '7.5'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '6.11'
55
+ version: '7.5'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -86,6 +86,7 @@ files:
86
86
  - lib/chefspec/api/core.rb
87
87
  - lib/chefspec/api/described.rb
88
88
  - lib/chefspec/api/do_nothing.rb
89
+ - lib/chefspec/api/include_any_recipe.rb
89
90
  - lib/chefspec/api/include_recipe.rb
90
91
  - lib/chefspec/api/link.rb
91
92
  - lib/chefspec/api/notifications.rb
@@ -118,11 +119,13 @@ files:
118
119
  - lib/chefspec/extensions/chef/resource/freebsd_package.rb
119
120
  - lib/chefspec/extensions/chef/run_context/cookbook_compiler.rb
120
121
  - lib/chefspec/extensions/chef/securable.rb
122
+ - lib/chefspec/extensions/ohai/system.rb
121
123
  - lib/chefspec/file_cache_path_proxy.rb
122
124
  - lib/chefspec/formatter.rb
123
125
  - lib/chefspec/librarian.rb
124
126
  - lib/chefspec/matchers.rb
125
127
  - lib/chefspec/matchers/do_nothing_matcher.rb
128
+ - lib/chefspec/matchers/include_any_recipe_matcher.rb
126
129
  - lib/chefspec/matchers/include_recipe_matcher.rb
127
130
  - lib/chefspec/matchers/link_to_matcher.rb
128
131
  - lib/chefspec/matchers/notifications_matcher.rb
@@ -161,6 +164,7 @@ files:
161
164
  - spec/unit/expect_exception_spec.rb
162
165
  - spec/unit/macros_spec.rb
163
166
  - spec/unit/matchers/do_nothing_matcher.rb
167
+ - spec/unit/matchers/include_any_recipe_matcher_spec.rb
164
168
  - spec/unit/matchers/include_recipe_matcher_spec.rb
165
169
  - spec/unit/matchers/link_to_matcher_spec.rb
166
170
  - spec/unit/matchers/notifications_matcher_spec.rb
@@ -181,6 +185,9 @@ files:
181
185
  - spec/unit/stubs/search_registry_spec.rb
182
186
  - spec/unit/stubs/search_stub_spec.rb
183
187
  - spec/unit/stubs/stub_spec.rb
188
+ - templates/coverage/human.erb
189
+ - templates/coverage/json.erb
190
+ - templates/coverage/table.erb
184
191
  - templates/errors/cookbook_path_not_found.erb
185
192
  - templates/errors/erb_template_parse_error.erb
186
193
  - templates/errors/gem_load_error.erb
@@ -194,7 +201,7 @@ homepage: https://github.com/chefspec/chefspec
194
201
  licenses:
195
202
  - MIT
196
203
  metadata: {}
197
- post_install_message:
204
+ post_install_message:
198
205
  rdoc_options: []
199
206
  require_paths:
200
207
  - lib
@@ -209,8 +216,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
209
216
  - !ruby/object:Gem::Version
210
217
  version: '0'
211
218
  requirements: []
212
- rubygems_version: 3.0.3
213
- signing_key:
219
+ rubygems_version: 3.1.2
220
+ signing_key:
214
221
  specification_version: 4
215
222
  summary: Write RSpec examples and generate coverage reports for Chef recipes!
216
223
  test_files: []