Sha256: 26018dfc3c3d8c96de97d95630e7de99caba0d7f52e46464b4ecd229e1e3d6cd

Contents?: true

Size: 1.18 KB

Versions: 7

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true

module MetalArchives
  ##
  # Range which can start and/or end with +nil+
  #
  class Range
    include Comparable

    ##
    # Begin- and endpoint of range
    #
    attr_accessor :begin, :end

    ##
    # Create a new range
    #
    # [+_begin+]
    #     Start of range
    #
    #     Default: +nil+
    #
    # [+_end+]
    #     End of range
    #
    #     Default: +nil+
    #
    def initialize(_begin = nil, _end = nil)
      @begin = _begin
      @end = _end
    end

    ##
    # Whether start of range is present
    #
    def begin?
      !!@begin
    end

    ##
    # Whether end of range is present
    #
    def end?
      !!@end
    end

    ##
    # Comparison operator
    #
    def <=>(other)
      comp_begin = self.begin <=> other.begin
      comp_end = self.end <=> other.end
      # Return nil if begin or end is uncomparable
      return nil if comp_begin.nil? || comp_end.nil?

      # Compare end if begin is equal
      return comp_end if comp_begin.zero?

      # Compare begin if end is equal
      return comp_begin if comp_begin.zero?

      # Compare actual range
      (self.end - self.begin) <=> (other.end - other.begin)
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
metal_archives-2.2.0 lib/metal_archives/utils/range.rb
metal_archives-2.1.1 lib/metal_archives/utils/range.rb
metal_archives-2.1.0 lib/metal_archives/utils/range.rb
metal_archives-2.0.2 lib/metal_archives/utils/range.rb
metal_archives-2.0.1 lib/metal_archives/utils/range.rb
metal_archives-2.0.0 lib/metal_archives/utils/range.rb
metal_archives-1.0.0 lib/metal_archives/utils/range.rb