chef-utils 16.1.0 → 16.3.38

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6636b6869cc2e8280fdcb653ff8ea4ba188a110ab906f69ac4a4e2884f30c749
4
- data.tar.gz: 13ea4e87d45ddbf560097d70e54732ed6f23c4bbaa6120f95b7020e4483d5a0a
3
+ metadata.gz: 9f5b96fe6160526b332bbb97dd82753a024e239478257753052287f5a91b2239
4
+ data.tar.gz: 5b8504937acdb70a72818d139c60eb760da04be5c8238b172a9c76a02b945bda
5
5
  SHA512:
6
- metadata.gz: b4275dd4c83fd4f4845d6ff812487d6fe4c4b1c0ad320497b36900feb8d150b301c3cfc25251f152e93bc99f7feab9fd4be770bc312064025e37545f59f190e6
7
- data.tar.gz: 6e916ae726b146fda8d4fda2c6c441c56f98a37b44c5c2a89f0bbdc72670a077d4fc86d5bb157300491a4f8282aabb455b29cb709baf2ce47ea704e0316c9db4
6
+ metadata.gz: dfd59cb093364785edc3ddb3261f792c9d13a6e63cfbf2ef3abaee879a020fcbcf913d47b4a93f6bcb59b77887638cad5342bd93db8bea625d087bfaf2e6afcf
7
+ data.tar.gz: 36faef376d1e3439bcfb743c48aea0b19e466461ee238706429058f11eabcfdf76ebdcf3d396867fe349c5beb78f0853e209e35f5c76a854cd9ff50075ca246a
@@ -1,5 +1,4 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require "chef-utils/version"
5
4
 
@@ -19,6 +19,7 @@ require_relative "chef-utils/dsl/architecture"
19
19
  require_relative "chef-utils/dsl/cloud"
20
20
  require_relative "chef-utils/dsl/introspection"
21
21
  require_relative "chef-utils/dsl/os"
22
+ require_relative "chef-utils/dsl/default_paths"
22
23
  require_relative "chef-utils/dsl/path_sanity"
23
24
  require_relative "chef-utils/dsl/platform"
24
25
  require_relative "chef-utils/dsl/platform_family"
@@ -34,9 +35,9 @@ require_relative "chef-utils/mash"
34
35
  module ChefUtils
35
36
  include ChefUtils::DSL::Architecture
36
37
  include ChefUtils::DSL::Cloud
38
+ include ChefUtils::DSL::DefaultPaths
37
39
  include ChefUtils::DSL::Introspection
38
40
  include ChefUtils::DSL::OS
39
- include ChefUtils::DSL::PathSanity
40
41
  include ChefUtils::DSL::Platform
41
42
  include ChefUtils::DSL::PlatformFamily
42
43
  include ChefUtils::DSL::PlatformVersion
@@ -110,17 +110,17 @@ module ChefUtils
110
110
  # @return [Boolean]
111
111
  #
112
112
  def arm?(node = __getnode)
113
- %w{armhf aarch64 arm64 arch64}.include?(node["kernel"]["machine"])
113
+ %w{armv6l armv7l armhf aarch64 arm64 arch64}.include?(node["kernel"]["machine"])
114
114
  end
115
115
 
116
- # Determine if the current architecture is 32-bit ARM.
116
+ # Determine if the current architecture is 32-bit ARM hard float.
117
117
  #
118
118
  # @since 15.5
119
119
  #
120
120
  # @return [Boolean]
121
121
  #
122
122
  def armhf?(node = __getnode)
123
- %w{armhf}.include?(node["kernel"]["machine"])
123
+ %w{armv6l armv7l armhf}.include?(node["kernel"]["machine"])
124
124
  end
125
125
 
126
126
  # Determine if the current architecture is s390x.
