puppet-debugger 0.19.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +10 -27
  3. data/.rubocop.yml +64 -232
  4. data/.rubocop_todo.yml +89 -147
  5. data/CHANGELOG.md +12 -1
  6. data/Gemfile +7 -5
  7. data/README.md +4 -5
  8. data/Rakefile +11 -12
  9. data/bin/pdb +1 -1
  10. data/lib/awesome_print/ext/awesome_puppet.rb +10 -8
  11. data/lib/plugins/puppet-debugger/input_responders/benchmark.rb +5 -4
  12. data/lib/plugins/puppet-debugger/input_responders/classes.rb +4 -1
  13. data/lib/plugins/puppet-debugger/input_responders/classification.rb +4 -2
  14. data/lib/plugins/puppet-debugger/input_responders/commands.rb +18 -18
  15. data/lib/plugins/puppet-debugger/input_responders/datatypes.rb +11 -5
  16. data/lib/plugins/puppet-debugger/input_responders/environment.rb +4 -2
  17. data/lib/plugins/puppet-debugger/input_responders/exit.rb +4 -2
  18. data/lib/plugins/puppet-debugger/input_responders/facterdb_filter.rb +4 -2
  19. data/lib/plugins/puppet-debugger/input_responders/facts.rb +4 -2
  20. data/lib/plugins/puppet-debugger/input_responders/functions.rb +34 -32
  21. data/lib/plugins/puppet-debugger/input_responders/help.rb +4 -2
  22. data/lib/plugins/puppet-debugger/input_responders/krt.rb +4 -2
  23. data/lib/plugins/puppet-debugger/input_responders/play.rb +22 -24
  24. data/lib/plugins/puppet-debugger/input_responders/reset.rb +5 -3
  25. data/lib/plugins/puppet-debugger/input_responders/resources.rb +5 -2
  26. data/lib/plugins/puppet-debugger/input_responders/set.rb +34 -32
  27. data/lib/plugins/puppet-debugger/input_responders/stacktrace.rb +23 -0
  28. data/lib/plugins/puppet-debugger/input_responders/types.rb +6 -2
  29. data/lib/plugins/puppet-debugger/input_responders/vars.rb +6 -5
  30. data/lib/plugins/puppet-debugger/input_responders/whereami.rb +5 -3
  31. data/lib/puppet-debugger/cli.rb +118 -91
  32. data/lib/puppet-debugger/code/code_file.rb +13 -14
  33. data/lib/puppet-debugger/code/code_range.rb +5 -3
  34. data/lib/puppet-debugger/code/loc.rb +1 -1
  35. data/lib/puppet-debugger/debugger_code.rb +2 -0
  36. data/lib/puppet-debugger/hooks.rb +15 -16
  37. data/lib/puppet-debugger/input_responder_plugin.rb +54 -52
  38. data/lib/puppet-debugger/monkey_patches.rb +4 -1
  39. data/lib/puppet-debugger/plugin_test_helper.rb +9 -8
  40. data/lib/puppet-debugger/support.rb +27 -17
  41. data/lib/puppet-debugger/support/environment.rb +4 -4
  42. data/lib/puppet-debugger/support/errors.rb +25 -27
  43. data/lib/puppet-debugger/support/facts.rb +5 -5
  44. data/lib/puppet-debugger/support/node.rb +4 -5
  45. data/lib/puppet-debugger/support/scope.rb +19 -17
  46. data/lib/puppet-debugger/trollop.rb +38 -31
  47. data/lib/puppet-debugger/version.rb +1 -1
  48. data/lib/puppet/application/debugger.rb +141 -135
  49. data/output.json +1 -0
  50. data/puppet-debugger.gemspec +17 -16
  51. data/spec/awesome_print/ext/awesome_puppet_spec.rb +30 -30
  52. data/spec/fixtures/sample_start_debugger.pp +3 -2
  53. data/spec/hooks_spec.rb +33 -35
  54. data/spec/input_responder_plugin_spec.rb +7 -6
  55. data/spec/input_responders/benchmark_spec.rb +3 -1
  56. data/spec/input_responders/classes_spec.rb +12 -10
  57. data/spec/input_responders/classification_spec.rb +4 -2
  58. data/spec/input_responders/commands_spec.rb +2 -0
  59. data/spec/input_responders/datatypes_spec.rb +4 -3
  60. data/spec/input_responders/environment_spec.rb +2 -0
  61. data/spec/input_responders/exit_spec.rb +9 -11
  62. data/spec/input_responders/facterdb_filter_spec.rb +2 -0
  63. data/spec/input_responders/facts_spec.rb +2 -0
  64. data/spec/input_responders/functions_spec.rb +30 -28
  65. data/spec/input_responders/help_spec.rb +4 -2
  66. data/spec/input_responders/krt_spec.rb +3 -1
  67. data/spec/input_responders/play_spec.rb +10 -20
  68. data/spec/input_responders/reset_spec.rb +2 -0
  69. data/spec/input_responders/resources_spec.rb +3 -1
  70. data/spec/input_responders/set_spec.rb +3 -1
  71. data/spec/input_responders/stacktrace_spec.rb +15 -0
  72. data/spec/input_responders/types_spec.rb +2 -0
  73. data/spec/input_responders/vars_spec.rb +4 -4
  74. data/spec/input_responders/whereami_spec.rb +2 -0
  75. data/spec/pdb_spec.rb +0 -9
  76. data/spec/puppet/application/debugger_spec.rb +18 -19
  77. data/spec/puppet_debugger_spec.rb +81 -84
  78. data/spec/remote_node_spec.rb +1 -5
  79. data/spec/spec_helper.rb +22 -18
  80. data/spec/support_spec.rb +3 -5
  81. data/test_matrix.rb +1 -1
  82. metadata +48 -31
