Class: Tapioca::Dsl::Compilers::SidekiqWorker
- Inherits:
-
Tapioca::Dsl::Compiler
- Object
- Tapioca::Dsl::Compiler
- Tapioca::Dsl::Compilers::SidekiqWorker
- Extended by:
- T::Sig
- Defined in:
- lib/tapioca/dsl/compilers/sidekiq_worker.rb
Overview
Tapioca::Dsl::Compilers::SidekiqWorker generates RBI files classes that include [Sidekiq::Worker](github.com/mperham/sidekiq/wiki/Getting-Started).
For example, with the following class that includes Sidekiq::Worker:
~~~rb class NotifierWorker
include Sidekiq::Worker
def perform(customer_id)
# ...
end
end ~~~
this compiler will produce the RBI file notifier_worker.rbi with the following content:
~~~rbi # notifier_worker.rbi # typed: true class NotifierWorker
sig { params(customer_id: T.untyped).returns(String) }
def self.perform_async(customer_id); end
sig { params(interval: T.any(DateTime, Time), customer_id: T.untyped).returns(String) }
def self.perform_at(interval, customer_id); end
sig { params(interval: Numeric, customer_id: T.untyped).returns(String) }
def self.perform_in(interval, customer_id); end
end ~~~
If your project uses ActiveSupport as well, then the compiler will automatically add its classes as accepted values for the interval parameter:
-
self.perform_atwill also accept aActiveSupport::TimeWithZonevalue -
self.perform_inwill also accept aActiveSupport::Durationvalue
Constant Summary collapse
- ConstantType =
type_member { { fixed: T.class_of(::Sidekiq::Worker) } }
Constants included from Runtime::Reflection
Runtime::Reflection::ANCESTORS_METHOD, Runtime::Reflection::CLASS_METHOD, Runtime::Reflection::CONSTANTS_METHOD, Runtime::Reflection::EQUAL_METHOD, Runtime::Reflection::METHOD_METHOD, Runtime::Reflection::NAME_METHOD, Runtime::Reflection::OBJECT_ID_METHOD, Runtime::Reflection::PRIVATE_INSTANCE_METHODS_METHOD, Runtime::Reflection::PROTECTED_INSTANCE_METHODS_METHOD, Runtime::Reflection::PUBLIC_INSTANCE_METHODS_METHOD, Runtime::Reflection::REQUIRED_FROM_LABELS, Runtime::Reflection::SINGLETON_CLASS_METHOD, Runtime::Reflection::SUPERCLASS_METHOD, Runtime::Reflection::SignatureBlockError, Runtime::Reflection::UNDEFINED_CONSTANT
Constants included from SorbetHelper
SorbetHelper::FEATURE_REQUIREMENTS, SorbetHelper::SORBET_BIN, SorbetHelper::SORBET_EXE_PATH_ENV_VAR, SorbetHelper::SORBET_GEM_SPEC, SorbetHelper::SORBET_PAYLOAD_URL, SorbetHelper::SPOOM_CONTEXT
Instance Attribute Summary
Attributes inherited from Tapioca::Dsl::Compiler
Class Method Summary collapse
Instance Method Summary collapse
-
#decorate ⇒ Object
: -> void.
Methods inherited from Tapioca::Dsl::Compiler
#add_error, #compiler_enabled?, handles?, #initialize, processable_constants, requested_constants=, reset_state
Methods included from T::Generic::TypeStoragePatch
#[], #has_attached_class!, #type_member, #type_template
Methods included from Runtime::Reflection
#abstract_type_of, #ancestors_of, #are_equal?, #class_of, #const_source_location, #constant_defined?, #constantize, #constants_of, #descendants_of, #file_candidates_for, #final_module?, #inherited_ancestors_of, #method_of, #name_of, #name_of_type, #object_id_of, #private_instance_methods_of, #protected_instance_methods_of, #public_instance_methods_of, #qualified_name_of, #resolve_loc, #sealed_module?, #signature_of, #signature_of!, #singleton_class_of, #superclass_of
Methods included from Runtime::AttachedClassOf
Methods included from RBIHelper
#as_nilable_type, #as_non_nilable_type, #create_block_param, #create_kw_opt_param, #create_kw_param, #create_kw_rest_param, #create_opt_param, #create_param, #create_rest_param, #create_typed_param, #sanitize_signature_types, serialize_type_variable, #valid_method_name?, #valid_parameter_name?
Methods included from SorbetHelper
#sorbet, #sorbet_path, #sorbet_supports?
Constructor Details
This class inherits a constructor from Tapioca::Dsl::Compiler
Class Method Details
.gather_constants ⇒ Object
: -> T::Enumerable
92 93 94 |
# File 'lib/tapioca/dsl/compilers/sidekiq_worker.rb', line 92 def gather_constants all_classes.select { |c| Sidekiq::Worker > c } end |
Instance Method Details
#decorate ⇒ Object
: -> void
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/tapioca/dsl/compilers/sidekiq_worker.rb', line 51 def decorate return unless constant.instance_methods.include?(:perform) root.create_path(constant) do |worker| method_def = constant.instance_method(:perform) async_params = compile_method_parameters_to_rbi(method_def) # `perform_at` and is just an alias for `perform_in` so both methods technically # accept a datetime, time, or numeric but we're typing them differently so they # semantically make sense. at_return_type = if defined?(ActiveSupport::TimeWithZone) "T.any(DateTime, Time, ActiveSupport::TimeWithZone)" else "T.any(DateTime, Time)" end at_params = [ create_param("interval", type: at_return_type), *async_params, ] in_return_type = if defined?(ActiveSupport::Duration) "T.any(Numeric, ActiveSupport::Duration)" else "Numeric" end in_params = [ create_param("interval", type: in_return_type), *async_params, ] generate_perform_method(worker, "perform_async", async_params) generate_perform_method(worker, "perform_at", at_params) generate_perform_method(worker, "perform_in", in_params) end end |