Sha256: 593f4f542c0bb012375d6f147d24c542d1bbc802b06f8b72019c96dc5f665877

Contents?: true

Size: 911 Bytes

Versions: 1

Compression:

Stored size: 911 Bytes

Contents

module Vedeu
  class UndefinedInterface < StandardError; end

  module Interfaces
    extend self
    attr_accessor :interfaces

    def define(&block)
      if block_given?
        yield self
      else
        self
      end
    end

    def defined
      interfaces.empty? ? nil : self
    end

    def default
      add(:dummy, Dummy)
    end

    def list
      interfaces.inspect
    end

    def add(name, klass, options = {})
      if valid?(klass)
        interfaces[name] = Proc.new { klass.new(options) }
        self
      end
    end

    def initial_state
      interfaces.values.map { |io| io.call.initial_state }
    end

    def event_loop
      interfaces.values.map { |io| io.call.event_loop }
    end

    private

    def valid?(klass)
      raise UndefinedInterface unless Object.const_defined?(klass.to_s)
      true
    end

    def interfaces
      @interfaces ||= {}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.0.8 lib/vedeu/interface/interfaces.rb