Sha256: 812ad65d2d39fa188b78c32e9da62720d8cde0b2b2515a4f051db34fe0917d86

Contents?: true

Size: 1.4 KB

Versions: 4

Compression:

Stored size: 1.4 KB

Contents

require "launchy"
require "prez/builder"
require "prez/error"
require "thor/actions"
require "thor/group"
require "webrick"

module Prez
  class Start < Thor::Group
    include Thor::Actions
    include Prez::Builder
    argument :name, type: :string

    def check_file!
      if File.exists? name
        @filename = name
      elsif File.exists? "#{name}.prez"
        @filename = "#{name}.prez"
      else
        raise Prez::Error.new("Missing prez file '#{name}'")
      end

      if filename =~ /\.html$/
        raise Prez::Error.new("Prez file cannot be an html file: '#{name}'")
      end
    end

    def generate_html
      say "Generating html..."
      @html = build_html filename
    end

    def start_server
      say "Starting server..."
      server = WEBrick::HTTPServer.new Port: 0, Logger: Prez::Start::NoopLog.new, AccessLog: []
      port = server.config[:Port]

      server.mount_proc "/" do |request, response|
        response.body = @html
        server.stop
      end

      begin
        Launchy.open "http://localhost:#{port}/"
        server.start
      ensure
        server.shutdown
      end
    end

    private

    def filename
      @filename
    end

    class << self
      def source_root
        File.absolute_path File.expand_path("../../../templates", __FILE__)
      end
    end

    class NoopLog < WEBrick::BasicLog
      def initialize
        @level = INFO
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
prez-0.0.5 lib/prez/start.rb
prez-0.0.4 lib/prez/start.rb
prez-0.0.3 lib/prez/start.rb
prez-0.0.2 lib/prez/start.rb