module Deface::ActionViewExtensions::DefacedTemplate

Public Instance Methods

encode!() click to toggle source
Calls superclass method
# File lib/deface/action_view_extensions.rb, line 17
def encode!
  return super unless Rails.application.config.deface.enabled

  # Before Rails 6 encode! returns nil
  source = Deface.before_rails_6? ? (super; @source) : super
  syntax = Deface::ActionViewExtensions.determine_syntax(@handler)
  overrides = Deface::Override.find(
    locals: @locals,
    format: @format,
    variant: @variant,
    virtual_path: @virtual_path,
  )

  if syntax && overrides.any?
    # Prevents any caching by rails in development mode.
    @updated_at = Time.now if Deface.before_rails_6?
    @handler = ActionView::Template::Handlers::ERB

    # Modify the existing string instead of returning a copy
    new_source = Deface::Override.apply_overrides(
      Deface::Override.convert_source(source, syntax: syntax),
      overrides: overrides
    )

    if Deface.before_rails_6?
      @source.replace new_source
    else
      source.replace new_source
    end
  end

  source
end

Private Instance Methods

compile!(view) click to toggle source
Calls superclass method
# File lib/deface/action_view_extensions.rb, line 53
def compile!(view)
  return super unless Rails.application.config.deface.enabled

  @compile_mutex.synchronize do
    current_deface_hash = Deface::Override.digest(virtual_path: @virtual_path)
    @deface_hash = current_deface_hash if @deface_hash.nil?

    if @deface_hash != current_deface_hash
      @compiled = nil
      @deface_hash = current_deface_hash
    end
  end

  super
end