diff --git a/lib/sequent/core/projector.rb b/lib/sequent/core/projector.rb index b68461aa..53ff7c41 100644 --- a/lib/sequent/core/projector.rb +++ b/lib/sequent/core/projector.rb @@ -107,6 +107,12 @@ def initialize(persistor = Sequent::Core::Persistors::ActiveRecordPersistor.new) @persistor = persistor end + def self.on(*args, **opts, &block) + fail ArgumentError, 'only type based event handlers are allowed for projectors' unless args.all?(Class) + + super + end + def self.replay_persistor nil end diff --git a/spec/lib/sequent/core/projector_spec.rb b/spec/lib/sequent/core/projector_spec.rb index 0591a659..a1f5f8d5 100644 --- a/spec/lib/sequent/core/projector_spec.rb +++ b/spec/lib/sequent/core/projector_spec.rb @@ -8,6 +8,18 @@ class MyProjectorTable class MyProjectorEvent < Sequent::Core::Event end + it 'fails when non-type based event handler is present' do + expect do + Class.new(Sequent::Core::Projector) do + manages_no_tables + self.skip_autoregister = true + + on is_a(String) do + end + end + end.to raise_error(ArgumentError, 'only type based event handlers are allowed for projectors') + end + it 'fails when missing managed_tables' do class TestProjector1 < Sequent::Core::Projector self.skip_autoregister = true