Method: Enumerable#sole

Defined in:
lib/active_support/core_ext/enumerable.rb

#soleObject

Returns the sole item in the enumerable. If there are no items, or more than one item, raises Enumerable::SoleItemExpectedError.

["x"].sole          # => "x"
Set.new.sole        # => Enumerable::SoleItemExpectedError: no item found
{ a: 1, b: 2 }.sole # => Enumerable::SoleItemExpectedError: multiple items found


211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
# File 'lib/active_support/core_ext/enumerable.rb', line 211

def sole
  result = nil
  found = false

  each do |element|
    if found
      raise SoleItemExpectedError, "multiple items found"
    end

    result = element
    found = true
  end

  if found
    result
  else
    raise SoleItemExpectedError, "no item found"
  end
end