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
-
#current_module_dir ⇒ String
-
the current module directory or directory that contains a gemfile.
-
-
#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, #modules_paths, #puppet_debugger_lib_dir, summary
Instance Method Details
#current_module_dir ⇒ String
Returns - the current module directory or directory that contains a gemfile.
44 45 46 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 44 def current_module_dir @current_module_dir ||= File.dirname(::Bundler.default_gemfile) end |
#func_list ⇒ Object
append a () to functions so we know they are functions
27 28 29 30 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 27 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.
33 34 35 36 37 38 39 40 41 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 33 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.
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 83 84 85 86 87 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 56 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 # 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) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 48 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 = []) ⇒ Object
14 15 16 17 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 14 def run(args = []) filter = args.first || "" TablePrint::Printer.table_print(sorted_list(filter), [:full_name, :mod_name]) end |
#sorted_list(filter = "") ⇒ Object
19 20 21 22 23 24 |
# File 'lib/plugins/puppet-debugger/input_responders/functions.rb', line 19 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 |