Sha256: 2fce198cd10610a7cc9e3bb19db9fd29cac5ad902e26c783d767b99f90374b30

Contents?: true

Size: 1.17 KB

Versions: 5

Compression:

Stored size: 1.17 KB

Contents

class Fixnum
  # Augment Fixnum to calculate column width in a grid-based layout.
  #
  # The grid system splits the terminal width into 12 equal parts, by dividing
  # the available width by 12. If the terminal width is not a multiple of 12,
  # then Grid chooses the maximum value which will fit.
  #
  # Used primarily at interface creation time:
  #
  #   width: 9.columns  # (Terminal width / 12) * 9 characters wide; e.g.
  #                     # Terminal is 92 characters wide, maximum value is
  #                     # therefore 84, meaning a column is 7 characters wide.
  def columns
     Vedeu::API::Grid.columns(self)
  end
end

module Vedeu
  module API
    OutOfRange = Class.new(StandardError)

    class Grid
      def self.columns(value)
        new(value).columns
      end

      def initialize(value)
        @value = value
      end

      def columns
        fail OutOfRange, 'Valid range is 1..12.' if out_of_range?

        column * value
      end

      private

      attr_reader :value

      def column
        actual / 12
      end

      def actual
        Terminal.width
      end

      def out_of_range?
        value < 1 || value > 12
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
vedeu-0.1.15 lib/vedeu/api/grid.rb
vedeu-0.1.14 lib/vedeu/api/grid.rb
vedeu-0.1.13 lib/vedeu/api/grid.rb
vedeu-0.1.12 lib/vedeu/api/grid.rb
vedeu-0.1.10 lib/vedeu/api/grid.rb