Class: Tapioca::Compilers::Dsl::ActiveSupportCurrentAttributes
- Extended by:
- T::Sig
- Defined in:
- lib/tapioca/compilers/dsl/active_support_current_attributes.rb
Overview
‘Tapioca::Compilers::Dsl::ActiveSupportCurrentAttributes` decorates RBI files for all subclasses of [`ActiveSupport::CurrentAttributes`](api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html).
For example, with the following singleton class
~~~rb class Current < ActiveSupport::CurrentAttributes
extend T::Sig
attribute :account
def helper
# ...
end
sig { params(user_id: Integer).void }
def authenticate(user_id)
# ...
end
end ~~~
this generator will produce an RBI file with the following content: ~~~rbi # typed: true
class Current
sig { returns(T.untyped) }
def self.account; end
sig { returns(T.untyped) }
def account; end
sig { params(account: T.untyped).returns(T.untyped) }
def self.account=(account); end
sig { params(account: T.untyped).returns(T.untyped) }
def account=(account); end
sig { params(user_id: Integer).void }
def self.authenticate(user_id); end
sig { returns(T.untyped) }
def self.helper; end
end ~~~
Instance Attribute Summary
Attributes inherited from Base
Instance Method Summary collapse
Methods inherited from Base
Constructor Details
This class inherits a constructor from Tapioca::Compilers::Dsl::Base
Instance Method Details
#decorate(root, constant) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/tapioca/compilers/dsl/active_support_current_attributes.rb', line 73 def decorate(root, constant) dynamic_methods = dynamic_methods_for(constant) instance_methods = instance_methods_for(constant) - dynamic_methods return if dynamic_methods.empty? && instance_methods.empty? root.path(constant) do |current_attributes| dynamic_methods.each do |method| method = method.to_s # We want to generate each method both on the class generate_method(current_attributes, method, class_method: true) # and on the instance generate_method(current_attributes, method, class_method: false) end instance_methods.each do |method| # instance methods are only elevated to class methods # no need to add separate instance methods for them method = constant.instance_method(method) create_method_from_def(current_attributes, method, class_method: true) end end end |
#gather_constants ⇒ Object
97 98 99 |
# File 'lib/tapioca/compilers/dsl/active_support_current_attributes.rb', line 97 def gather_constants ::ActiveSupport::CurrentAttributes.descendants end |