Sha256: 6d8765e6e3a3e99417c5140b82526c1660a0d796903ead21830903a56112d36a

Contents?: true

Size: 1.29 KB

Versions: 4

Compression:

Stored size: 1.29 KB

Contents

module Vedeu

  class ContentGeometry

    extend Forwardable

    def_delegators :interface,
      :lines?,
      :lines,
      :geometry

    def_delegators :geometry,
      :height,
      :width,
      :x,
      :y

    # @param interface [Vedeu::Interface]
    # @return [Vedeu::ContentGeometry]
    def initialize(interface)
      @interface = interface
    end

    # Returns log friendly output.
    #
    # @return [String]
    def inspect
      "<#{self.class.name} (y:#{y} x:#{x} yn:#{yn} xn:#{xn})>"
    end

    # Returns the height of the content, or when no content, the visible height
    # of the interface.
    #
    # @return [Fixnum]
    def yn
      [rows, height].max
    end

    # Returns the width of the content, or when no content, the visible width of
    # the interface.
    #
    # @return [Fixnum]
    def xn
      [columns, width].max
    end

    private

    attr_reader :interface

    # Returns the number of lines of content for this interface.
    #
    # @return [Fixnum]
    def rows
      return height unless lines?

      lines.size
    end

    # Returns the character length of the longest line for this interface.
    #
    # @return [Fixnum]
    def columns
      return width unless lines?

      lines.map { |line| line.size }.max
    end

  end # ContentGeometry

end # Vedeu

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
vedeu-0.3.4 lib/vedeu/support/content_geometry.rb
vedeu-0.3.3 lib/vedeu/support/content_geometry.rb
vedeu-0.3.2 lib/vedeu/support/content_geometry.rb
vedeu-0.3.1 lib/vedeu/support/content_geometry.rb