Module: Deface::Applicator::ClassMethods

Included in:
Override
Defined in:
lib/deface/applicator.rb

Instance Method Summary collapse

Instance Method Details

#apply(source, details, log = true, syntax = :erb) ⇒ Object

applies all applicable overrides to given source



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/deface/applicator.rb', line 6

def apply(source, details, log=true, syntax=:erb)
  overrides = find(details)

  if log && overrides.size > 0
    Rails.logger.debug "\e[1;32mDeface:\e[0m #{overrides.size} overrides found for '#{details[:virtual_path]}'"
  end

  unless overrides.empty?
    case syntax
    when :haml
      #convert haml to erb before parsing before
      source = Deface::HamlConverter.new(source.to_param).result
    when :slim
      source = Deface::SlimConverter.new(source.to_param).result
    end

    doc = Deface::Parser.convert(source)

    overrides.each do |override|
      if override.disabled?
        Rails.logger.debug("\e[1;32mDeface:\e[0m '#{override.name}' is disabled") if log
        next
      end

      override.parsed_document = doc
      matches = override.matcher.matches(doc, log)

      if log
        Rails.logger.send(matches.size == 0 ? :error : :debug, "\e[1;32mDeface:\e[0m '#{override.name}' matched #{matches.size} times with '#{override.selector}'")

        # temporarily check and notify on use of old selector styles.
        #
        if matches.empty? && override.selector.match(/code|erb-loud|erb-silent/)
          Rails.logger.error "\e[1;32mDeface: [WARNING]\e[0m Override '#{override.name}' may be using an invalid selector of '#{override.selector}', <code erb-loud|silent> tags are now <erb loud|silent>"
        end
      end

      if matches.empty?
        override.failure = "failed to match :#{override.action} selector '#{override.selector}'"
      else
        override.failure = nil
        matches.each {|match| override.execute_action match }
      end
    end

    #prevents any caching by rails in development mode
    details[:updated_at] = Time.now

    source = doc.to_s

    Deface::Parser.undo_erb_markup!(source)
  end

  source
end