Class: Tapioca::Dsl::Compilers::ActiveRecordAssociations
- Inherits:
-
Tapioca::Dsl::Compiler
- Object
- Tapioca::Dsl::Compiler
- Tapioca::Dsl::Compilers::ActiveRecordAssociations
- Extended by:
- T::Sig
- Includes:
- Helpers::ActiveRecordConstantsHelper
- Defined in:
- lib/tapioca/dsl/compilers/active_record_associations.rb
Overview
‘Tapioca::Dsl::Compilers::ActiveRecordAssociations` refines RBI files for subclasses of [`ActiveRecord::Base`](api.rubyonrails.org/classes/ActiveRecord/Base.html). This compiler is only responsible for defining the methods that would be created for the associations that are defined in the Active Record model.
For example, with the following model class:
~~~rb class Post < ActiveRecord::Base
belongs_to :category
has_many :comments
has_one :author, class_name: "User"
accepts_nested_attributes_for :category, :comments, :author
end ~~~
this compiler will produce the following methods in the RBI file ‘post.rbi`:
~~~rbi # post.rbi # typed: true
class Post
include Post::GeneratedAssociationMethods
module Post::GeneratedAssociationMethods
sig { returns(T.nilable(::User)) }
def ; end
sig { params(value: T.nilable(::User)).void }
def (value); end
sig { params(attributes: T.untyped).returns(T.untyped) }
def (attributes); end
sig { params(args: T.untyped, blk: T.untyped).returns(::User) }
def (*args, &blk); end
sig { params(args: T.untyped, blk: T.untyped).returns(::Category) }
def build_category(*args, &blk); end
sig { returns(T.nilable(::Category)) }
def category; end
sig { params(value: T.nilable(::Category)).void }
def category=(value); end
sig { params(attributes: T.untyped).returns(T.untyped) }
def category_attributes=(attributes); end
sig { returns(T::Array[T.untyped]) }
def comment_ids; end
sig { params(ids: T::Array[T.untyped]).returns(T::Array[T.untyped]) }
def comment_ids=(ids); end
sig { returns(::ActiveRecord::Associations::CollectionProxy[::Comment]) }
def comments; end
sig { params(value: T::Enumerable[::Comment]).void }
def comments=(value); end
sig { params(attributes: T.untyped).returns(T.untyped) }
def comments_attributes=(attributes); end
sig { params(args: T.untyped, blk: T.untyped).returns(::User) }
def (*args, &blk); end
sig { params(args: T.untyped, blk: T.untyped).returns(::User) }
def (*args, &blk); end
sig { params(args: T.untyped, blk: T.untyped).returns(::Category) }
def create_category(*args, &blk); end
sig { params(args: T.untyped, blk: T.untyped).returns(::Category) }
def create_category!(*args, &blk); end
sig { returns(T.nilable(::User)) }
def ; end
sig { returns(T.nilable(::Category)) }
def reload_category; end
sig { void }
def ; end
sig { void }
def reset_category; end
end
end ~~~ : [ConstantType = singleton(ActiveRecord::Base)]
Defined Under Namespace
Classes: MissingConstantError, SourceReflectionError
Constant Summary
Constants included from Helpers::ActiveRecordConstantsHelper
Helpers::ActiveRecordConstantsHelper::AssociationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::AssociationRelationClassName, Helpers::ActiveRecordConstantsHelper::AssociationRelationGroupChainClassName, Helpers::ActiveRecordConstantsHelper::AssociationRelationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::AssociationRelationWhereChainClassName, Helpers::ActiveRecordConstantsHelper::AssociationsCollectionProxyClassName, Helpers::ActiveRecordConstantsHelper::AttributeMethodsModuleName, Helpers::ActiveRecordConstantsHelper::CommonRelationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::DelegatedTypesModuleName, Helpers::ActiveRecordConstantsHelper::ReflectionType, Helpers::ActiveRecordConstantsHelper::RelationClassName, Helpers::ActiveRecordConstantsHelper::RelationGroupChainClassName, Helpers::ActiveRecordConstantsHelper::RelationMethodsModuleName, Helpers::ActiveRecordConstantsHelper::RelationWhereChainClassName, Helpers::ActiveRecordConstantsHelper::SecureTokensModuleName, Helpers::ActiveRecordConstantsHelper::StoredAttributesModuleName
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 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
145 146 147 |
# File 'lib/tapioca/dsl/compilers/active_record_associations.rb', line 145 def gather_constants descendants_of(::ActiveRecord::Base).reject(&:abstract_class?) end |
Instance Method Details
#decorate ⇒ Object
: -> void
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/tapioca/dsl/compilers/active_record_associations.rb', line 127 def decorate return if constant.reflections.empty? root.create_path(constant) do |model| model.create_module(AssociationMethodsModuleName) do |mod| populate_nested_attribute_writers(mod) populate_associations(mod) end model.create_include(AssociationMethodsModuleName) end end |