1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require "sequel"

module Sequel
  module Plugins
    module Sole
      class TooManyRows < Sequel::Error; end

      module DatasetMethods
        def sole
          results = limit(2).all
          raise Sequel::NoMatchingRow.new(self) if results.empty?
          raise TooManyRows, "expected 1 row, got multiple" if results.length > 1

          results.first
        end
      end
    end
  end
end