Class: Supabase::Postgrest::MaybeSingleRequestBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/supabase/postgrest/request_builder.rb

Overview

Returned by select().maybe_single() — yields the row or nil, raises on >1 result.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(request) ⇒ MaybeSingleRequestBuilder

Returns a new instance of MaybeSingleRequestBuilder.



451
452
453
# File 'lib/supabase/postgrest/request_builder.rb', line 451

def initialize(request)
  @request = request
end

Instance Attribute Details

#requestObject (readonly)

Returns the value of attribute request.



449
450
451
# File 'lib/supabase/postgrest/request_builder.rb', line 449

def request
  @request
end

Instance Method Details

#executeObject



460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
# File 'lib/supabase/postgrest/request_builder.rb', line 460

def execute
  response = RequestExec.send_with_retry(@request)
  unless (200..299).include?(response.status)
    raise RequestExec.parse_error(response)
  end

  parsed = APIResponse.from_response(response, request_prefer: @request.headers["Prefer"])
  return nil if parsed.data.is_a?(Array) && parsed.data.empty?

  if parsed.data.is_a?(Array) && parsed.data.length == 1
    SingleAPIResponse.new(data: parsed.data.first, count: parsed.count)
  else
    raise Errors::APIError.new(
      "message" => "Cannot coerce the result to a single JSON object",
      "code" => "406",
      "hint" => "Please check the result set",
      "details" => "The result contains more than one row."
    )
  end
end

#retry(enabled) ⇒ Object



455
456
457
458
# File 'lib/supabase/postgrest/request_builder.rb', line 455

def retry(enabled)
  @request.retry_enabled = enabled
  self
end