Sha256: 5a3fc103b31856ae044f3a3ed1fb32d42ff11b76c8d262bbe597ab58357d48fd
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
# frozen_string_literal: true module Orthoses class DelegateClass def initialize(loader) @loader = loader end def call require 'delegate' classes = [] Class.class_eval do define_method(:inherited) do |subclass| classes << [subclass, self] end end delegate_class_super_map = {} delegate_class_tracer = TracePoint.new(:return) do |tp| return_value = tp.return_value superclass = tp.binding.local_variable_get(:superclass) delegate_class_super_map[return_value] = superclass end store = delegate_class_tracer.enable(target: method(:DelegateClass)) do @loader.call end classes.each do |subclass, superclass| if delegate_to_class = delegate_class_super_map[superclass] subclass_name = Utils.module_name(subclass) next unless subclass_name delegate_to_class_name = Utils.module_name(delegate_to_class) next unless delegate_to_class_name store[subclass_name].header = "class #{subclass_name} < #{delegate_to_class_name}" end end store end def from_DelegateClass?(klass) klass.name.nil? && klass.superclass == Delegator && klass.instance_methods.include?(:__setobj__) && klass.instance_method(:__setobj__).source_location.first.end_with?("delegate.rb") end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
orthoses-0.1.0 | lib/orthoses/delegate_class.rb |