chefspec 9.2.1 → 9.3.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.
- checksums.yaml +4 -4
- data/Gemfile +16 -9
- data/Rakefile +60 -52
- data/chefspec.gemspec +20 -20
- data/lib/chefspec.rb +29 -29
- data/lib/chefspec/api.rb +14 -14
- data/lib/chefspec/api/core.rb +3 -3
- data/lib/chefspec/api/described.rb +3 -5
- data/lib/chefspec/api/stubs.rb +2 -2
- data/lib/chefspec/api/stubs_for.rb +12 -12
- data/lib/chefspec/berkshelf.rb +4 -4
- data/lib/chefspec/cacher.rb +2 -2
- data/lib/chefspec/coverage.rb +35 -40
- data/lib/chefspec/coverage/filters.rb +18 -15
- data/lib/chefspec/deprecations.rb +3 -3
- data/lib/chefspec/errors.rb +7 -7
- data/lib/chefspec/expect_exception.rb +2 -1
- data/lib/chefspec/extensions.rb +14 -14
- data/lib/chefspec/extensions/chef/client.rb +3 -3
- data/lib/chefspec/extensions/chef/conditional.rb +2 -1
- data/lib/chefspec/extensions/chef/cookbook/gem_installer.rb +5 -4
- data/lib/chefspec/extensions/chef/cookbook_loader.rb +1 -0
- data/lib/chefspec/extensions/chef/cookbook_uploader.rb +1 -1
- data/lib/chefspec/extensions/chef/data_query.rb +3 -3
- data/lib/chefspec/extensions/chef/lwrp_base.rb +1 -0
- data/lib/chefspec/extensions/chef/provider.rb +8 -5
- data/lib/chefspec/extensions/chef/resource.rb +14 -9
- data/lib/chefspec/extensions/chef/resource/freebsd_package.rb +2 -1
- data/lib/chefspec/extensions/chef/run_context/cookbook_compiler.rb +12 -1
- data/lib/chefspec/extensions/chef/securable.rb +1 -1
- data/lib/chefspec/extensions/ohai/system.rb +1 -1
- data/lib/chefspec/file_cache_path_proxy.rb +3 -3
- data/lib/chefspec/formatter.rb +3 -3
- data/lib/chefspec/librarian.rb +7 -6
- data/lib/chefspec/matchers.rb +9 -9
- data/lib/chefspec/matchers/do_nothing_matcher.rb +15 -15
- data/lib/chefspec/matchers/include_any_recipe_matcher.rb +4 -4
- data/lib/chefspec/matchers/include_recipe_matcher.rb +1 -1
- data/lib/chefspec/matchers/link_to_matcher.rb +2 -2
- data/lib/chefspec/matchers/notifications_matcher.rb +5 -4
- data/lib/chefspec/matchers/render_file_matcher.rb +3 -3
- data/lib/chefspec/matchers/resource_matcher.rb +18 -16
- data/lib/chefspec/mixins/normalize.rb +1 -1
- data/lib/chefspec/policyfile.rb +6 -6
- data/lib/chefspec/renderer.rb +4 -4
- data/lib/chefspec/rspec.rb +1 -1
- data/lib/chefspec/server.rb +1 -1
- data/lib/chefspec/server_methods.rb +8 -8
- data/lib/chefspec/server_runner.rb +10 -10
- data/lib/chefspec/solo_runner.rb +26 -24
- data/lib/chefspec/stubs/command_registry.rb +1 -1
- data/lib/chefspec/stubs/command_stub.rb +1 -1
- data/lib/chefspec/stubs/data_bag_item_registry.rb +1 -1
- data/lib/chefspec/stubs/data_bag_item_stub.rb +1 -1
- data/lib/chefspec/stubs/data_bag_registry.rb +1 -1
- data/lib/chefspec/stubs/data_bag_stub.rb +1 -1
- data/lib/chefspec/stubs/registry.rb +1 -1
- data/lib/chefspec/stubs/search_registry.rb +2 -2
- data/lib/chefspec/stubs/search_stub.rb +2 -2
- data/lib/chefspec/util.rb +7 -7
- data/lib/chefspec/version.rb +1 -1
- data/lib/chefspec/zero_server.rb +3 -3
- data/spec/spec_helper.rb +3 -4
- data/spec/support/hash.rb +3 -3
- data/spec/unit/cacher_spec.rb +17 -17
- data/spec/unit/coverage/filters_spec.rb +16 -16
- data/spec/unit/deprecations_spec.rb +8 -9
- data/spec/unit/errors_spec.rb +15 -15
- data/spec/unit/expect_exception_spec.rb +9 -9
- data/spec/unit/macros_spec.rb +50 -50
- data/spec/unit/matchers/do_nothing_matcher.rb +1 -1
- data/spec/unit/matchers/include_any_recipe_matcher_spec.rb +23 -23
- data/spec/unit/matchers/include_recipe_matcher_spec.rb +15 -15
- data/spec/unit/matchers/link_to_matcher_spec.rb +18 -18
- data/spec/unit/matchers/notifications_matcher_spec.rb +15 -16
- data/spec/unit/matchers/render_file_matcher_spec.rb +26 -26
- data/spec/unit/matchers/resource_matcher_spec.rb +1 -1
- data/spec/unit/matchers/state_attrs_matcher_spec.rb +24 -24
- data/spec/unit/matchers/subscribes_matcher_spec.rb +27 -29
- data/spec/unit/renderer_spec.rb +36 -36
- data/spec/unit/server_runner_spec.rb +6 -6
- data/spec/unit/solo_runner_spec.rb +69 -69
- data/spec/unit/stubs/command_registry_spec.rb +11 -11
- data/spec/unit/stubs/command_stub_spec.rb +26 -26
- data/spec/unit/stubs/data_bag_item_registry_spec.rb +17 -17
- data/spec/unit/stubs/data_bag_item_stub_spec.rb +14 -14
- data/spec/unit/stubs/data_bag_registry_spec.rb +16 -16
- data/spec/unit/stubs/data_bag_stub_spec.rb +13 -13
- data/spec/unit/stubs/registry_spec.rb +9 -9
- data/spec/unit/stubs/search_registry_spec.rb +17 -17
- data/spec/unit/stubs/search_stub_spec.rb +14 -14
- data/spec/unit/stubs/stub_spec.rb +22 -22
- metadata +6 -6
data/lib/chefspec/berkshelf.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
begin
|
2
|
-
require
|
2
|
+
require "berkshelf"
|
3
3
|
rescue LoadError
|
4
|
-
raise ChefSpec::Error::GemLoadError.new(gem:
|
4
|
+
raise ChefSpec::Error::GemLoadError.new(gem: "berkshelf", name: "Berkshelf")
|
5
5
|
end
|
6
6
|
|
7
7
|
module ChefSpec
|
@@ -23,14 +23,14 @@ module ChefSpec
|
|
23
23
|
def setup!
|
24
24
|
# Get the list of Berkshelf options
|
25
25
|
opts = RSpec.configuration.berkshelf_options
|
26
|
-
|
26
|
+
unless opts.is_a?(Hash)
|
27
27
|
raise InvalidBerkshelfOptions(value: opts.inspect)
|
28
28
|
end
|
29
29
|
|
30
30
|
berksfile = ::Berkshelf::Berksfile.from_options(opts)
|
31
31
|
|
32
32
|
# Grab a handle to tmpdir, since Berkshelf 2 modifies it a bit
|
33
|
-
tmpdir = File.join(@tmpdir,
|
33
|
+
tmpdir = File.join(@tmpdir, "cookbooks")
|
34
34
|
|
35
35
|
::Berkshelf.ui.mute do
|
36
36
|
if ::Berkshelf::Berksfile.method_defined?(:vendor)
|
data/lib/chefspec/cacher.rb
CHANGED
@@ -42,8 +42,8 @@ module ChefSpec
|
|
42
42
|
location ||= ancestors.first.metadata[:parent_example_group][:location]
|
43
43
|
|
44
44
|
define_method(name) do
|
45
|
-
key = [location, name.to_s].join(
|
46
|
-
unless @@cache.
|
45
|
+
key = [location, name.to_s].join(".")
|
46
|
+
unless @@cache.key?(Thread.current.object_id)
|
47
47
|
ObjectSpace.define_finalizer(Thread.current, FINALIZER)
|
48
48
|
end
|
49
49
|
@@cache[Thread.current.object_id] ||= {}
|
data/lib/chefspec/coverage.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "coverage/filters"
|
2
2
|
|
3
3
|
module ChefSpec
|
4
4
|
class Coverage
|
@@ -30,14 +30,14 @@ module ChefSpec
|
|
30
30
|
@filters = {}
|
31
31
|
@outputs = []
|
32
32
|
add_output do |report|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
33
|
+
|
34
|
+
erb = Erubis::Eruby.new(File.read(@template))
|
35
|
+
puts erb.evaluate(report)
|
36
|
+
rescue NameError => e
|
37
|
+
raise Error::ErbTemplateParseError.new(original_error: e.message)
|
38
|
+
|
39
39
|
end
|
40
|
-
@template = ChefSpec.root.join(
|
40
|
+
@template = ChefSpec.root.join("templates", "coverage", "human.erb")
|
41
41
|
end
|
42
42
|
|
43
43
|
#
|
@@ -63,17 +63,17 @@ module ChefSpec
|
|
63
63
|
def add_filter(filter = nil, &block)
|
64
64
|
id = "#{filter.inspect}/#{block.inspect}".hash
|
65
65
|
|
66
|
-
@filters[id] = if filter.
|
66
|
+
@filters[id] = if filter.is_a?(Filter)
|
67
67
|
filter
|
68
|
-
elsif filter.
|
68
|
+
elsif filter.is_a?(String)
|
69
69
|
StringFilter.new(filter)
|
70
|
-
elsif filter.
|
70
|
+
elsif filter.is_a?(Regexp)
|
71
71
|
RegexpFilter.new(filter)
|
72
72
|
elsif block
|
73
73
|
BlockFilter.new(block)
|
74
74
|
else
|
75
|
-
raise ArgumentError,
|
76
|
-
|
75
|
+
raise ArgumentError, "Please specify either a string, " \
|
76
|
+
"filter, or block to filter source files with!"
|
77
77
|
end
|
78
78
|
|
79
79
|
true
|
@@ -98,18 +98,14 @@ module ChefSpec
|
|
98
98
|
#
|
99
99
|
# @return [true]
|
100
100
|
#
|
101
|
-
def set_template(file =
|
102
|
-
[
|
103
|
-
ChefSpec.root.join(
|
104
|
-
File.expand_path(file, Dir.pwd)
|
105
|
-
].
|
106
|
-
|
107
|
-
@template = temp
|
108
|
-
return
|
109
|
-
end
|
110
|
-
end
|
111
|
-
raise Error::TemplateNotFound.new(path: file)
|
101
|
+
def set_template(file = "human.erb")
|
102
|
+
@template = [
|
103
|
+
ChefSpec.root.join("templates", "coverage", file),
|
104
|
+
File.expand_path(file, Dir.pwd),
|
105
|
+
].find { |f| File.exist?(f) }
|
106
|
+
raise Error::TemplateNotFound.new(path: file) unless @template
|
112
107
|
end
|
108
|
+
|
113
109
|
#
|
114
110
|
# Add a resource to the resource collection. Only new resources are added
|
115
111
|
# and only resources that match the given filter are covered (which is *
|
@@ -129,9 +125,8 @@ module ChefSpec
|
|
129
125
|
# @param [Chef::Resource] resource
|
130
126
|
#
|
131
127
|
def cover!(resource)
|
132
|
-
|
133
|
-
|
134
|
-
end
|
128
|
+
wrapper = find(resource)
|
129
|
+
wrapper.touch! if wrapper
|
135
130
|
end
|
136
131
|
|
137
132
|
#
|
@@ -166,7 +161,7 @@ module ChefSpec
|
|
166
161
|
report = {}.tap do |h|
|
167
162
|
h[:total] = @collection.size
|
168
163
|
h[:touched] = @collection.count { |_, resource| resource.touched? }
|
169
|
-
h[:coverage] = ((h[:touched]/h[:total].to_f)*100).round(2)
|
164
|
+
h[:coverage] = ((h[:touched] / h[:total].to_f) * 100).round(2)
|
170
165
|
end
|
171
166
|
|
172
167
|
report[:untouched_resources] = @collection.collect do |_, resource|
|
@@ -175,7 +170,7 @@ module ChefSpec
|
|
175
170
|
report[:all_resources] = @collection.values
|
176
171
|
|
177
172
|
@outputs.each do |block|
|
178
|
-
|
173
|
+
instance_exec(report, &block)
|
179
174
|
end
|
180
175
|
|
181
176
|
# Ensure we exit correctly (#351)
|
@@ -208,24 +203,24 @@ module ChefSpec
|
|
208
203
|
"source_file" => source_file,
|
209
204
|
"source_line" => source_line,
|
210
205
|
"touched" => touched?,
|
211
|
-
"resource" => to_s
|
206
|
+
"resource" => to_s,
|
212
207
|
}.to_json
|
213
208
|
end
|
214
209
|
|
215
210
|
def source_file
|
216
211
|
@source_file ||= if @resource.source_line
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
212
|
+
shortname(@resource.source_line.split(":").first)
|
213
|
+
else
|
214
|
+
"Unknown"
|
215
|
+
end
|
221
216
|
end
|
222
217
|
|
223
218
|
def source_line
|
224
219
|
@source_line ||= if @resource.source_line
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
220
|
+
@resource.source_line.split(":", 2).last.to_i
|
221
|
+
else
|
222
|
+
"Unknown"
|
223
|
+
end
|
229
224
|
end
|
230
225
|
|
231
226
|
def touch!
|
@@ -241,8 +236,8 @@ module ChefSpec
|
|
241
236
|
def shortname(file)
|
242
237
|
if file.include?(Dir.pwd)
|
243
238
|
file.split(Dir.pwd, 2).last
|
244
|
-
elsif file.include?(
|
245
|
-
file.split(
|
239
|
+
elsif file.include?("cookbooks")
|
240
|
+
file.split("cookbooks/", 2).last
|
246
241
|
else
|
247
242
|
file
|
248
243
|
end
|
@@ -6,7 +6,7 @@ module ChefSpec
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def matches?
|
9
|
-
raise
|
9
|
+
raise "Must override Filter#matches?"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -17,6 +17,7 @@ module ChefSpec
|
|
17
17
|
class RegexpFilter < Filter
|
18
18
|
def matches?(resource)
|
19
19
|
return true if resource.source_line.nil?
|
20
|
+
|
20
21
|
@filter =~ resource.source_line
|
21
22
|
end
|
22
23
|
end
|
@@ -41,6 +42,7 @@ module ChefSpec
|
|
41
42
|
class BlockFilter < Filter
|
42
43
|
def matches?(resource)
|
43
44
|
return true if resource.source_line.nil?
|
45
|
+
|
44
46
|
@filter.call(resource)
|
45
47
|
end
|
46
48
|
end
|
@@ -54,25 +56,26 @@ module ChefSpec
|
|
54
56
|
@berksfile = berksfile
|
55
57
|
|
56
58
|
@metadatas = if berksfile.respond_to?(:dependencies)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
59
|
+
berksfile.dependencies
|
60
|
+
.select(&:metadata?)
|
61
|
+
.map(&:name)
|
62
|
+
else
|
63
|
+
berksfile.sources.collect do |source|
|
64
|
+
location = source.location
|
65
|
+
if location.respond_to?(:metadata?) && location.metadata?
|
66
|
+
source
|
67
|
+
else
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
end.compact.map(&:name)
|
71
|
+
end
|
70
72
|
end
|
71
73
|
|
72
74
|
def matches?(resource)
|
73
75
|
return true if resource.source_line.nil?
|
76
|
+
|
74
77
|
normalized_source_line = resource.source_line.gsub("\\", "/")
|
75
|
-
normalized_source_line=~ /
|
78
|
+
normalized_source_line =~ %r{cookbooks/(?!#{@metadatas.join('|')})}
|
76
79
|
end
|
77
80
|
end
|
78
81
|
end
|
@@ -7,9 +7,9 @@ module Kernel
|
|
7
7
|
# @param [Array<String>] messages
|
8
8
|
def deprecated(*messages)
|
9
9
|
messages.each do |message|
|
10
|
-
calling_spec = caller.find { |line| line =~ /
|
10
|
+
calling_spec = caller.find { |line| line =~ %r{(/spec)|(_spec\.rb)} }
|
11
11
|
if calling_spec
|
12
|
-
calling_spec =
|
12
|
+
calling_spec = "spec/" + calling_spec.split("/spec/").last
|
13
13
|
warn "[DEPRECATION] #{message} (called from #{calling_spec})"
|
14
14
|
else
|
15
15
|
warn "[DEPRECATION] #{message}"
|
@@ -42,5 +42,5 @@ module ChefSpec
|
|
42
42
|
end
|
43
43
|
|
44
44
|
module ChefSpec::Error
|
45
|
-
class NoConversionError < ChefSpecError;
|
45
|
+
class NoConversionError < ChefSpecError; end
|
46
46
|
end
|
data/lib/chefspec/errors.rb
CHANGED
@@ -2,9 +2,9 @@ module ChefSpec
|
|
2
2
|
module Error
|
3
3
|
class ChefSpecError < StandardError
|
4
4
|
def initialize(options = {})
|
5
|
-
class_name = self.class.to_s.split(
|
5
|
+
class_name = self.class.to_s.split("::").last
|
6
6
|
filename = options.delete(:_template) || Util.underscore(class_name)
|
7
|
-
template = ChefSpec.root.join(
|
7
|
+
template = ChefSpec.root.join("templates", "errors", "#{filename}.erb")
|
8
8
|
|
9
9
|
erb = Erubis::Eruby.new(File.read(template))
|
10
10
|
super erb.evaluate(options)
|
@@ -13,12 +13,12 @@ module ChefSpec
|
|
13
13
|
|
14
14
|
class NotStubbed < ChefSpecError
|
15
15
|
def initialize(options = {})
|
16
|
-
name = self.class.name.to_s.split(
|
17
|
-
type = Util.underscore(name).gsub(
|
18
|
-
klass = Stubs.const_get(name.gsub(
|
19
|
-
stub = klass.new(*options[:args]).and_return(
|
16
|
+
name = self.class.name.to_s.split("::").last
|
17
|
+
type = Util.underscore(name).gsub("_not_stubbed", "")
|
18
|
+
klass = Stubs.const_get(name.gsub("NotStubbed", "") + "Stub")
|
19
|
+
stub = klass.new(*options[:args]).and_return("...").signature
|
20
20
|
|
21
|
-
signature = "#{type}(#{options[:args].map(&:inspect).join(
|
21
|
+
signature = "#{type}(#{options[:args].map(&:inspect).join(", ")})"
|
22
22
|
|
23
23
|
super({
|
24
24
|
type: type,
|
@@ -26,6 +26,7 @@ module ChefSpec
|
|
26
26
|
|
27
27
|
def expected?
|
28
28
|
return false if @matcher.nil?
|
29
|
+
|
29
30
|
exception_matched? && message_matched?
|
30
31
|
end
|
31
32
|
|
@@ -33,7 +34,7 @@ module ChefSpec
|
|
33
34
|
|
34
35
|
def exception_matched?
|
35
36
|
@formatter_exception == @matcher.last_error_for_chefspec ||
|
36
|
-
|
37
|
+
@matcher.last_error_for_chefspec === @formatter_exception
|
37
38
|
end
|
38
39
|
|
39
40
|
def message_matched?
|
data/lib/chefspec/extensions.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "rspec"
|
2
2
|
|
3
3
|
module ChefSpec::Extensions
|
4
4
|
module Chef
|
@@ -6,16 +6,16 @@ module ChefSpec::Extensions
|
|
6
6
|
end
|
7
7
|
|
8
8
|
# STOP! DO NOT ALPHABETIZE!
|
9
|
-
require_relative
|
10
|
-
require_relative
|
11
|
-
require_relative
|
12
|
-
require_relative
|
13
|
-
require_relative
|
14
|
-
require_relative
|
15
|
-
require_relative
|
16
|
-
require_relative
|
17
|
-
require_relative
|
18
|
-
require_relative
|
19
|
-
require_relative
|
20
|
-
require_relative
|
21
|
-
require_relative
|
9
|
+
require_relative "extensions/chef/data_query" # must be before Chef::Resource loads
|
10
|
+
require_relative "extensions/chef/resource" # must come before client extensions or anything that winds up loading resources
|
11
|
+
require_relative "extensions/chef/provider"
|
12
|
+
require_relative "extensions/chef/securable"
|
13
|
+
require_relative "extensions/chef/client"
|
14
|
+
require_relative "extensions/chef/conditional"
|
15
|
+
require_relative "extensions/chef/cookbook_uploader"
|
16
|
+
require_relative "extensions/chef/cookbook/gem_installer"
|
17
|
+
require_relative "extensions/chef/lwrp_base"
|
18
|
+
require_relative "extensions/chef/resource/freebsd_package"
|
19
|
+
require_relative "extensions/chef/run_context/cookbook_compiler"
|
20
|
+
require_relative "extensions/chef/cookbook_loader"
|
21
|
+
require_relative "extensions/ohai/system"
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# Force loading Chef Config to fix a bad dependency tree. See
|
2
2
|
# https://github.com/opscode/chef/issues/2703 for more information.
|
3
|
-
require
|
3
|
+
require "chef/config"
|
4
4
|
|
5
5
|
# Providers has to be included before client... probably a weird
|
6
6
|
# include missing in Chef-land, but we can make sure we get it right anyway.
|
7
|
-
require
|
8
|
-
require
|
7
|
+
require "chef/providers"
|
8
|
+
require "chef/client"
|
9
9
|
|
10
10
|
# @private
|
11
11
|
Chef::Client.prepend(Module.new do
|
@@ -1,9 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "chef/resource/conditional"
|
2
2
|
|
3
3
|
Chef::Resource::Conditional.prepend(Module.new do
|
4
4
|
# @see Chef::Resource::Conditional#evaluate_command
|
5
5
|
def evaluate_command
|
6
6
|
return super unless $CHEFSPEC_MODE
|
7
|
+
|
7
8
|
stub = ChefSpec::Stubs::CommandRegistry.stub_for(@command)
|
8
9
|
|
9
10
|
if stub.nil?
|
@@ -1,9 +1,10 @@
|
|
1
|
-
require
|
1
|
+
require "chef/cookbook/gem_installer"
|
2
2
|
|
3
3
|
Chef::Cookbook::GemInstaller.prepend(Module.new do
|
4
4
|
# Installs the gems into the omnibus gemset.
|
5
5
|
def install
|
6
6
|
return super unless $CHEFSPEC_MODE
|
7
|
+
|
7
8
|
cookbook_gems = Hash.new { |h, k| h[k] = [] }
|
8
9
|
|
9
10
|
cookbook_collection.each do |cookbook_name, cookbook_version|
|
@@ -20,10 +21,10 @@ Chef::Cookbook::GemInstaller.prepend(Module.new do
|
|
20
21
|
private
|
21
22
|
|
22
23
|
def locate_gem(gem_name, gem_requirements)
|
23
|
-
::Gem::Specification
|
24
|
+
::Gem::Specification.find_by_name(gem_name, gem_requirements)
|
24
25
|
rescue ::Gem::MissingSpecError
|
25
|
-
gem_cmd = "gem install #{gem_name} --version '#{gem_requirements.join(
|
26
|
-
gemfile_line = "gem '#{[gem_name, *gem_requirements].join('
|
26
|
+
gem_cmd = "gem install #{gem_name} --version '#{gem_requirements.join(", ")}'"
|
27
|
+
gemfile_line = "gem '#{[gem_name, *gem_requirements].join("', '")}'"
|
27
28
|
warn "No matching version found for '#{gem_name}' in your gem environment.\n" \
|
28
29
|
" - if you are using Chef Workstation, run the following command: \"chef #{gem_cmd}\"\n" \
|
29
30
|
" - if you are using bundler, append \"#{gemfile_line}\" to your Gemfile and run \"bundle install\"\n" \
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "chef/dsl/data_query"
|
2
2
|
|
3
3
|
Chef::DSL::DataQuery.prepend(Module.new do
|
4
4
|
# @see Chef::DSL::DataQuery#search
|
@@ -6,7 +6,7 @@ Chef::DSL::DataQuery.prepend(Module.new do
|
|
6
6
|
return super unless Chef::Config[:solo] && $CHEFSPEC_MODE
|
7
7
|
|
8
8
|
type = args[0]
|
9
|
-
query = args[1] ||
|
9
|
+
query = args[1] || "*:*"
|
10
10
|
stub = ChefSpec::Stubs::SearchRegistry.stub_for(type, query)
|
11
11
|
|
12
12
|
if stub.nil?
|
@@ -14,7 +14,7 @@ Chef::DSL::DataQuery.prepend(Module.new do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
if block
|
17
|
-
Array(stub.result).each {|r| block.call(r) }
|
17
|
+
Array(stub.result).each { |r| block.call(r) }
|
18
18
|
true
|
19
19
|
else
|
20
20
|
stub.result
|