From fdedc078f93292449dbad14295982c006c5ab877 Mon Sep 17 00:00:00 2001 From: Tobias Svensson Date: Tue, 17 Sep 2013 16:48:08 +0100 Subject: [PATCH] Add SubclassTracking module. --- lib/sidetiq/subclass_tracking.rb | 20 ++++++++++++++++++++ test/test_subclass_tracking.rb | 22 ++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 lib/sidetiq/subclass_tracking.rb create mode 100644 test/test_subclass_tracking.rb diff --git a/lib/sidetiq/subclass_tracking.rb b/lib/sidetiq/subclass_tracking.rb new file mode 100644 index 0000000..07e18b7 --- /dev/null +++ b/lib/sidetiq/subclass_tracking.rb @@ -0,0 +1,20 @@ +module Sidetiq + module SubclassTracking + def subclasses(deep = false) + @subclasses ||= [] + + if deep + @subclasses.inject([]) do |all, subclass| + (all << subclass) + subclass.subclasses(true) + end + else + @subclasses + end + end + + def inherited(klass) + super + subclasses << klass + end + end +end diff --git a/test/test_subclass_tracking.rb b/test/test_subclass_tracking.rb new file mode 100644 index 0000000..b718d7c --- /dev/null +++ b/test/test_subclass_tracking.rb @@ -0,0 +1,22 @@ +require_relative 'helper' + +class TestSubclassTracking < Sidetiq::TestCase + class Foo + extend Sidetiq::SubclassTracking + end + + class Bar < Foo + end + + class Baz < Bar + end + + def test_subclasses_non_recursive + assert_equal [Bar], Foo.subclasses + end + + def test_subclasses_recursive + assert_equal [Bar, Baz], Foo.subclasses(true) + end +end +