class SorbetRails::ModelPlugins::ActiveStorageMethods
Public Class Methods
new(model_class, available_classes)
click to toggle source
Calls superclass method
SorbetRails::ModelPlugins::Base::new
# File lib/sorbet-rails/model_plugins/active_storage_methods.rb, line 5 def initialize(model_class, available_classes) super end
Public Instance Methods
create_has_many_methods(assoc_name, mod)
click to toggle source
# File lib/sorbet-rails/model_plugins/active_storage_methods.rb, line 46 def create_has_many_methods(assoc_name, mod) mod.create_method( assoc_name, return_type: 'T.nilable(ActiveStorage::Attached::Many)' ) mod.create_method( "#{assoc_name}=", parameters: [ Parameter.new('attachables', type: 'T.untyped') ], return_type: 'T.untyped' ) end
create_has_one_methods(assoc_name, mod)
click to toggle source
# File lib/sorbet-rails/model_plugins/active_storage_methods.rb, line 30 def create_has_one_methods(assoc_name, mod) mod.create_method( assoc_name, return_type: 'T.nilable(ActiveStorage::Attached::One)' ) mod.create_method( "#{assoc_name}=", parameters: [ Parameter.new('attachable', type: 'T.untyped') ], return_type: 'T.untyped' ) end
generate(root)
click to toggle source
# File lib/sorbet-rails/model_plugins/active_storage_methods.rb, line 10 def generate(root) # Check that ActiveStorage the attachment_reflections method exists # It was added in 6.0, so it isn't available for 5.2. return unless defined?(@model_class.attachment_reflections) && @model_class.attachment_reflections.length > 0 assoc_module_name = self.model_module_name("GeneratedAssociationMethods") assoc_module_rbi = root.create_module(assoc_module_name) attachment_reflections = @model_class.attachment_reflections.transform_values { |attachment| attachment.class } attachment_reflections.each do |assoc_name, attachment_type| if attachment_type.to_s == 'ActiveStorage::Reflection::HasOneAttachedReflection' create_has_one_methods(assoc_name, assoc_module_rbi) elsif attachment_type.to_s == 'ActiveStorage::Reflection::HasManyAttachedReflection' create_has_many_methods(assoc_name, assoc_module_rbi) end end end