Class: PuppetDebugger::InputResponders::Functions
- Inherits:
-
PuppetDebugger::InputResponderPlugin
- Object
- PuppetDebugger::InputResponderPlugin
- PuppetDebugger::InputResponders::Functions
- Defined in:
- lib/plugins/puppet-debugger/input_responders/functions.rb
Constant Summary collapse
- COMMAND_WORDS =
%w(functions)
- SUMMARY =
'List all the functions available in the environment.'- COMMAND_GROUP =
:environment- FUNC_NATIVE_NAME_REGEX =
%r{\Afunction\s([\w\:]+)}- FUNC_V4_NAME_REGEX =
%r{Puppet\:\:Functions.create_function\s?\(?\:?\'?([\w\:]+)}
Instance Attribute Summary
Attributes inherited from PuppetDebugger::InputResponderPlugin
Instance Method Summary collapse
-
#func_list ⇒ Object
append a () to functions so we know they are functions.
-
#function_map ⇒ Hash
-
a map of all the functions.
-
-
#function_obj(file) ⇒ Array
-
returns a array of the parentname and function name.
-
- #lib_dirs(module_dirs = modules_paths) ⇒ Object
- #run(args = []) ⇒ Object
- #sorted_list(filter = '') ⇒ Object
Methods inherited from PuppetDebugger::InputResponderPlugin
command_completion, command_group, command_words, details, execute, #puppet_debugger_lib_dir, summary
Instance Method Details
#func_list ⇒ Object
append a () to functions so we know they are functions
26 27 28 29 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 26 def func_list # ideally we should get a list of function names via the puppet loader function_map.map { |name, | "#{[:full_name]}()" } end |
#function_map ⇒ Hash
Returns - a map of all the functions.
32 33 34 35 36 37 38 39 40 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 32 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) ⇒ Array
Returns - returns a array of the parentname and function name.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 52 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 if line.match(FUNC_NATIVE_NAME_REGEX) namespace, name = $1.split('::', 2) name = namespace if name.nil? namespace = '' if namespace == name end end elsif file.include?('lib/puppet/functions') File.readlines(file, :encoding => 'UTF-8').find do |line| if line.match(FUNC_V4_NAME_REGEX) namespace, name = $1.split('::', 2) name = namespace if name.nil? namespace = '' if namespace == name end 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 # match = file.match('(?<mod>\w+)\/functions|manifests|lib') mod_name = match[:mod] unless match.nil? 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) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 43 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] end |
#run(args = []) ⇒ Object
13 14 15 16 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 13 def run(args = []) filter = args.first || '' TablePrint::Printer.table_print(sorted_list(filter), [:full_name, :mod_name]) end |
#sorted_list(filter = '') ⇒ Object
18 19 20 21 22 23 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 18 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 |