Module: Rails::On::Sorbet::AliasAssociation

Included in:
ActiveRecord::Base
Defined in:
lib/rails/on/sorbet/alias_association.rb

Overview

@requires_ancestor: singleton(ActiveRecord::Base)

Instance Method Summary collapse

Instance Method Details

#_alias_association_definitionsObject

: -> Array[[Symbol, Symbol]]



33
34
35
# File 'lib/rails/on/sorbet/alias_association.rb', line 33

def _alias_association_definitions
  @_alias_association_definitions || []
end

#alias_association(alias_name, target_name) ⇒ Object

Create an alias for an association like ‘belongs_to` or `has_one`

class Foo < ApplicationRecord
  belongs_to :user
  alias_association :owner, :user
end
f = Foo.last
f.owner == f.user #=> true

: (Symbol, Symbol) -> void



17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/rails/on/sorbet/alias_association.rb', line 17

def alias_association(alias_name, target_name)
  @_alias_association_definitions ||= []
  @_alias_association_definitions << [alias_name, target_name]

  class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
    def #{alias_name}             # def service
      self.#{target_name}         #   self.merchant_service
    end                           # end

    def #{alias_name}=(val)       # def service=(val)
      self.#{target_name} = val   #   self.merchant_service = val
    end                           # end
  RUBY
end