antn
antn

Reputation: 23

How to handle memoization with nil values with Sorbet?

I have this method:

  def current_organization
    return @current_organization if defined?(@current_organization)

    subdomain = request.subdomain.to_s
    return @current_organization = nil if subdomain.blank?
    return @current_organization = nil if Allowable::DeniedSlugs.include?(subdomain)

    @current_organization = Organization.find_by(slug: subdomain)
  end

Because this file is typed: strict, I need to declare @current_organization, but this would mean that checking defined? would always be true. What is the correct pattern for handling nil for methods like this

Upvotes: 2

Views: 268

Answers (1)

Daniel Gilchrist
Daniel Gilchrist

Reputation: 81

You will have to declare @current_organization after checking defined? which can be done just above the find_by call

def current_organization
  return @current_organization if defined?(@current_organization)

  ...

  @current_organization = T.let(@current_organization, T.nilable(Organization))
  @current_organization = Organization.find_by(slug: subdomain)
end

Example on sorbet.run

Upvotes: 3

Related Questions