Class: Tapioca::Compilers::RailsOnSorbetAliasAssociation
- Inherits:
-
Dsl::Compiler
- Object
- Dsl::Compiler
- Tapioca::Compilers::RailsOnSorbetAliasAssociation
- Defined in:
- lib/tapioca/dsl/compilers/rails_on_sorbet_alias_association.rb
Overview
Creates .rbi files with types for classes that use ‘alias_association`
: [ConstantType = Class & ::Rails::On::Sorbet::AliasAssociation]
Class Method Summary collapse
Instance Method Summary collapse
-
#create_aliases(klass, alias_name, target_name) ⇒ Object
: (RBI::Scope, Symbol, Symbol) -> void.
-
#decorate ⇒ Object
:-> void.
Class Method Details
.gather_constants ⇒ Object
: -> Enumerable
13 14 15 16 17 |
# File 'lib/tapioca/dsl/compilers/rails_on_sorbet_alias_association.rb', line 13 def gather_constants all_classes.select do |klass| klass.singleton_class < ::Rails::On::Sorbet::AliasAssociation end end |
Instance Method Details
#create_aliases(klass, alias_name, target_name) ⇒ Object
: (RBI::Scope, Symbol, Symbol) -> void
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/tapioca/dsl/compilers/rails_on_sorbet_alias_association.rb', line 34 def create_aliases(klass, alias_name, target_name) association = constant.reflect_on_all_associations.find { |e| e.name == target_name } type_string = association.class_name.to_s type = "T.nilable(#{type_string})" klass.create_method( alias_name.to_s, return_type: type, ) klass.create_method( "#{alias_name}=", parameters: [create_param('val', type: type)], return_type: 'void', ) end |
#decorate ⇒ Object
:-> void
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/tapioca/dsl/compilers/rails_on_sorbet_alias_association.rb', line 22 def decorate definitions = constant._alias_association_definitions return unless definitions.present? root.create_path(constant) do |klass| definitions.each do |alias_name, target_name| create_aliases(klass, alias_name, target_name) end end end |