Module: Tight::Engine::Defer

Defined in:
lib/tight-engine/defer.rb

Instance Method Summary collapse

Instance Method Details

#defer_element(name, args, opts) ⇒ Object



8
9
10
11
12
13
14
15
# File 'lib/tight-engine/defer.rb', line 8

def defer_element(name, args, opts)
  if settings.respond_to?(:deferred_elements) && settings.deferred_elements.include?(name)
    placeholders[name] = [ name, args, opts ]
    "%{placeholder[:#{name}]}"
  else
    process_element(name, args, opts)
  end
end

#placeholdersObject



4
5
6
# File 'lib/tight-engine/defer.rb', line 4

def placeholders
  @placeholders ||= {}
end

#process_deferred_elements(text) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/tight-engine/defer.rb', line 17

def process_deferred_elements( text )
  text.to_str.gsub /(\s*)\%\{placeholder\[\:([^\]]+)\]\}/ do
    if deferred = placeholders[$2]
      output = process_element(*deferred)
      if engine.pretty?
        # $/ is magic for CR/LF/CRLF
        indent = $/ + $1
        $1 + output.gsub(/\r|\n|\r\n/, indent) + indent
      else
        output
      end  
    else
      "#{$1}%{placeholder[:#{$2}]}"
    end
  end
end