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