public
Rubygem
Description: Johnson wraps JavaScript in a loving Ruby embrace.
Homepage: http://github.com/jbarnette/johnson/wikis
Clone URL: git://github.com/jbarnette/johnson.git
johnson / lib / rails / init.rb
100644 38 lines (29 sloc) 0.871 kb
1
2
3
4
5
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
require 'johnson'
 
class EJSHandler < ActionView::TemplateHandler
  class EJSProxy # :nodoc:
    def initialize(controller)
      @controller = controller
    end
 
    def key?(pooperty)
      @controller.instance_variables.include?("@#{pooperty}")
    end
 
    def [](pooperty)
      @controller.instance_variable_get("@#{pooperty}")
    end
 
    def []=(pooperty, value)
      @controller.instance_variable_set("@#{pooperty}", value)
    end
  end
 
  def initialize(view)
    @view = view
  end
 
  def render(template)
    ctx = Johnson::Runtime.new
    ctx.evaluate('Johnson.require("johnson/template");')
    ctx['template'] = template.source
    ctx['controller'] = @view.controller
    ctx['at'] = EJSProxy.new(@view.controller)
 
    ctx.evaluate('Johnson.templatize(template).call(at)')
  end
end
 
ActionView::Template.register_template_handler("ejs", EJSHandler)