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
- #add_relation_query_method(root, method_name, parameters: nil) ⇒ Object
- #exists_class_method?(method_name) ⇒ Boolean
- #exists_instance_method?(method_name) ⇒ Boolean
- #model_assoc_proxy_class_name ⇒ Object
- #model_assoc_relation_class_name ⇒ Object
- #model_class ⇒ Object
- #model_class_name ⇒ Object
- #model_module_name(module_name) ⇒ Object
- #model_relation_class_name ⇒ Object
- #model_relation_type_alias ⇒ Object
- #model_relation_type_class_name ⇒ Object
Instance Method Details
#add_relation_query_method(root, method_name, parameters: nil) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/sorbet-rails/model_utils.rb', line 69 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
58 59 60 |
# File 'lib/sorbet-rails/model_utils.rb', line 58 def exists_class_method?(method_name) model_class.respond_to?(method_name) end |
#exists_instance_method?(method_name) ⇒ Boolean
53 54 55 |
# File 'lib/sorbet-rails/model_utils.rb', line 53 def exists_instance_method?(method_name) model_class.method_defined?(method_name) end |
#model_assoc_proxy_class_name ⇒ Object
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_name ⇒ Object
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_class ⇒ Object
9 |
# File 'lib/sorbet-rails/model_utils.rb', line 9 def model_class; end |
#model_class_name ⇒ Object
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
48 49 50 |
# File 'lib/sorbet-rails/model_utils.rb', line 48 def model_module_name(module_name) "#{model_class.name}::#{module_name}" end |
#model_relation_class_name ⇒ Object
17 18 19 |
# File 'lib/sorbet-rails/model_utils.rb', line 17 def model_relation_class_name "#{model_class.name}::ActiveRecord_Relation" end |
#model_relation_type_alias ⇒ Object
32 33 34 35 36 37 38 39 40 |
# File 'lib/sorbet-rails/model_utils.rb', line 32 def model_relation_type_alias types = [ self.model_relation_class_name, self.model_assoc_proxy_class_name, self.model_assoc_relation_class_name ].join(', ') "T.any(#{types})" end |
#model_relation_type_class_name ⇒ Object
43 44 45 |
# File 'lib/sorbet-rails/model_utils.rb', line 43 def model_relation_type_class_name 'RelationType' end |