@@ -0,0 +1,59 @@
1
+ #
2
+ # Copyright:: Copyright (c) Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require_relative "../internal"
19
+ require_relative "platform_family"
20
+
21
+ module ChefUtils
22
+ module DSL
23
+ module DefaultPaths
24
+ include Internal
25
+
26
+ # @since 15.5
27
+ def default_paths(env = nil)
28
+ env_path = env ? env["PATH"] : __env_path
29
+ env_path = "" if env_path.nil?
30
+ path_separator = ChefUtils.windows? ? ";" : ":"
31
+ # ensure the Ruby and Gem bindirs are included for omnibus chef installs
32
+ new_paths = env_path.split(path_separator)
33
+ [ __ruby_bindir, __gem_bindir ].compact.each do |path|
34
+ new_paths = [ path ] + new_paths unless new_paths.include?(path)
35
+ end
36
+ __default_paths.each do |path|
37
+ new_paths << path unless new_paths.include?(path)
38
+ end
39
+ new_paths.join(path_separator).encode("utf-8", invalid: :replace, undef: :replace)
40
+ end
41
+
42
+ private
43
+
44
+ def __default_paths
45
+ ChefUtils.windows? ? %w{} : %w{/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin}
46
+ end
47
+
48
+ def __ruby_bindir
49
+ RbConfig::CONFIG["bindir"]
50
+ end
51
+
52
+ def __gem_bindir
53
+ Gem.bindir
54
+ end
55
+
56
+ extend self
57
+ end
58
+ end
59
+ end
@@ -15,42 +15,21 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require_relative "../internal"
19
- require_relative "platform_family"
18
+ require_relative "default_paths"
20
19
 
21
20
  module ChefUtils
22
21
  module DSL
23
22
  module PathSanity
24
- include Internal
23
+ include ChefUtils::DSL::DefaultPaths
25
24
 
26
- # @since 15.5
27
25
  def sanitized_path(env = nil)
28
- env_path = env ? env["PATH"] : __env_path
29
- env_path = "" if env_path.nil?
30
- path_separator = ChefUtils.windows? ? ";" : ":"
31
- # ensure the Ruby and Gem bindirs are included for omnibus chef installs
32
- new_paths = env_path.split(path_separator)
33
- [ ChefUtils::DSL::PathSanity.ruby_bindir, ChefUtils::DSL::PathSanity.gem_bindir ].compact.each do |path|
34
- new_paths = [ path ] + new_paths unless new_paths.include?(path)
35
- end
36
- ChefUtils::DSL::PathSanity.sane_paths.each do |path|
37
- new_paths << path unless new_paths.include?(path)
38
- end
39
- new_paths.join(path_separator).encode("utf-8", invalid: :replace, undef: :replace)
26
+ default_paths(env)
40
27
  end
41
28
 
42
- class << self
43
- def sane_paths
44
- ChefUtils.windows? ? %w{} : %w{/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin}
45
- end
29
+ private
46
30
 
47
- def ruby_bindir
48
- RbConfig::CONFIG["bindir"]
49
- end
50
-
51
- def gem_bindir
52
- Gem.bindir
53
- end
31
+ def __sane_paths
32
+ __default_paths
54
33
  end
55
34
 
56
35
  extend self
@@ -301,7 +301,7 @@ module ChefUtils
301
301
  end
302
302
 
303
303
  # RedHat distros -- fedora and rhel platform_families, nothing else. This is most likely not as useful as the
304
- # "fedora_dervied?" helper.
304
+ # "fedora_derived?" helper.
305
305
  #
306
306
  # @param [Chef::Node] node the node to check
307
307
  # @since 15.5
@@ -25,6 +25,7 @@ module ChefUtils
25
25
  module Service
26
26
  include Internal
27
27
  include TrainHelpers
28
+ include Introspection
28
29
 
29
30
  # Returns if debian's old rc.d manager is installed (not necessarily the primary init system).
30
31
  #
@@ -97,8 +98,8 @@ module ChefUtils
97
98
  file_exist?("/etc/rc.d/#{script}")
98
99
  when :systemd
99
100
  file_exist?("/etc/init.d/#{script}") ||
100
- ChefUtils::DSL::Introspection.has_systemd_service_unit?(script) ||
101
- ChefUtils::DSL::Introspection.has_systemd_unit?(script)
101
+ has_systemd_service_unit?(script) ||
102
+ has_systemd_unit?(script)
102
103
  else
103
104
  raise ArgumentError, "type of service must be one of :initd, :upstart, :xinetd, :etc_rcd, or :systemd"
104
105
  end
@@ -25,7 +25,7 @@ module ChefUtils
25
25
  # Lookup an executable through the systems search PATH. Allows specifying an array
26
26
  # of executables to look for. The first executable that is found, along any path entry,
27
27
  # will be the preferred one and returned first. The extra_path will override any default
28
- # extra_paths which are added (allwing the user to pass an empty array to remove them).
28
+ # extra_paths which are added (allowing the user to pass an empty array to remove them).
29
29
  #
