Module: Tapioca::Runtime::Trackers::Mixin

Extended by:
T::Sig, Tracker
Defined in:
lib/tapioca/runtime/trackers/mixin.rb

Defined Under Namespace

Classes: Type

Class Method Summary collapse

Methods included from Tracker

disable!, enabled?, extended, with_disabled_tracker

Class Method Details

.constants_with_mixin(mixin) ⇒ Object

: (Module mixin) -> Hash[Type, Hash[Module, String]]



53
54
55
# File 'lib/tapioca/runtime/trackers/mixin.rb', line 53

def constants_with_mixin(mixin)
  find_or_initialize_mixin_lookup(mixin)
end

.mixin_location(mixin, mixin_type, constant) ⇒ Object

: (Module mixin, Type mixin_type, Module constant) -> String?



58
59
60
# File 'lib/tapioca/runtime/trackers/mixin.rb', line 58

def mixin_location(mixin, mixin_type, constant)
  find_or_initialize_mixin_lookup(mixin).dig(mixin_type, constant)
end

.register(constant, mixin, mixin_type) ⇒ Object

: (Module constant, Module mixin, Type mixin_type) -> void



31
32
33
34
35
36
37
38
# File 'lib/tapioca/runtime/trackers/mixin.rb', line 31

def register(constant, mixin, mixin_type)
  return unless enabled?

  location = Reflection.resolve_loc(caller_locations)
  return unless location

  register_with_location(constant, mixin, mixin_type, location.file)
end

.resolve_to_attached_class(constant, mixin, mixin_type) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/tapioca/runtime/trackers/mixin.rb', line 40

def resolve_to_attached_class(constant, mixin, mixin_type)
  attached_class = Reflection.attached_class_of(constant)
  return unless attached_class

  if mixin_type == Type::Include || mixin_type == Type::Prepend
    location = mixin_location(mixin, mixin_type, constant)
    register_with_location(constant, mixin, Type::Extend, T.must(location))
  end

  attached_class
end

.with_disabled_registration(&block) ⇒ Object

: [Result] { -> Result } -> Result



26
27
28
# File 'lib/tapioca/runtime/trackers/mixin.rb', line 26

def with_disabled_registration(&block)
  with_disabled_tracker(&block)
end