@@ -1,4 +1,3 @@
1
-
2
1
  # frozen_string_literal: true
3
2
 
4
3
  class CodeFile
@@ -10,18 +9,18 @@ class CodeFile
10
9
  # List of all supported languages.
11
10
  # @return [Hash]
12
11
  EXTENSIONS = {
13
- %w[.py] => :python,
14
- %w[.js] => :javascript,
15
- %w[.pp] => :puppet,
16
- %w[.css] => :css,
17
- %w[.xml] => :xml,
18
- %w[.php] => :php,
19
- %w[.html] => :html,
20
- %w[.diff] => :diff,
21
- %w[.java] => :java,
22
- %w[.json] => :json,
23
- %w[.c .h] => :c,
24
- %w[.rhtml] => :rhtml,
12
+ %w[.py] => :python,
13
+ %w[.js] => :javascript,
14
+ %w[.pp] => :puppet,
15
+ %w[.css] => :css,
16
+ %w[.xml] => :xml,
17
+ %w[.php] => :php,
18
+ %w[.html] => :html,
19
+ %w[.diff] => :diff,
20
+ %w[.java] => :java,
21
+ %w[.json] => :json,
22
+ %w[.c .h] => :c,
23
+ %w[.rhtml] => :rhtml,
25
24
  %w[.yaml .yml] => :yaml,
26
25
  %w[.cpp .hpp .cc .h cxx] => :cpp,
27
26
  %w[.rb .ru .irbrc .gemspec .pryrc] => :ruby
@@ -96,4 +95,4 @@ class CodeFile
96
95
  def from_load_path
97
96
  $LOAD_PATH.map { |path| File.expand_path(@filename, path) }
98
97
  end
99
- end
98
+ end
@@ -47,13 +47,15 @@ class DebuggerCode
47
47
 
48
48
  # @return [Integer]
49
49
  def find_start_index(lines)
50
- return start_line if start_line < 0
50
+ return start_line if start_line.negative?
51
+
51
52
  lines.index { |loc| loc.lineno >= start_line } || lines.length
52
53
  end
53
54
 
54
55
  # @return [Integer]
55
56
  def find_end_index(lines)
56
- return end_line if end_line < 0
57
+ return end_line if end_line.negative?
58
+
57
59
  (lines.index { |loc| loc.lineno > end_line } || 0) - 1
58
60
  end
59
61
 
@@ -66,4 +68,4 @@ class DebuggerCode
66
68
  @start_line = start_line.first
67
69
  end
68
70
  end
69
- end
71
+ end
@@ -76,4 +76,4 @@ class DebuggerCode
76
76
  tuple[0] = "#{' ' * distance}#{line}"
77
77
  end
78
78
  end
79
- end
79
+ end
@@ -164,6 +164,7 @@ class DebuggerCode
164
164
  # @return [Code]
165
165
  def grep(pattern)
166
166
  return self unless pattern
167
+
167
168
  pattern = Regexp.new(pattern)
168
169
 
169
170
  select do |loc|
@@ -238,6 +239,7 @@ class DebuggerCode
238
239
 
239
240
  def add_file_reference
240
241
  return "From inline code: \n" unless filename
242
+
241
243
  "From file: #{File.basename(filename)}\n"
242
244
  end
243
245
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'puppet-debugger/support/errors'
2
4
 
3
5
  module PuppetDebugger
@@ -18,7 +20,7 @@ module PuppetDebugger
18
20
  end
19
21
 
20
22
  # Ensure that duplicates have their @hooks object.
21
- def initialize_copy(orig)
23
+ def initialize_copy(_orig)
22
24
  hooks_dup = @hooks.dup
23
25
  @hooks.each do |k, v|
24
26
  hooks_dup[k] = v.dup
@@ -37,8 +39,9 @@ module PuppetDebugger
37
39
  # @return [PuppetDebugger::Hooks] The receiver.
38
40
  # @see {#merge}
39
41
  def merge!(other)
40
- @hooks.merge!(other.dup.hooks) do |key, array, other_array|
41
- temp_hash, output = {}, []
42
+ @hooks.merge!(other.dup.hooks) do |_key, array, other_array|
43
+ temp_hash = {}
44
+ output = []
42
45
 
43
46
  (array + other_array).reverse_each do |pair|
44
47
  temp_hash[pair.first] ||= output.unshift(pair)
@@ -57,7 +60,7 @@ module PuppetDebugger
57
60
  # @return [PuppetDebugger::Hooks] a new `PuppetDebugger::Hooks` instance containing a merge of the
58
61
  # contents of two `PuppetDebugger::Hooks` instances.
59
62
  def merge(other)
60
- self.dup.tap do |v|
63
+ dup.tap do |v|
61
64
  v.merge!(other)
62
65
  end
63
66
  end
@@ -68,7 +71,7 @@ module PuppetDebugger
68
71
  # @param [#call] callable The callable.
69
72
  # @yield The block to use as the callable (if no `callable` provided).
70
73
  # @return [PuppetDebugger::Hooks] The receiver.
71
- def add_hook(event_name, hook_name, callable=nil, &block)
74
+ def add_hook(event_name, hook_name, callable = nil, &block)
72
75
  event_name = event_name.to_s
73
76
 
74
77
  # do not allow duplicates, but allow multiple `nil` hooks
@@ -77,12 +80,10 @@ module PuppetDebugger
77
80
  raise ArgumentError, "Hook with name '#{hook_name}' already defined!"
78
81
  end
79
82
 
80
- if !block && !callable
81
- raise ArgumentError, "Must provide a block or callable."
82
- end
83
+ raise ArgumentError, 'Must provide a block or callable.' if !block && !callable
83
84
 
84
85
  # ensure we only have one anonymous hook
85
- @hooks[event_name].delete_if { |h, k| h.nil? } if hook_name.nil?
86
+ @hooks[event_name].delete_if { |h, _k| h.nil? } if hook_name.nil?
86
87
 
87
88
  if block
88
89
  @hooks[event_name] << [hook_name, block]
@@ -98,7 +99,7 @@ module PuppetDebugger
98
99
  # @param [Array] args The arguments to pass to each hook function.
99
100
  # @return [Object] The return value of the last executed hook.
100
101
  def exec_hook(event_name, *args, &block)
101
- @hooks[event_name.to_s].map do |hook_name, callable|
102
+ @hooks[event_name.to_s].map do |_hook_name, callable|
102
103
  begin
103
104
  callable.call(*args, &block)
104
105
  rescue PuppetDebugger::Exception::Error, ::RuntimeError => e
@@ -118,10 +119,10 @@ module PuppetDebugger
118
119
  # @param [Symbol] hook_name The name of the hook
119
120
  # @return [#call] a specific hook for a given event.
120
121
  def get_hook(event_name, hook_name)
121
- hook = @hooks[event_name.to_s].find do |current_hook_name, callable|
122
+ hook = @hooks[event_name.to_s].find do |current_hook_name, _callable|
122
123
  current_hook_name == hook_name
123
124
  end
124
- hook.last if hook
125
+ hook&.last
125
126
  end
126
127
 
127
128
  # @param [Symbol] event_name The name of the event.
@@ -167,8 +168,6 @@ module PuppetDebugger
167
168
 
168
169
  protected
169
170
 
170
- def hooks
171
- @hooks
172
- end
171
+ attr_reader :hooks
173
172
  end
174
- end
173
+ end
@@ -1,68 +1,70 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'singleton'
2
4
  require 'puppet-debugger/support/errors'
3
5
  require 'forwardable'
4
6
 
5
7
  module PuppetDebugger
6
- class InputResponderPlugin
7
- include Singleton
8
- extend Forwardable
9
- attr_accessor :debugger
10
- def_delegators :debugger, :scope, :node, :environment, :loaders, :puppet_environment,
11
- :add_hook, :handle_input, :delete_hook, :puppet_lib_dir
12
- def_delegators :scope, :compiler, :catalog
13
- def_delegators :node, :facts
8
+ class InputResponderPlugin
9
+ include Singleton
10
+ extend Forwardable
11
+ attr_accessor :debugger
12
+ def_delegators :debugger, :scope, :node, :environment, :loaders, :puppet_environment,
13
+ :add_hook, :handle_input, :delete_hook, :puppet_lib_dir
14
+ def_delegators :scope, :compiler, :catalog
15
+ def_delegators :node, :facts
14
16
 
15
- # @return [Array[String]] an array of words the user can call the command with
16
- def self.command_words
17
- self::COMMAND_WORDS
18
- end
17
+ # @return [Array[String]] an array of words the user can call the command with
18
+ def self.command_words
19
+ self::COMMAND_WORDS
20
+ end
19
21
 
20
- def modules_paths
21
- debugger.puppet_environment.full_modulepath
22
- end
22
+ def modules_paths
23
+ debugger.puppet_environment.full_modulepath
24
+ end
23
25
 
24
- # @return [String] a summary of the plugin
25
- def self.summary
26
- self::SUMMARY
27
- end
26
+ # @return [String] a summary of the plugin
27
+ def self.summary
28
+ self::SUMMARY
29
+ end
28
30
 
29
- # @return [String] the name of the command group the plugin is in
30
- def self.command_group
31
- self::COMMAND_GROUP
32
- end
31
+ # @return [String] the name of the command group the plugin is in
32
+ def self.command_group
33
+ self::COMMAND_GROUP
34
+ end
33
35
 
34
- # @return [Hash] a has of all the details of the plugin
35
- def self.details
36
- { words: command_words, summary: summary, group: command_group }
37
- end
36
+ # @return [Hash] a has of all the details of the plugin
37
+ def self.details
38
+ { words: command_words, summary: summary, group: command_group }
39
+ end
38
40
 
39
- # @param buffer_words [Array[String]] a array of words the user has typed in
40
- # @return Array[String] - an array of words that will help the user with word completion
41
- # By default this returns an empty array, your plugin can chose to override this method in order to
42
- # provide the user with a list of key words based on the user's input
43
- def self.command_completion(buffer_words)
44
- []
45
- end
41
+ # @param buffer_words [Array[String]] a array of words the user has typed in
42
+ # @return Array[String] - an array of words that will help the user with word completion
43
+ # By default this returns an empty array, your plugin can chose to override this method in order to
44
+ # provide the user with a list of key words based on the user's input
45
+ def self.command_completion(_buffer_words)
46
+ []
47
+ end
46
48
 
47
- # @param args [Array[String]] - an array of arguments to pass to the plugin command
48
- # @param debugger PuppetDebugger::Cli - an instance of the PuppetDebugger::Cli object
49
- # @return the output of the plugin command
50
- def self.execute(args = [], debugger)
51
- instance.debugger = debugger
52
- instance.run(args)
53
- end
49
+ # @param args [Array[String]] - an array of arguments to pass to the plugin command
50
+ # @param debugger PuppetDebugger::Cli - an instance of the PuppetDebugger::Cli object
51
+ # @return the output of the plugin command
52
+ def self.execute(args = [], debugger)
53
+ instance.debugger = debugger
54
+ instance.run(args)
55
+ end
54
56
 
55
- # @param args [Array[String]] - an array of arguments to pass to the plugin command
56
- # @return the output of the plugin command
57
- def run(args = [])
58
- raise NotImplementedError
59
- end
57
+ # @param args [Array[String]] - an array of arguments to pass to the plugin command
58
+ # @return the output of the plugin command
59
+ def run(args = [])
60
+ raise NotImplementedError
61
+ end
60
62
 
61
- # this is the lib directory of this gem
62
- # in order to load any puppet functions from this gem we need to add the lib path
63
- # of this gem
64
- def puppet_debugger_lib_dir
65
- File.expand_path(File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'lib'))
66
- end
63
+ # this is the lib directory of this gem
64
+ # in order to load any puppet functions from this gem we need to add the lib path
65
+ # of this gem
66
+ def puppet_debugger_lib_dir
67
+ File.expand_path(File.join(File.dirname(File.dirname(File.dirname(__FILE__))), 'lib'))
67
68
  end
