Sha256: d9f1f96d1fcd20b136e32b57d8043db1649a053df07507413a50d7fd325c4bda

Contents?: true

Size: 954 Bytes

Versions: 7

Compression:

Stored size: 954 Bytes

Contents

class Array

  unless method_defined?(:rotate)

    # Rotates an array's elements from back to front n times.
    #
    #   [1,2,3].rotate      #=> [2,3,1]
    #   [2,3,1].rotate      #=> [3,1,2]
    #   [3,1,2].rotate      #=> [1,2,3]
    #
    #   [1,2,3].rotate(3)   #=> [1,2,3]
    #
    # A negative parameter reverses the order from front to back.
    #
    #   [1,2,3].rotate(-1)  #=> [3,1,2]
    #
    # CREDIT: Florian Gross, Thomas Sawyer

    def rotate(n=1)
      self.dup.rotate!(n)
    end

  end

  unless method_defined?(:rotate!)

    # Same as #rotate, but acts in place.
    #
    #   a = [1,2,3]
    #   a.rotate!
    #   a  #=> [2,3,1]
    #
    # CREDIT: Florian Gross, Thomas Sawyer

    def rotate!(n=1)
      n = n.to_int
      return self if (n == 0 or self.empty?)
      if n < 0
        n.abs.times{ self.unshift( self.pop ) }
      else
        n.abs.times{ self.push( self.shift ) }
      end
      self
    end

  end

end

Version data entries

7 entries across 6 versions & 1 rubygems

Version Path
facets-2.9.3 lib/core/facets/array/rotate.rb
facets-2.9.2 lib/core/facets/array/rotate.rb
facets-2.9.2 src/core/facets/array/rotate.rb
facets-2.9.1 lib/core/facets/array/rotate.rb
facets-2.9.0 lib/core/facets/array/rotate.rb
facets-2.9.0.pre.2 lib/core/facets/array/rotate.rb
facets-2.9.0.pre.1 lib/core/facets/array/rotate.rb