30
30
  # When passed a block the block will be called with the full pathname of any executables
31
31
  # which are found, and the block should return truthy or falsey values to further filter
@@ -34,7 +34,7 @@ module ChefUtils
34
34
  # This is syntactic sugar for `where(...).first`
35
35
  #
36
36
  # This helper can be used in target mode in chef or with train using the appropriate
37
- # wiring extenerally.
37
+ # wiring externally.
38
38
  #
39
39
  # @example Find the most appropriate python executable, searching through the system PATH
40
40
  # plus additionally the "/usr/libexec" directory, which has the dnf libraries
@@ -55,14 +55,14 @@ module ChefUtils
55
55
  # Lookup all the instances of an an executable that can be found through the systems search PATH.
56
56
  # Allows specifying an array of executables to look for. All the instances of the first executable
57
57
  # that is found will be returned first. The extra_path will override any default extra_paths
58
- # which are added (allwing the user to pass an empty array to remove them).
58
+ # which are added (allowing the user to pass an empty array to remove them).
59
59
  #
60
60
  # When passed a block the block will be called with the full pathname of any executables
61
61
  # which are found, and the block should return truthy or falsey values to further filter
62
62
  # the executable based on arbitrary criteria.
63
63
  #
64
64
  # This helper can be used in target mode in chef or with train using the appropriate
65
- # wiring extenerally.
65
+ # wiring externally.
66
66
  #
67
67
  # @example Find all the python executables, searching through the system PATH plus additionally
68
68
  # the "/usr/libexec" directory, which have the dnf libraries installed and available.
@@ -27,7 +27,7 @@ module ChefUtils
27
27
  #
28
28
  # This gem may be used by gems like mixlib-shellout which can be consumed by external non-Chef utilities,
29
29
  # so including brittle code here which depends on the existence of the chef-client will cause broken
30
- # behavior downstream. You must practice defensive coding, and not make assumptions about runnign within chef-client.
30
+ # behavior downstream. You must practice defensive coding, and not make assumptions about running within chef-client.
31
31
  #
32
32
  # Other consumers may mix in the helper classes and then override the methods here and provide their own custom
33
33
  # wiring and override what is provided here. They are marked as private because no downstream user should ever touch
@@ -40,11 +40,18 @@ module ChefUtils
40
40
 
41
41
  private
42
42
 
43
- # FIXME: include a `__config` method so we can wire up Chef::Config automatically or allow other consumers to
44
- # inject a config hash without having to take a direct dep on the chef-config gem
45
-
43
+ # This should be set to a Chef::Node instance or to some Hash/Mash-like configuration object with the same keys. It needs to
44
+ # expose keys like `:os`, `:platform`, `:platform_version` and `:platform_family` at least to be useful. It will automatically
45
+ # pick up a `node` method when mixed into an object that has that as a method (which is the encouraged "public" API to use
46
+ # for dependency injection rather than overriding the method in this case.
47
+ #
48
+ # @return [Hash] hash-like config object
49
+ #
46
50
  # @api private
47
51
  def __getnode(skip_global = false)
52
+ # Software developers should feel free to rely on the default wiring here to the node method by implementing the node method in their
53
+ # own class. For anything more complicated they should completely override the method (overriding the whole method is never wrong and
54
+ # is safer).
48
55
  return node if respond_to?(:node) && node
49
56
 
50
57
  return run_context&.node if respond_to?(:run_context) && run_context&.node
@@ -56,7 +63,10 @@ module ChefUtils
56
63
  nil
57
64
  end
58
65
 
66
+ # Just a helper to pull the ENV["PATH"] in a train-independent way
67
+ #
59
68
  # @api private
69
+ #
60
70
  def __env_path
61
71
  if __transport_connection
62
72
  __transport_connection.run_command("echo $PATH").stdout || ""
@@ -65,13 +75,39 @@ module ChefUtils
65
75
  end
66
76
  end
67
77
 
78
+ # This should be set to a Train::Plugins::Transport instance. You should wire this up to nil for not using a train transport connection.
79
+ #
80
+ # @return [Train::Plugins::Transport]
81
+ #
68
82
  # @api private
83
+ #
69
84
  def __transport_connection
85
+ # Software consumers MUST override this method with their own implementation. The default behavior here is subject to change.
70
86
  return Chef.run_context.transport_connection if defined?(Chef) && Chef.respond_to?(:run_context) && Chef&.run_context&.transport_connection