69
+ end
68
70
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # monkey patch in some color effects string methods
2
4
  class String
3
5
  def red
@@ -38,6 +40,7 @@ class String
38
40
 
39
41
  def camel_case
40
42
  return self if self !~ /_/ && self =~ /[A-Z]+.*/
43
+
41
44
  split('_').map(&:capitalize).join
42
45
  end
43
46
  end
@@ -51,4 +54,4 @@ class Puppet::Parser::ScriptCompiler
51
54
  def catalog
52
55
  @catalog ||= Puppet::Resource::Catalog.new(@node_name, @environment, 'bolt')
53
56
  end
54
- end
57
+ end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://relishapp.com/rspec/rspec-core/v/3-6/docs/example-groups/shared-examples
2
- RSpec.shared_examples "plugin_tests" do |parameter|
4
+ RSpec.shared_examples 'plugin_tests' do |_parameter|
3
5
  let(:plugin) do
4
6
  instance = PuppetDebugger::InputResponders::Commands.plugin_from_command(subject.to_s).instance
5
7
  instance.debugger = debugger
@@ -18,20 +20,20 @@ RSpec.shared_examples "plugin_tests" do |parameter|
18
20
  {}
19
21
  end
20
22
 
21
- it "commands contant is an array" do
23
+ it 'commands contant is an array' do
22
24
  expect(plugin.class::COMMAND_WORDS).to be_a(Array)
