Class: CoffeeViews::Rails::TemplateHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/coffee_views/rails.rb

Class Method Summary collapse

Class Method Details

.call(template) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/coffee_views/rails.rb', line 29

def self.call(template)
  source = compile_coffee(template.source)
  # TODO: find how to set source back to template without instance_variable_set
  template.instance_variable_set :@source, source

  erb_handler.call(template)
end

.compile_coffee(source) ⇒ Object



24
25
26
27
# File 'lib/coffee_views/rails.rb', line 24

def self.compile_coffee(source)
  source = preprocess(source)
  ::CoffeeScript.compile(source)
end

.erb_handlerObject



9
10
11
# File 'lib/coffee_views/rails.rb', line 9

def self.erb_handler
  @@erb_handler ||= ActionView::Template.registered_template_handler(:erb)
end

.preprocess(source) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/coffee_views/rails.rb', line 13

def self.preprocess source
  return "".html_safe unless source

  source.gsub! /<%==(.*?)%>/,     '`<%==\1%>`'
  source.gsub! /<%=([^=].*?)%>/,  '`<%==CoffeeViews.j((\1).to_json.html_safe)%>`'
  source.gsub! /<%([^=].*?)%>/,   '`<%\1%>`'
  source.gsub! /#\{==(.*?)\}/,    '#{`<%==\1%>`}'
  source.gsub! /#\{=([^=].*?)\}/, '#{`<%==CoffeeViews.j((\1).to_json.html_safe)%>`}'
  source
end