Sha256: 9eb258b825227d3260fadfc06ec3c551f03a85e66e8e9ff465741254ae4cceef

Contents?: true

Size: 1.47 KB

Versions: 1

Compression:

Stored size: 1.47 KB

Contents

module Vedeu

  class Point

    # @param (see #initialize)
    # @return (see #initialize)
    def self.coerce(value: nil, min: 1, max: nil)
      new(value: value, min: min, max: max).coerce
    end

    # @param (see #initialize)
    # @return (see #initialize)
    def self.valid?(value: nil, min: 1, max: nil)
      new(value: value, min: min, max: max).valid?
    end

    # @param value [Fixnum|NilClass]
    # @param min [Fixnum]
    # @param max [Fixnum]
    # @return [Vedeu::Point]
    def initialize(value: nil, min: 1, max: nil)
      @min   = min
      @max   = max
      @value = value
    end

    # @return [Vedeu::Point]
    def coerce
      fail Vedeu::Error::InvalidSyntax,
           "Expecting 'min' to be less than 'max'." if min > max

      if value < min
        Vedeu::Point.coerce(value: min, min: min, max: max)

      elsif value > max
        Vedeu::Point.coerce(value: max, min: min, max: max)

      else
        self

      end
    end

    # @return [Boolean]
    def valid?
      @value.is_a?(Fixnum) && @value >= min && @value <= max
    end

    # @return [Fixnum]
    def value
      @value ||= min
    end

    private

    # @return [Fixnum]
    def min
      return @min if @min.is_a?(Fixnum)

      fail Vedeu::Error::InvalidSyntax, "Expecting 'min' to be a Fixnum."
    end

    # @return [Fixnum]
    def max
      return @max if @max.is_a?(Fixnum)

      fail Vedeu::Error::InvalidSyntax, "Expecting 'max' to be a Fixnum."
    end

  end # Point

end # Vedeu

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.8.5 lib/vedeu/support/point.rb