Class: Octodown::Renderer::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/octodown/renderer/server.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_content, options = {}) ⇒ Server

Returns a new instance of Server.



16
17
18
19
20
21
22
23
24
# File 'lib/octodown/renderer/server.rb', line 16

def initialize(_content, options = {})
  @logger = options[:logger]
  @file = options[:file]
  @options = options
  @path = File.dirname(File.expand_path(file.path))
  @port = options[:port]
  @websockets = []
  @mutex = Mutex.new
end

Instance Attribute Details

#fileObject (readonly)

Returns the value of attribute file.



14
15
16
# File 'lib/octodown/renderer/server.rb', line 14

def file
  @file
end

#loggerObject (readonly)

Returns the value of attribute logger.



14
15
16
# File 'lib/octodown/renderer/server.rb', line 14

def logger
  @logger
end

#optionsObject (readonly)

Returns the value of attribute options.



14
15
16
# File 'lib/octodown/renderer/server.rb', line 14

def options
  @options
end

#pathObject (readonly)

Returns the value of attribute path.



14
15
16
# File 'lib/octodown/renderer/server.rb', line 14

def path
  @path
end

#portObject (readonly)

Returns the value of attribute port.



14
15
16
# File 'lib/octodown/renderer/server.rb', line 14

def port
  @port
end

Instance Method Details

#appObject

Cascade through this app and Rack::File app. If Server returns 404, Rack::File will try to serve a static file.



67
68
69
# File 'lib/octodown/renderer/server.rb', line 67

def app
  @app ||= Rack::Cascade.new([self, Rack::File.new(path)])
end

#boot_serverObject



36
37
38
39
40
41
42
43
44
# File 'lib/octodown/renderer/server.rb', line 36

def boot_server
  logger.info "#{file.path} is getting octodown'd"
  logger.info "Server running on http://localhost:#{port}"
  Rack::Handler::Puma.run app,
                          Host: 'localhost',
                          Port: port,
                          Silent: true,
                          Threads: '2:8'
end

#call(env) ⇒ Object



61
62
63
# File 'lib/octodown/renderer/server.rb', line 61

def call(env)
  ::Faye::WebSocket.websocket?(env) ? render_ws(env) : render_http(env)
end

#maybe_launch_browserObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/octodown/renderer/server.rb', line 46

def maybe_launch_browser
  return if options[:no_open]

  sleep 2.5

  @mutex.synchronize do
    if @websockets.empty?
      logger.info 'Loading preview in a new browser tab'
      Launchy.open "http://localhost:#{port}"
    else
      logger.info 'Re-using existing browser tab'
    end
  end
end

#presentObject



26
27
28
29
30
31
32
33
34
# File 'lib/octodown/renderer/server.rb', line 26

def present
  register_listener

  Thread.new do
    maybe_launch_browser
  end

  boot_server
end