71
87
 
72
88
  nil
73
89
  end
74
90
 
91
+ # This should be set to Chef::Config or to some Hash/Mash-like configuration object with the same keys. It must not be nil.
92
+ #
93
+ # @return [Hash] hash-like config object
94
+ #
95
+ # @api private
96
+ #
97
+ def __config
98
+ raise NotImplementedError
99
+ end
100
+
101
+ # This should be set to Chef::Log or something that duck-types like it. It must not be nil.
102
+ #
103
+ # @return [Chef::Log] logger-like logging object
104
+ #
105
+ # @api private
106
+ #
107
+ def __log
108
+ raise NotImplementedError
109
+ end
110
+
75
111
  extend self
76
112
  end
77
113
  end
@@ -14,6 +14,6 @@
14
14
  # limitations under the License.
15
15
 
16
16
  module ChefUtils
17
- CHEFUTILS_ROOT = File.expand_path("../..", __FILE__)
18
- VERSION = "16.1.0".freeze
17
+ CHEFUTILS_ROOT = File.expand_path("..", __dir__)
18
+ VERSION = "16.3.38".freeze
19
19
  end
@@ -143,7 +143,7 @@ module ChefUtils
143
143
  begin
144
144
  Gem::Requirement.create(other) =~ parsed_version
145
145
  rescue ArgumentError
146
- # one side of the comparison wasn't parseable
146
+ # one side of the comparison wasn't parsable
147
147
  super
148
148
  end
149
149
  end
@@ -6,7 +6,7 @@ HELPER_MODULES = [
6
6
  ChefUtils::DSL::Cloud,
7
7
  ChefUtils::DSL::Introspection,
8
8
  ChefUtils::DSL::OS,
9
- ChefUtils::DSL::PathSanity,
9
+ ChefUtils::DSL::DefaultPaths,
10
10
  ChefUtils::DSL::Platform,
11
11
  ChefUtils::DSL::PlatformFamily,
12
12
  ChefUtils::DSL::Service,
@@ -131,6 +131,17 @@ RSpec.describe ChefUtils::DSL::Architecture do
131
131
 
132
132
  arch_reports_true_for(:armhf?, :_32_bit?, :arm?)
133
133
  end
134
+ context "on armv6l" do
135
+ let(:arch) { "armv6l" }
136
+
137
+ arch_reports_true_for(:armhf?, :_32_bit?, :arm?)
138
+ end
139
+ context "on armv7l" do
140
+ let(:arch) { "armv7l" }
141
+
142
+ arch_reports_true_for(:armhf?, :_32_bit?, :arm?)
143
+ end
144
+
134
145
  context "on s390" do
135
146
  let(:arch) { "s390" }
136
147
 
@@ -21,6 +21,7 @@ RSpec.describe ChefUtils::DSL::Introspection do
21
21
  class IntrospectionTestClass
22
22
  include ChefUtils::DSL::Introspection
23
23
  attr_accessor :node
24
+
24
25
  def initialize(node)
25
26
  @node = node
26
27
  end
@@ -31,7 +32,7 @@ RSpec.describe ChefUtils::DSL::Introspection do
31
32
  let(:test_instance) { IntrospectionTestClass.new(node) }
32
33
 
33
34
  context "#docker?" do
34
- # FIXME: use a real VividMash for these tests insted of stubbing
35
+ # FIXME: use a real VividMash for these tests instead of stubbing
35
36
  it "is false by default" do
36
37
  expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return(nil)
37
38
  expect(ChefUtils.docker?(node)).to be false
@@ -17,9 +17,9 @@
17
17
 
18
18
  require "spec_helper"
19
19
 
20
- RSpec.describe ChefUtils::DSL::PathSanity do
21
- class PathSanityTestClass
22
- include ChefUtils::DSL::PathSanity
20
+ RSpec.describe ChefUtils::DSL::DefaultPaths do
21
+ class DefaultPathsTestClass
22
+ include ChefUtils::DSL::DefaultPaths
23
23
  end
24
24
 
25
25
  before do
@@ -32,26 +32,26 @@ RSpec.describe ChefUtils::DSL::PathSanity do
32
32
  allow(ChefUtils).to receive(:windows?).and_return(false)
33
33
  end
34
34
 
35
- let(:test_instance) { PathSanityTestClass.new }
35
+ let(:test_instance) { DefaultPathsTestClass.new }
36
36
 
37
37
  it "works with no path" do
38
38
  env = {}
39
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
39
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
40
40
  end
41
41
 
42
42
  it "works with nil path" do
43
43
  env = { "PATH" => nil }
44
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
44
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
45
45
  end
46
46
 
47
47
  it "works with empty path" do
48
48
  env = { "PATH" => "" }
49
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
49
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
50
50
  end
51
51
 
52
- it "appends the sane_paths to the end of the path, preserving any that already exist, in the same order" do
52
+ it "appends the default_paths to the end of the path, preserving any that already exist, in the same order" do
53
53
  env = { "PATH" => "/bin:/opt/app/bin:/sbin" }
54
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/bin:/opt/app/bin:/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin")
54
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/bin:/opt/app/bin:/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin")
55
55
  end
56
56
  end
57
57
 
@@ -60,26 +60,26 @@ RSpec.describe ChefUtils::DSL::PathSanity do
60
60
  allow(ChefUtils).to receive(:windows?).and_return(true)
61
61
  end
62
62
 
63
- let(:test_instance) { PathSanityTestClass.new }
63
+ let(:test_instance) { DefaultPathsTestClass.new }
64
64
 
65
65
  it "works with no path" do
66
66
  env = {}
67
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}")
67
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}")
68
68
  end
