travis-api/lib/travis/api/app/extensions/subclass_tracker.rb
2012-07-27 15:55:57 +02:00

26 lines
673 B
Ruby

require 'travis/api/app'
class Travis::Api::App
module Extensions
# Keeps track of subclasses. Used for endpoint and middleware detection.
# This will prevent garbage collection of subclasses.
module SubclassTracker
def direct_subclasses
@direct_subclasses ||= []
end
# List of "leaf" subclasses (ie subclasses without subclasses).
def subclasses
return [self] if direct_subclasses.empty?
direct_subclasses.map(&:subclasses).flatten.uniq
end
def inherited(subclass)
super
subclass.set app_file: caller_files.first
direct_subclasses << subclass
end
end
end
end