Sha256: d2cb1c914247d0f42805fd32b3f9838240eefc746ae0d9ef9717245dbdc1ae94

Contents?: true

Size: 1.27 KB

Versions: 2

Compression:

Stored size: 1.27 KB

Contents

require 'rack'

module WhippedCream
  # A server handles building a plugin/runner and starting a web server
  class Server
    attr_reader :plugin, :options

    def initialize(plugin, options = {})
      @plugin = plugin
      @options = options
    end

    def start
      ensure_routes_built
      ensure_runner_started

      start_web
    end

    def runner
      @runner ||= Runner.create_instance(plugin)
    end

    def web
      @web ||= Web
    end

    private

    def ensure_runner_started
      runner
    end

    def ensure_routes_built
      @routes_built ||= build_routes || true
    end

    def rack_options
      {
        app: web,
        Port: options.fetch(:port, 8080),
        daemonize: !!options[:daemonize]
      }
    end

    def start_web
      Rack::Server.start rack_options
    end

    def build_routes
      build_button_routes
      build_switch_routes
    end

    def build_button_routes
      plugin.buttons.each do |button|
        web.get "/#{button.id}" do
          runner.send button.id
          redirect to('/')
        end
      end
    end

    def build_switch_routes
      plugin.switches.each do |switch|
        web.get "/#{switch.id}" do
          runner.send switch.id
          redirect to('/')
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
whipped-cream-0.1.1 lib/whipped-cream/server.rb
whipped-cream-0.1.0 lib/whipped-cream/server.rb