# frozen_string_literal: true

require "dry-initializer"

module UseCase
  class Base
    extend Dry::Initializer

    def self.call(...) = new(...).call

    def call = raise NotImplementedError

    private

    def authorize!(verb, user, record, error_class: Errors::NotAuthorized)
      raise error_class unless Pundit.policy!(user, record).public_send("#{verb}?")
    end
  end
end