Sha256: 994bf20aa0bbb717c79d32a3e25b43093144be3db07157f582df586a0c448cf3

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

#--
# Source:     http://tfletcher.com/lib/gradiate.rb
# Author::    Tim Fletcher
# Copyright:: Copyright (c) 2008, Tim Fletcher
# License::   Ruby License?
# Submit to Facets?:: Yes
# Developer notes::
# Changes::
# * 2009-01-11 (Tyler):
#   * Added some tests
#++

module Enumerable

  # Yields every nth object (if invoked with a block),
  # or returns an array of every nth object.
  #
  # every(2), for example, would return every other element from the enumerable:
  #
  #   [1, 2, 3, 4, 5, 6].every(2)               -> [1, 3, 5]
  #   [1, 2, 3, 4, 5, 6].every(2) { |i| ... }   -> nil
  #
  def every(n)
    result = [] unless block_given?
    each_with_index do |object, i|
      if i % n == 0
        block_given?? yield(object) : result << object
      end
    end
    return block_given?? nil : result
  end

end

#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test
require 'spec'
require_relative 'enum'

describe Enumerable.instance_method(:every) do
  it "without block, every(1)" do
    (1..6).every(1).should == (1..6).to_a
    [1, 2].every(1).should == [1, 2]
  end

  it "without block, every(2)" do
    (1..6).every(2).should == [1, 3, 5]
    [1, 2].every(2).should == [1]
  end

  it "without block, every(3)" do
    (1..7).every(3).should == [1, 4, 7]
    (0..7).every(3).should == [0, 3, 6]
  end

  it "with block, every(2)" do
    results = []
    (1..6).every(2) {|i| results << i.to_s}
    results.should == %w[1 3 5]
  end

  it "as Enumerator" do
    (1..6).enum(:every, 2).map(&:to_s).should == %w[1 3 5]
  end
end
=end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
quality_extensions-1.4.0 lib/quality_extensions/enumerable/every.rb