69
69
 
70
70
  it "works with nil path" do
71
71
  env = { "PATH" => nil }
72
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}")
72
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}")
73
73
  end
74
74
 
75
75
  it "works with empty path" do
76
76
  env = { "PATH" => "" }
77
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}")
77
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}")
78
78
  end
79
79
 
80
80
  it "prepends to an existing path" do
81
81
  env = { "PATH" => '%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\\' }
82
- expect(test_instance.sanitized_path(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]};%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\")
82
+ expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]};%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\")
83
83
  end
84
84
  end
85
85
  end
@@ -209,7 +209,7 @@ RSpec.describe ChefUtils::DSL::PlatformFamily do
209
209
  end
210
210
 
211
211
  context "node-independent windows APIs" do
212
- if RUBY_PLATFORM =~ /mswin|mingw32|windows/
212
+ if RUBY_PLATFORM.match?(/mswin|mingw32|windows/)
213
213
  it "reports true for :windows_ruby?" do
214
214
  expect(described_class.windows_ruby?).to be true
215
215
  end
@@ -58,6 +58,7 @@ RSpec.describe ChefUtils::DSL::Platform do
58
58
  class ThingWithANode
59
59
  include ChefUtils::DSL::Platform
60
60
  attr_accessor :node
61
+
61
62
  def initialize(node)
62
63
  @node = node
63
64
  end
@@ -69,6 +70,7 @@ RSpec.describe ChefUtils::DSL::Platform do
69
70
  attr_accessor :node
70
71
  end
71
72
  attr_accessor :run_context
73
+
72
74
  def initialize(node)
73
75
  @run_context = RunContext.new
74
76
  run_context.node = node
@@ -78,6 +80,7 @@ RSpec.describe ChefUtils::DSL::Platform do
78
80
  class ThingWithTheDSL
79
81
  include ChefUtils
80
82
  attr_accessor :node
83
+
81
84
  def initialize(node)
82
85
  @node = node
83
86
  end
@@ -78,7 +78,7 @@ RSpec.describe ChefUtils::DSL::Which do
78
78
  end
79
79
 
80
80
  context "with a block" do
81
- test_which("doesnt find it if its false", "foo1", others: [ "/dir1/foo1" ]) do |f|
81
+ test_which("doesn't find it if its false", "foo1", others: [ "/dir1/foo1" ]) do |f|
82
82
  false
83
83
  end
84
84
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 16.1.0
4
+ version: 16.3.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chef Software, Inc
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-15 00:00:00.000000000 Z
11
+ date: 2020-07-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -23,6 +23,7 @@ files:
23
23
  - lib/chef-utils.rb
24
24
  - lib/chef-utils/dsl/architecture.rb
25
25
  - lib/chef-utils/dsl/cloud.rb
26
+ - lib/chef-utils/dsl/default_paths.rb
26
27
  - lib/chef-utils/dsl/introspection.rb
27
28
  - lib/chef-utils/dsl/os.rb
28
29
  - lib/chef-utils/dsl/path_sanity.rb