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
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
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
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
|