Class: AppMap::Handler::Rails::Template::ResolverHandler
- Inherits:
-
FunctionHandler
- Object
- AppMap::Hook::Method
- FunctionHandler
- AppMap::Handler::Rails::Template::ResolverHandler
- Defined in:
- lib/appmap/handler/rails/template.rb
Overview
Hooks the ActionView::Resolver methods find_all
, find_all_anywhere
. The resolver is used during template rendering to lookup the template file path from parameters such as the template name, prefix, and partial (boolean).
Constant Summary
Constants inherited from AppMap::Hook::Method
AppMap::Hook::Method::HOOK_DISABLE_KEY
Constants included from AppMap::Hook::RecordAround
AppMap::Hook::RecordAround::APPMAP_OUTPUT_DIR
Instance Attribute Summary
Attributes inherited from AppMap::Hook::Method
#arity, #hook_class, #hook_method, #hook_package, #parameters, #record_around
Instance Method Summary collapse
- #handle_call(receiver, args) ⇒ Object
-
#handle_return(call_event_id, elapsed, return_value, exception) ⇒ Object
When the resolver returns, look to see if there is template rendering underway.
- #path_from_obj(path_obj) ⇒ Object
- #record_template_path(renderer, path_obj) ⇒ Object
Methods inherited from AppMap::Hook::Method
Methods included from AppMap::Hook::RecordAround
#record_around?, #record_around_after, #record_around_before
Constructor Details
This class inherits a constructor from AppMap::Hook::Method
Instance Method Details
#handle_call(receiver, args) ⇒ Object
114 115 116 117 118 119 |
# File 'lib/appmap/handler/rails/template.rb', line 114 def handle_call(receiver, args) name, prefix, partial = args warn "Resolver: #{{ name: name, prefix: prefix, partial: partial }}" if LOG super end |
#handle_return(call_event_id, elapsed, return_value, exception) ⇒ Object
When the resolver returns, look to see if there is template rendering underway. If so, populate the template path. In all cases, add a TemplateMethod so that the template will be recorded in the classMap.
124 125 126 127 128 129 130 131 132 133 |
# File 'lib/appmap/handler/rails/template.rb', line 124 def handle_return(call_event_id, elapsed, return_value, exception) renderer = Array(Thread.current[TEMPLATE_RENDERER]).last path_obj = Array(return_value).first warn "Resolver return: #{path_obj}" if LOG record_template_path renderer, path_obj super end |
#path_from_obj(path_obj) ⇒ Object
143 144 145 146 147 148 149 150 151 152 |
# File 'lib/appmap/handler/rails/template.rb', line 143 def path_from_obj(path_obj) path = if path_obj.respond_to?(:identifier) && path_obj.inspect.index('#<') path_obj.identifier else path_obj.inspect end path = path[Dir.pwd.length + 1..-1] if path.index(Dir.pwd) == 0 path end |
#record_template_path(renderer, path_obj) ⇒ Object
135 136 137 138 139 140 141 |
# File 'lib/appmap/handler/rails/template.rb', line 135 def record_template_path(renderer, path_obj) return unless path_obj path = path_from_obj path_obj AppMap.tracing.record_method(TemplateMethod.new(path)) renderer.path ||= path if renderer end |