class Rack::LiveReload::BodyProcessor
Constants
- HEAD_TAG_REGEX
- LIVERELOAD_JS_PATH
- LIVERELOAD_PORT
Attributes
content_length[R]
livereload_added[R]
new_body[R]
Public Class Methods
new(body, options)
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 20 def initialize(body, options) @body, @options = body, options @options[:live_reload_port] ||= LIVERELOAD_PORT @processed = false end
Public Instance Methods
app_root()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 80 def app_root ENV['RAILS_RELATIVE_URL_ROOT'] || '' end
host_to_use()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 84 def host_to_use (@options[:host] || @env['HTTP_HOST'] || 'localhost').gsub(%r{:.*}, '') end
livereload_local_uri()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 16 def livereload_local_uri "#{protocol}://localhost:#{@options[:live_reload_port]}/livereload.js" end
livereload_source()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 96 def livereload_source if use_vendored? src = "#{app_root}#{LIVERELOAD_JS_PATH.dup}?host=#{host_to_use}" else src = livereload_local_uri.dup.gsub('localhost', host_to_use) + '?' end src << "&mindelay=#{@options[:min_delay]}" if @options[:min_delay] src << "&maxdelay=#{@options[:max_delay]}" if @options[:max_delay] src << "&port=#{@options[:port]}" if @options[:port] src end
process!(env)
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 59 def process!(env) @env = env @body.close if @body.respond_to?(:close) @new_body = [] ; @body.each { |line| @new_body << line.to_s } @content_length = 0 @livereload_added = false @new_body.each do |line| if !@livereload_added && line['<head'] line.gsub!(HEAD_TAG_REGEX) { |match| %{#{match}#{template.result(binding)}} } @livereload_added = true end @content_length += line.bytesize @processed = true end end
processed?()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 55 def processed? @processed end
protocol()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 12 def protocol @options[:protocol] || "http" end
template()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 88 def template if defined?(SecureHeaders) req = Rack::Request.new(@env) @options[:nonce] = SecureHeaders.content_security_policy_script_nonce(req) end ERB.new(::File.read(::File.expand_path('../../../../skel/livereload.html.erb', __FILE__))) end
use_vendored?()
click to toggle source
# File lib/rack/livereload/body_processor.rb, line 27 def use_vendored? return @use_vendored if @use_vendored if @options[:source] @use_vendored = (@options[:source] == :vendored) else require 'net/http' require 'uri' uri = URI.parse(livereload_local_uri) http = Net::HTTP.new(uri.host, uri.port) http.read_timeout = 1 begin http.send_request('GET', uri.path) @use_vendored = false rescue ::Timeout::Error, Errno::ECONNREFUSED, EOFError, IOError @use_vendored = true rescue => e $stderr.puts e.inspect raise e end end @use_vendored end