Sha256: e8fa9df3cfc07ff3ebb70bfdfa7afbde39e031c945eeef1ca491e9a747eeb60a

Contents?: true

Size: 1.4 KB

Versions: 3

Compression:

Stored size: 1.4 KB

Contents

require 'virtus'

require 'vedeu'
require 'vedeu/models/attributes/line_collection'
require 'vedeu/models/colour'
require 'vedeu/models/style'
require 'vedeu/output/clear_interface'
require 'vedeu/output/render_interface'
require 'vedeu/models/geometry'
require 'vedeu/support/queue'
require 'vedeu/support/terminal'

# Todo: mutation (events, current)

module Vedeu
  class Interface
    include Vedeu::Queue
    include Virtus.model

    attribute :name,     String
    attribute :lines,    LineCollection
    attribute :colour,   Colour,   default: Colour.new
    attribute :style,    Style,    default: ''
    attribute :geometry, Geometry, default: Geometry.new
    attribute :current,  String,   default: ''
    attribute :cursor,   Boolean,  default: true
    attribute :delay,    Float,    default: 0

    def initialize(attributes = {})
      super

      Vedeu.events.on(:refresh, self.delay) { refresh }

      self
    end

    def clear
      @_clear ||= ClearInterface.call(self)
    end

    def enqueue
      super(self.to_s)
    end

    def refresh
      if enqueued?
        self.current = dequeue

      elsif no_content?
        self.current = clear

      else
        self.current

      end
      Terminal.output(self.current)

      self.current
    end

    def to_s
      RenderInterface.call(self)
    end

    private

    def no_content?
      self.current.nil? || self.current.empty?
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vedeu-0.1.6 lib/vedeu/models/interface.rb
vedeu-0.1.5 lib/vedeu/models/interface.rb
vedeu-0.1.4 lib/vedeu/models/interface.rb