Sha256: 8173ffede6a26a77fad89de4dacc22daec0318f1210ca0e7022f2df96148f984

Contents?: true

Size: 1.31 KB

Versions: 16

Compression:

Stored size: 1.31 KB

Contents

module Puppet::Pops
# Module for making a call such that there is an identifiable entry on
# the ruby call stack enabling getting a puppet call stack
# To use this make a call with:
# ```
# Puppet::Pops::PuppetStack.stack(file, line, receiver, message, args)
# ```
# To get the stack call:
# ```
# Puppet::Pops::PuppetStack.stacktrace
#
# When getting a backtrace in Ruby, the puppet stack frames are
# identified as coming from "in 'stack'" and having a ".pp" file
# name.
# To support testing, a given file that is an empty string, or nil
# as well as a nil line number are supported. Such stack frames
# will be represented with the text `unknown` and `0ยด respectively.
#
module PuppetStack
  # Sends a message to an obj such that it appears to come from
  # file, line when calling stacktrace.
  #
  def self.stack(file, line, obj, message, args, &block)
    file = '' if file.nil?
    line = 0 if line.nil?

    if block_given?
      Kernel.eval("obj.send(message, *args, &block)", Kernel.binding(), file, line)
    else
      Kernel.eval("obj.send(message, *args)", Kernel.binding(), file, line)
    end
  end

  def self.stacktrace
    result = caller().reduce([]) do |memo, loc|
      if loc =~ /^(.*\.pp)?:([0-9]+):in `stack'/
        memo << [$1.nil? ? 'unknown' : $1, $2.to_i]
      end
      memo
    end.reverse
  end
end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
puppet-4.7.1 lib/puppet/pops/puppet_stack.rb
puppet-4.7.1-x86-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.7.1-x64-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.7.1-universal-darwin lib/puppet/pops/puppet_stack.rb
puppet-4.7.0 lib/puppet/pops/puppet_stack.rb
puppet-4.7.0-x86-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.7.0-x64-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.7.0-universal-darwin lib/puppet/pops/puppet_stack.rb
puppet-4.6.2 lib/puppet/pops/puppet_stack.rb
puppet-4.6.2-x86-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.6.2-x64-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.6.2-universal-darwin lib/puppet/pops/puppet_stack.rb
puppet-4.6.1-x86-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.6.1 lib/puppet/pops/puppet_stack.rb
puppet-4.6.1-x64-mingw32 lib/puppet/pops/puppet_stack.rb
puppet-4.6.1-universal-darwin lib/puppet/pops/puppet_stack.rb