23
25
  end
24
26
 
25
- it "commands must contain at least one word" do
26
- expect(plugin.class::COMMAND_WORDS.count).to be > 0
27
+ it 'commands must contain at least one word' do
28
+ expect(plugin.class::COMMAND_WORDS.count).to be > 0
27
29
  end
28
30
 
29
- it "summary must be a string" do
31
+ it 'summary must be a string' do
30
32
  expect(plugin.class::SUMMARY).to be_a(String)
31
33
  end
32
34
 
33
35
  it 'implements run' do
34
- expect{plugin.run([])}.not_to raise_error(NotImplementedError)
36
+ expect { plugin.run([]) }.not_to raise_error
35
37
  end
36
38
 
37
39
  it 'be looked up via any command words' do
@@ -40,5 +42,4 @@ RSpec.shared_examples "plugin_tests" do |parameter|
40
42
  expect(actual).to eq(plugin.class)
41
43
  end
42
44
  end
43
-
44
- end
45
+ end
@@ -83,14 +83,14 @@ module PuppetDebugger
83
83
  nodes: scope.environment.known_resource_types.nodes.keys
84
84
  }
85
85
  if sites = scope.environment.known_resource_types.instance_variable_get(:@sites)
86
- res[:sites] = scope.environment.known_resource_types.instance_variable_get(:@sites).first
86
+ res[:sites] = sites
87
87
  end
