Sha256: eb8b03e35d91730c97b7a2afbd6cb91a7b2c288efbd3e3337830711bf3f64ed0

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

module Vedeu

  # This module is included in Vedeu::Interface to provide means to store client
  # application views created with {Vedeu.renders} or {Vedeu.views}.
  #
  module DisplayBuffer

    include Vedeu::Common

    # Store the view and immediate refresh it; causing to be pushed to the
    # Terminal.
    #
    # @return [Interface]
    def store_immediate
      store_deferred

      Vedeu::Refresh.by_name(name)

      self
    end

    # Store the view if it has a name. This view will be shown next time the
    # refresh event is triggered for the interface.
    #
    # @raise [InvalidSyntax] The name is not defined.
    # @return [Interface]
    def store_deferred
      unless defined_value?(name)
        fail InvalidSyntax, 'Cannot store an interface without a name.'
      end

      store_new_buffer

      self
    end

    private

    # Registers a set of buffers for the interface unless already registered,
    # and also adds interface's name to list of focussable interfaces.
    #
    # @see Vedeu::Buffer
    # @return [Interface]
    def store_new_buffer
      if Vedeu.buffers.registered?(name)
        Vedeu.buffers.find(name).add(self)

      else
        Vedeu::Buffer.new(name: name, back: self).store

      end

      self
    end

    # Registers interface name in focus list unless already registered.
    #
    # @return [Interface]
    def store_focusable
      Vedeu.focusable.add(name) unless Vedeu.focusable.registered?(name)

      self
    end

    # Registers a new cursor for the interface unless already registered.
    #
    # @return [Interface]
    def store_cursor
      Vedeu::Cursor.new(name: name).store unless Vedeu.cursors.registered?(name)

      self
    end

    # Registers a new group for the interface unless already registered.
    #
    # @return [Interface]
    def store_group
      unless group.nil? || group.empty? || Vedeu.groups.registered?(group)
        Vedeu::Group.new(members: name, name: group).store
      end

      self
    end

  end # DisplayBuffer

end # Vedeu

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.4.19 lib/vedeu/buffers/display_buffer.rb