Class: PuppetDebugger::InputResponders::Functions
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
#debugger
Instance Method Summary
collapse
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
function_map.map { |_name, metadata| "#{metadata[: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)
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|
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
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
|