88
- if scope.environment.known_resource_types.respond_to?(:applications)
89
- res[:applications] = scope.environment.known_resource_types.applications.keys
88
+ if apps = scope.environment.known_resource_types.respond_to?(:applications)
89
+ res[:applications] = apps
90
90
  end
91
91
  # some versions of puppet do not support capabilities
92
- if scope.environment.known_resource_types.respond_to?(:capability_mappings)
93
- res[:capability_mappings] = scope.environment.known_resource_types.capability_mappings.keys
92
+ if maps = scope.environment.known_resource_types.respond_to?(:capability_mappings)
93
+ res[:capability_mappings] = maps
94
94
  end
95
95
  res
96
96
  end
@@ -100,8 +100,8 @@ module PuppetDebugger
100
100
  Puppet.initialize_settings
101
101
  Puppet[:parser] = 'future' # this is required in order to work with puppet 3.8
102
102
  Puppet[:trusted_node_data] = true
103
- rescue ArgumentError => e
104
- rescue Puppet::DevError => e
103
+ rescue ArgumentError
104
+ rescue Puppet::DevError
105
105
  # do nothing otherwise calling init twice raises an error
106
106
  end
107
107
 
@@ -131,31 +131,41 @@ module PuppetDebugger
131
131
  ::Puppet::Parser::AST::Hostclass.new('', code: ast_code)
