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