Class: Terminus::Proxy::DriverBody

Inherits:
Object
  • Object
show all
Defined in:
lib/terminus/proxy/driver_body.rb

Constant Summary collapse

ASYNC_BROWSERS =
%w[Android]
TEMPLATE =
ERB.new("  <script type=\"text/javascript\" id=\"terminus-data\">\n    TERMINUS_STATUS = <%= @response.first %>;\n    TERMINUS_HEADERS = {};\n    <% @response[1].each do |key, value| %>\n      TERMINUS_HEADERS[<%= key.inspect %>] = <%= value.inspect %>;\n    <% end %>\n    TERMINUS_SOURCE = <%= page_source %>;\n  </script>\n  <script type=\"text/javascript\">\n    (function() {\n      var terminusScript = document.getElementById('terminus-data');\n      terminusScript.parentNode.removeChild(terminusScript);\n    })();\n  </script>\n  <% if @async %>\n    <script type=\"text/javascript\">\n      (function() {\n        var head = document.getElementsByTagName('head')[0],\n            script = document.createElement('script');\n\n        script.type = 'text/javascript';\n        script.src = '<%= @host %>/bootstrap.js';\n        head.appendChild(script);\n      })();\n    </script>\n  <% else %>\n    <script type=\"text/javascript\" src=\"<%= @host %><%= FAYE_MOUNT %>/client.js\"></script>\n    <script type=\"text/javascript\" src=\"<%= @host %>/compiled/terminus-min.js\"></script>\n    <script type=\"text/javascript\">\n      setTimeout(function() {\n        Terminus.connect('<%= @env['SERVER_NAME'] %>', <%= Terminus.port %>);\n      }, 0);\n    </script>\n  <% end %>\n")

Instance Method Summary collapse

Constructor Details

#initialize(env, response) ⇒ DriverBody

Returns a new instance of DriverBody.



44
45
46
47
48
49
50
# File 'lib/terminus/proxy/driver_body.rb', line 44

def initialize(env, response)
  @env      = env
  @response = response
  @body     = response[2]
  @host     = "http://#{@env['SERVER_NAME']}:#{Terminus.port}"
  @async    = ASYNC_BROWSERS.include?(UserAgent.parse(env['HTTP_USER_AGENT']).browser)
end

Instance Method Details

#each(&block) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/terminus/proxy/driver_body.rb', line 52

def each(&block)
  script_injected = false
  @source = ''

  @body.each do |fragment|
    @source << fragment
    output = inject_script(fragment)
    script_injected ||= (output != fragment)
    block.call(output)
  end

  unless script_injected
    block.call(TEMPLATE.result(binding))
  end
end