Sha256: edb1c7799bc13a5f28734f4ec55017265e10f9f0655b38328554fb78c326e5a2
Contents?: true
Size: 1.9 KB
Versions: 1
Compression:
Stored size: 1.9 KB
Contents
require 'forwardable' require 'virtus' require 'vedeu' require 'vedeu/models/attributes/line_collection' require 'vedeu/models/colour' require 'vedeu/models/style' require 'vedeu/output/clear' require 'vedeu/output/render' require 'vedeu/models/geometry' require 'vedeu/support/terminal' # Todo: mutation (events, current) module Vedeu class Interface extend Forwardable include Virtus.model attribute :name, String attribute :group, 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 attribute :buffer, Array, default: [] def_delegators :@geometry, :north, :east, :south, :west, :top, :right, :bottom, :left, :width, :height, :origin def initialize(attributes = {}) super Vedeu.events.on(:_refresh_, self.delay) { refresh } Vedeu.events.on("_refresh_#{name}_".to_sym, self.delay) { refresh } unless group.nil? || group.empty? Vedeu.events.on("_refresh_group_#{group}_".to_sym, self.delay) do refresh end end self end def clear @_clear ||= Clear.call(self) end def dequeue buffer.pop end def enqueue buffer.unshift(self.to_s) end def refresh if buffer.any? self.current = buffer.pop elsif no_content? self.current = clear else self.current end Terminal.output(self.current) self.current end def to_s Render.call(self) end private def no_content? self.current.nil? || self.current.empty? end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
vedeu-0.1.8 | lib/vedeu/models/interface.rb |