lib/tapioca/compilers/dsl/active_job.rb in tapioca-0.4.22 vs lib/tapioca/compilers/dsl/active_job.rb in tapioca-0.4.23

- old
+ new

@@ -17,10 +17,11 @@ # # For example, with the following `ActiveJob` subclass: # # ~~~rb # class NotifyUserJob < ActiveJob::Base + # sig { params(user: User).returns(Mail) } # def perform(user) # # ... # end # end # ~~~ @@ -29,14 +30,14 @@ # # ~~~rbi # # notify_user_job.rbi # # typed: true # class NotifyUserJob - # sig { params(user: T.untyped).returns(NotifyUserJob) } + # sig { params(user: User).returns(T.any(NotifyUserJob, FalseClass)) } # def self.perform_later(user); end # - # sig { params(user: T.untyped).returns(NotifyUserJob) } + # sig { params(user: User).returns(Mail) } # def self.perform_now(user); end # end # ~~~ class ActiveJob < Base extend T::Sig @@ -46,19 +47,26 @@ root.path(constant) do |job| next unless constant.instance_methods(false).include?(:perform) method = constant.instance_method(:perform) parameters = compile_method_parameters_to_parlour(method) + return_type = compile_method_return_type_to_parlour(method) - %w[perform_later perform_now].each do |name| - create_method( - job, - name, - parameters: parameters, - return_type: constant.name, - class_method: true - ) - end + create_method( + job, + "perform_later", + parameters: parameters, + return_type: "T.any(#{constant.name}, FalseClass)", + class_method: true + ) + + create_method( + job, + "perform_now", + parameters: parameters, + return_type: return_type, + class_method: true + ) end end sig { override.returns(T::Enumerable[Module]) } def gather_constants