132
132
  end
133
133
 
134
+ # @return [String] the path to the manifest file
135
+ # @param input [String] the manfiest content
136
+ # @summary creates a manifest file unless one already exist
137
+ def manifest_file(input)
138
+ file = Tempfile.new(['puppet_debugger_input', '.pp'])
139
+ File.open(file, 'w') do |f|
140
+ f.write(input)
141
+ end
142
+ file
143
+ end
144
+
134
145
  # @param String - any valid puppet language code
135
146
  # @return Object - returns either a string of the result or object from puppet evaulation
136
- def puppet_eval(input)
147
+ def puppet_eval(input, file: nil)
137
148
  # in order to add functions to the scope the loaders must be created
138
149
  # in order to call native functions we need to set the global_scope
139
- ast = generate_ast(input)
140
150
  # record the input for puppet to retrieve and reference later
141
- file = Tempfile.new(['puppet_debugger_input', '.pp'])
142
- File.open(file, 'w') do |f|
143
- f.write(input)
144
- end
145
- Puppet.override({ current_environment: puppet_environment, code: input,
151
+ manifest_file = file || manifest_file(input)
152
+ manfifest_content = input || File.read(manifest_file)
153
+ ast = generate_ast(manfifest_content)
154
+
155
+ Puppet.override({ current_environment: puppet_environment, manifest: manifest_file,
146
156
  global_scope: scope, loaders: scope.compiler.loaders }, 'For puppet-debugger') do
147
- # because the repl is not a module we leave the modname blank
157
+ # because the debugger is not a module we leave the modname blank
148
158
  scope.environment.known_resource_types.import_ast(ast, '')
149
159
 
150
160
  exec_hook :before_eval, '', self, self
151
161
  if bench
152
162
  result = nil
153
163
  time = Benchmark.realtime do
154
- result = parser.evaluate_string(scope, input, File.expand_path(file))
164
+ result = parser.evaluate_string(scope, manfifest_content, File.expand_path(manifest_file))
155
165
  end
156
166
  out = [result, "Time elapsed #{(time * 1000).round(2)} ms"]
157
167
  else
158
- out = parser.evaluate_string(scope, input, File.expand_path(file))
168
+ out = parser.evaluate_string(scope, manfifest_content, File.expand_path(manifest_file))
159
169
  end
160
170
  exec_hook :after_eval, out, self, self
161
171
  out
@@ -8,7 +8,7 @@ module PuppetDebugger
8
8
  def puppet_environment
9
9
  @puppet_environment ||= create_environment
10
10
  end
11
- alias :environment :puppet_environment
11
+ alias environment puppet_environment
12
12
 
13
13
  # returns an array of module directories, generally this is the only place
14
14
  # to look for puppet code by default. This is read from the puppet configuration
@@ -23,8 +23,8 @@ module PuppetDebugger
23
23
  end
24
24
 
25
25
  def bolt_modules
26
- spec = Gem::Specification.latest_specs.find { |spec| spec.name.eql?('bolt') }
27
- bolt_modules = File.join(spec.full_gem_path, 'bolt-modules') if spec
26
+ spec = Gem::Specification.latest_specs.find { |s| s.name.eql?('bolt') }
27
+ File.join(spec.full_gem_path, 'bolt-modules') if spec
28
28
  end
29
29
 
30
30
  # returns all the modules paths defined in the environment
@@ -67,7 +67,7 @@ module PuppetDebugger
67
67
 
68
68
  # currently this is not being used
69
69
  def environment_loaders
70
- name = compiler.loaders.public_environment_loader.loader_name
70
+ compiler.loaders.public_environment_loader.loader_name
71
71
  end
72
72
  end
73
73
  end