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].freeze
- SUMMARY =
'List all the functions available in the environment.'
- COMMAND_GROUP =
:environment
- FUNC_NATIVE_NAME_REGEX =
/\Afunction\s([\w\:]+)/.freeze
- FUNC_V4_NAME_REGEX =
/Puppet\:\:Functions.create_function\s?\(?\:?\'?([\w\:]+)/.freeze
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.
47 48 49 50 51 52 53 |
# 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 ⇒ Object
append a () to functions so we know they are functions
30 31 32 33 |
# 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, | "#{[:full_name]}()" } end |
#function_map ⇒ Hash
Returns - a map of all the functions.
36 37 38 39 40 41 42 43 44 |
# 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) ⇒ Array
Returns - returns a array of the parentname and function name.
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 88 89 90 91 92 93 94 |
# 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) ⇒ Object
55 56 57 58 59 60 |
# 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 = []) ⇒ Object
17 18 19 20 |
# 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 = '') ⇒ Object
22 23 24 25 26 27 |
# 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 |