class PuppetDebugger::InputResponders::Functions
Constants
- COMMAND_GROUP
- COMMAND_WORDS
- FUNC_NATIVE_NAME_REGEX
- FUNC_V4_NAME_REGEX
- SUMMARY
Public Instance Methods
current_module_dir()
click to toggle source
@return [String] - the current module directory or directory that contains a gemfile
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 47 def current_module_dir @current_module_dir ||= begin File.dirname(::Bundler.default_gemfile) rescue ::Bundler::GemfileNotFound Dir.pwd end end
func_list()
click to toggle source
append a () to functions so we know they are functions
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 30 def func_list # ideally we should get a list of function names via the puppet loader function_map.map { |_name, metadata| "#{metadata[:full_name]}()" } end
function_map()
click to toggle source
@return [Hash] - a map of all the functions
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 36 def function_map functions = {} function_files.each do |file| obj = function_obj(file) # return the last matched in cases where rbenv might be involved functions[obj[:full_name]] = obj end functions end
function_obj(file)
click to toggle source
@return [Array] - returns a array of the parentname and function name
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 63 def function_obj(file) namespace = nil name = nil if file =~ /\.pp/ File.readlines(file, encoding: 'UTF-8').find do |line| # TODO: not getting namespace for functio next unless line.match(FUNC_NATIVE_NAME_REGEX) namespace, name = Regexp.last_match(1).split('::', 2) name = namespace if name.nil? namespace = '' if namespace == name end elsif file.include?('lib/puppet/functions') File.readlines(file, encoding: 'UTF-8').find do |line| next unless line.match(FUNC_V4_NAME_REGEX) namespace, name = Regexp.last_match(1).split('::', 2) name = namespace if name.nil? namespace = '' if namespace == name end end name ||= File.basename(file, File.extname(file)) match = file.match('\/(?<mod>[\w\-\.]+)\/(lib|functions|manifests)') summary_match = File.read(file, encoding: 'UTF-8').match(/@summary\s(.*)/) summary = summary_match[1] if summary_match # fetch the puppet version if this is a function from puppet gem captures = file.match(/(puppet-[\d\.]+)/) file_namespace = captures[1] if captures mod_name = file_namespace || match[:mod] full_name = namespace.nil? || namespace.empty? ? name : name.prepend("#{namespace}::") { namespace: namespace, summary: summary, mod_name: mod_name, name: name, full_name: full_name, file: file } end
lib_dirs(module_dirs = modules_paths)
click to toggle source
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 55 def lib_dirs(module_dirs = modules_paths) dirs = module_dirs.map do |mod_dir| Dir["#{mod_dir}/*/lib"].entries end.flatten dirs + [puppet_debugger_lib_dir, File.join(current_module_dir, 'lib')] end
run(args = [])
click to toggle source
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 17 def run(args = []) filter = args.first || '' TablePrint::Printer.table_print(sorted_list(filter), %i[full_name mod_name]) end
sorted_list(filter = '')
click to toggle source
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 22 def sorted_list(filter = '') search = /#{Regexp.escape(filter)}/ function_map.values.find_all do |v| "#{v[:mod_name]}_#{v[:full_name]}" =~ search end.sort { |a, b| a[:full_name] <=> b[:full_name] } end
Private Instance Methods
function_files()
click to toggle source
returns a array of function files which is only required when displaying the function map, puppet will load each function on demand in the future we may want to utilize the puppet loaders to find these things
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 109 def function_files search_dirs = lib_dirs.map do |lib_dir| [File.join(lib_dir, 'puppet', 'functions', '**', '*.rb'), File.join(lib_dir, 'functions', '**', '*.rb'), File.join(File.dirname(lib_dir), 'functions', '**', '*.pp'), File.join(lib_dir, 'puppet', 'parser', 'functions', '*.rb')] end # add puppet lib directories search_dirs << [File.join(puppet_lib_dir, 'puppet', 'functions', '**', '*.rb'), File.join(puppet_lib_dir, 'puppet', 'parser', 'functions', '*.rb')] Dir.glob(search_dirs.flatten) end
load_lib_dirs(module_dirs = modules_paths)
click to toggle source
load all the lib dirs so puppet can find the functions at this time, this function is not being used
# File lib/plugins/puppet-debugger/input_responders/functions.rb, line 100 def load_lib_dirs(module_dirs = modules_paths) lib_dirs(module_dirs).each do |lib| $LOAD_PATH << lib end end