Module: Datadog::Contrib::ActionView::Patcher

Includes:
Patcher
Defined in:
lib/ddtrace/contrib/action_view/patcher.rb

Overview

Patcher enables patching of ActionView module.

Class Method Summary collapse

Methods included from Patcher

included

Class Method Details

.patchObject



22
23
24
# File 'lib/ddtrace/contrib/action_view/patcher.rb', line 22

def patch
  patch_renderer
end

.patch_rendererObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ddtrace/contrib/action_view/patcher.rb', line 26

def patch_renderer
  if target_version >= Gem::Version.new('4.0.0')
    Events.subscribe!
  elsif defined?(::ActionView::TemplateRenderer) && defined?(::ActionView::PartialRenderer)
    # Rails < 4 compatibility:
    #  Rendering events are not nested in this version, creating
    #  render_partial spans outside of the parent render_template span.
    #  We fall back to manual patching instead.
    ::ActionView::TemplateRenderer.send(:prepend, Instrumentation::TemplateRenderer::RailsLessThan4)
    ::ActionView::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::RailsLessThan4)
  elsif defined?(::ActionView::Rendering) && defined?(::ActionView::Partials::PartialRenderer)
    # NOTE: Rails < 3.1 compatibility: different classes are used
    ::ActionView::Rendering.send(:prepend, Instrumentation::TemplateRenderer::Rails30)
    ::ActionView::Partials::PartialRenderer.send(:prepend, Instrumentation::PartialRenderer::RailsLessThan4)
  else
    Datadog.logger.debug('Expected Template/Partial classes not found; template rendering disabled')
  end
end

.target_versionObject



18
19
20
# File 'lib/ddtrace/contrib/action_view/patcher.rb', line 18

def target_version
  Integration.version
end