Sha256: 397f4dbcf07ac506e744e5c996365b6e2b26ef97563f83e69b3695d6c664d717

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

module Vedeu

  # Provides a mechanism for storing and retrieving events by name. A single
  # name can contain many events. Also, an event can trigger other events.
  module Events

    include Repository
    extend self

    # @see Vedeu::API#event
    def add(name, opts = {}, &block)
      Vedeu.log("Registering event: '#{name}'")

      options = opts.merge!({ event_name: name })

      storage[name][:events] << Event.new(block, options)
      storage[name]
    end
    alias_method :event, :add

    # @see Vedeu::API#unevent
    def remove(name)
      return false unless registered?(name)

      storage.delete(name) { false }

      true
    end
    alias_method :unevent, :remove

    # @see Vedeu::API#trigger
    def use(name, *args)
      results = storage[name][:events].map { |event| event.trigger(*args) }

      if results.one?
        results.first

      else
        results

      end
    end
    alias_method :trigger, :use

    private

    # Returns an empty collection ready for the storing of events by name with
    # associated event instance.
    #
    # @api private
    # @return [Hash]
    def in_memory
      Hash.new { |hash, key| hash[key] = { events: [] } }
    end

    # System events needed by Vedeu to run.
    add(:_clear_)                   { Terminal.clear_screen     }
    add(:_exit_)                    { Vedeu::Application.stop   }
    add(:_keypress_)                { |key| Vedeu.keypress(key) }
    add(:_log_)                     { |msg| Vedeu.log(msg)      }
    add(:_mode_switch_)             { fail ModeSwitch           }
    add(:_resize_, { delay: 0.25 }) { Vedeu.resize              }

  end # Events

end # Vedeu

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.2.3 lib/vedeu/repositories/events.rb