class Enumerator

Public Instance Methods

result!(&block) click to toggle source

Iterates the Enumerator with a given block, and checks that the result is not nil. Raises an exception if the result is nil. Otherwise, returns the non-nil result.

@example

[1, 2, 3].find.result!(&:even?)  # == 2
[1, 3, 5].find.result!(&:even?)  # raises exception

@return [Object] @raise [ArgumentError]

if no +block+ is provided

@raise [MiniSanity::Error]

if iterating results in a nil value
# File lib/mini_sanity/results.rb, line 55
def result!(&block)
  raise ArgumentError, "Enumerator#result! requires a block" unless block

  result = self.each(&block)

  if result.nil?
    raise MiniSanity::Error.new("Nil result from Enumerator with block", {
      "Enumerator" => self.inspect,
      "Block" => MiniSanity::Error.describe_block(&block),
    })
  end

  result
end
results!(&block) click to toggle source

Iterates the Enumerator with a given block, and checks that the result is an Enumerable that has one or more elements. Raises an exception if this check fails. Otherwise, returns the Enumerable result.

@example

[1, 2, 3].select.results!(&:odd?)  # == [1, 3]
[2, 4, 6].select.results!(&:odd?)  # raises exception

@return [Enumerable] @raise [ArgumentError]

if no +block+ is provided

@raise [MiniSanity::Error]

if iterating does not result in an Enumerable, or if the resulting
Enumerable has no elements
# File lib/mini_sanity/results.rb, line 21
def results!(&block)
  raise ArgumentError, "Enumerator#results! requires a block" unless block

  results = self.each(&block)

  if !results.is_a?(Enumerable)
    raise MiniSanity::Error.new("Result from Enumerator with block is not an Enumerable", {
      "Enumerator" => self.inspect,
      "Block" => MiniSanity::Error.describe_block(&block),
      "Result" => results.inspect,
    })
  elsif !results.any?{ true }
    raise MiniSanity::Error.new("No results from Enumerator with block", {
      "Enumerator" => self.inspect,
      "Block" => MiniSanity::Error.describe_block(&block),
    })
  end

  results
end