diff --git a/lib/rubyzen/collections/classes_collection.rb b/lib/rubyzen/collections/classes_collection.rb index 5073a4b..12c5a88 100644 --- a/lib/rubyzen/collections/classes_collection.rb +++ b/lib/rubyzen/collections/classes_collection.rb @@ -24,6 +24,14 @@ def attributes AttributesCollection.new(all_attributes) end + # Returns all constant references and assignments across every class. + # + # @return [ConstantsCollection] + def constants + all_constants = flat_map(&:constants) + ConstantsCollection.new(all_constants) + end + # Returns all macro invocations across every class. # # @return [MacrosCollection] diff --git a/spec/collections/classes_collection_spec.rb b/spec/collections/classes_collection_spec.rb index 22189dc..3170bc1 100644 --- a/spec/collections/classes_collection_spec.rb +++ b/spec/collections/classes_collection_spec.rb @@ -4,6 +4,7 @@ let(:file) do parse_ruby(<<~RUBY) class Foo < ApplicationController + DEFAULT_NAME = 'name' attr_reader :name validates_required :name @@ -37,6 +38,14 @@ def compute; end end end + describe '#constants' do + it 'returns all constants across classes' do + constants = classes.constants + expect(constants).to be_a(Rubyzen::Collections::ConstantsCollection) + expect(constants.map(&:name)).to include('DEFAULT_NAME') + end + end + describe '#macros' do it 'returns all macros across classes' do macros = classes.macros