Class: HamlInterceptor

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

Instance Method Summary collapse

Constructor Details

#initialize(app, opts = {}) ⇒ HamlInterceptor

Returns a new instance of HamlInterceptor.



4
5
6
# File 'lib/haml_interceptor.rb', line 4

def initialize(app, opts={})
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/haml_interceptor.rb', line 8

def call(env)
  status, headers, resp = @app.call(env)
  body = resp.body.respond_to?(:join) ? resp.body.join : resp.body

  if js_response?(env, headers)
    body = parse(body)
  end
  [status, headers, body]
end

#js_response?(env, headers) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/haml_interceptor.rb', line 18

def js_response?(env, headers)
  env['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' || (headers.has_key?('Content-Type') && headers['Content-Type'] =~ /javascript/)
end

#parse(body, json = true) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/haml_interceptor.rb', line 22

def parse(body, json = true)
  parsed = json ? (JSON.parse(body) rescue body) : body
  if parsed.respond_to?(:values)
    parsed.keys.each do |key|
      parsed[key] = parse(parsed[key], false)
    end
  else
    parsed = Haml::HTML.new(parsed).render
  end
  json ? (JSON.generate(parsed) rescue parsed) : parsed
end