class HS::DevServer

Attributes

app[RW]
entry[RW]

Public Class Methods

create(config = {}) click to toggle source
# File lib/hs/devserver.rb, line 11
def create(config = {})
  self.entry = config[:entry]
  self.app = initialize_application(config)
  set_root_route
  set_chapter_route
  set_module_route
  app
end

Private Class Methods

create_application(public_folder, hs_public_folder, bind, port) click to toggle source
# File lib/hs/devserver.rb, line 30
def create_application(public_folder, hs_public_folder, bind, port)
  Sinatra.new do
    set(:bind, bind)
    set(:port, port)
    set(:views, File.expand_path('../../app/views', __dir__))
    set(:public_folder, public_folder)
    use(Rack::TryStatic, root: hs_public_folder, urls: %w[/])
  end
end
initialize_application(config) click to toggle source
# File lib/hs/devserver.rb, line 22
def initialize_application(config)
  public_folder = config[:public_folder] || 'public'
  hs_public_folder = File.expand_path('../../app/public', __dir__)
  port = config[:port] || '8080'
  bind = config[:bind] || '0.0.0.0'
  create_application(public_folder, hs_public_folder, bind, port)
end
set_chapter_route() click to toggle source
# File lib/hs/devserver.rb, line 51
def set_chapter_route
  entry = self.entry

  app.get '/:chapter' do
    @course = HS::Course.load(entry)
    @chapter = @course.find_chapter(params[:chapter])
    @title = @chapter.title

    erb :chapter
  end
end
set_module_route() click to toggle source
# File lib/hs/devserver.rb, line 63
def set_module_route
  entry = self.entry

  app.get '/:chapter/:module' do
    @course = HS::Course.load(entry)
    @chapter = @course.find_chapter(params[:chapter])
    @module = @chapter.find_module(params[:module])
    @title = @module.title

    erb :module
  end
end
set_root_route() click to toggle source
# File lib/hs/devserver.rb, line 40
def set_root_route
  entry = self.entry

  app.get '/' do
    @course = HS::Course.load(entry)
    @title = @course.title

    erb :course
  end
end