Sha256: 2026836de579ca10efc1aad63d1b2e2d856aa288ac64479cf9af9549e752d324

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

module Vedeu

  # Validates that the provided coordinates are within the terminal and
  # interface's geometry (with or without a border).
  #
  class PositionValidator

    extend Forwardable

    def_delegators :border,
                   :bx,
                   :bxn,
                   :by,
                   :byn

    # @!attribute [rw] x
    # @return [Fixnum]
    attr_accessor :x

    # @!attribute [rw] x
    # @return [Fixnum]
    attr_accessor :y

    # @param (see #initialize)
    def self.validate(name, x, y)
      new(name, x, y).validate
    end

    # Returns a new instance of Vedeu::PositionValidator.
    #
    # @param name [String]
    # @param x [Fixnum]
    # @param y [Fixnum]
    # @return [Vedeu::PositionValidator]
    def initialize(name, x, y)
      @name = name
      @x    = x
      @y    = y
    end

    # Ensures the coordinates provided are within the terminal, interface and
    # if applicable, bordered interface area.
    #
    # @return [PositionValidator]
    def validate
      @x = bx  if x < bx
      @x = bxn if x > bxn
      @y = by  if y < by
      @y = byn if y > byn

      self
    end

    protected

    # @!attribute [r] name
    # @return [String]
    attr_reader :name

    private

    # @see Vedeu::Borders#by_name
    def border
      @border ||= Vedeu.borders.by_name(name)
    end

  end # PositionValidator

end # Vedeu

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
vedeu-0.4.62 lib/vedeu/geometry/position_validator.rb
vedeu-0.4.61 lib/vedeu/geometry/position_validator.rb
vedeu-0.4.60 lib/vedeu/geometry/position_validator.rb
vedeu-0.4.59 lib/vedeu/geometry/position_validator.rb
vedeu-0.4.58 lib/vedeu/geometry/position_validator.rb
vedeu-0.4.57 lib/vedeu/geometry/position_validator.rb