Module: SorbetRails::ModelUtils

Extended by:
T::Helpers, T::Sig
Included in:
SorbetRails::ModelPlugins::Base, ModelRbiFormatter
Defined in:
lib/sorbet-rails/model_utils.rb

Overview

typed: strict

Instance Method Summary collapse

Instance Method Details

#add_relation_query_method(root, method_name, parameters: nil) ⇒ Object



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
86
87
88
89
90
91
# File 'lib/sorbet-rails/model_utils.rb', line 53

def add_relation_query_method(root, method_name, parameters: nil)
  # a relation querying method will be available on
  # - model (as a class method)
  # - activerecord relation
  # - asocciation collection proxy
  # - association relation
  # in case (1) and (2), it returns a Model::ActiveRecord_Relation
  # in case (3) and (4), it returns a Model::ActiveRecord_AssociationRelation

  # force generating these methods because sorbet's hidden-definitions generate & override them
  model_class_rbi = root.create_class(self.model_class_name)
  model_class_rbi.create_method(
    method_name,
    parameters: parameters,
    return_type: self.model_relation_class_name,
    class_method: true,
  )

  model_relation_rbi = root.create_class(self.model_relation_class_name)
  model_relation_rbi.create_method(
    method_name,
    parameters: parameters,
    return_type: self.model_relation_class_name,
  )

  model_assoc_relation_rbi = root.create_class(self.model_assoc_relation_class_name)
  model_assoc_relation_rbi.create_method(
    method_name,
    parameters: parameters,
    return_type: self.model_assoc_relation_class_name,
  )

  collection_proxy_rbi = root.create_class(self.model_assoc_proxy_class_name)
  collection_proxy_rbi.create_method(
    method_name,
    parameters: parameters,
    return_type: self.model_assoc_relation_class_name,
  )
end

#exists_class_method?(method_name) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/sorbet-rails/model_utils.rb', line 42

def exists_class_method?(method_name)
  model_class.respond_to?(method_name)
end

#exists_instance_method?(method_name) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/sorbet-rails/model_utils.rb', line 37

def exists_instance_method?(method_name)
  model_class.method_defined?(method_name)
end

#model_assoc_proxy_class_nameObject



22
23
24
# File 'lib/sorbet-rails/model_utils.rb', line 22

def model_assoc_proxy_class_name
  "#{model_class.name}::ActiveRecord_Associations_CollectionProxy"
end

#model_assoc_relation_class_nameObject



27
28
29
# File 'lib/sorbet-rails/model_utils.rb', line 27

def model_assoc_relation_class_name
  "#{model_class.name}::ActiveRecord_AssociationRelation"
end

#model_classObject



9
# File 'lib/sorbet-rails/model_utils.rb', line 9

def model_class; end

#model_class_nameObject



12
13
14
# File 'lib/sorbet-rails/model_utils.rb', line 12

def model_class_name
  "#{model_class.name}"
end

#model_module_name(module_name) ⇒ Object



32
33
34
# File 'lib/sorbet-rails/model_utils.rb', line 32

def model_module_name(module_name)
  "#{model_class.name}::#{module_name}"
end

#model_relation_class_nameObject



17
18
19
# File 'lib/sorbet-rails/model_utils.rb', line 17

def model_relation_class_name
  "#{model_class.name}::ActiveRecord_Relation"
end