Sha256: 2439870b0eb4317e85d49dbadd04f5fc69ad854c97580897708296825fcfe521

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

require 'walle/middlewares/helper'
require 'walle/middlewares/builder'
require 'walle/middlewares/logger'
require 'walle/robot/router'
require 'walle/robot/definitions'
require 'walle/controller'

module Walle
  class Robot
    Environment = Struct.new(:event, :client, :data, :matches)

    class_attribute :_definitions, instance_writer: false
    self._definitions = Definitions::Stack.new

    class << self
      delegate *Definitions::METHODS, to: :_definitions

      def inherited(subclass)
        subclass._definitions.push(Definitions.new)
        super
      end

      def run(options = {}, &block)
        client   = Slack::RealTime::Client.new(options)
        instance = new(client, options)
        instance.run(&block)
        instance
      end
    end

    attr_reader :client

    def initialize(client, options = {})
      @client  = client
      @async   = !!options.delete(:async)
      @options = options
    end

    def run(&block)
      _definitions.apply_to(client)
      async? ? client.start_async(&block) : client.start!(&block)
    end

    def stop
      client.stop!
    end

    def started?
      client.started?
    end

    def async?
      @async
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
walle-0.1.0 lib/walle/robot.rb