diff --git a/lib/ruote/engine.rb b/lib/ruote/engine.rb index df1151ab..260c1bd3 100644 --- a/lib/ruote/engine.rb +++ b/lib/ruote/engine.rb @@ -521,15 +521,13 @@ def load_definition (path) # containing the participant implementation. 'require' will load and eval # the ruby code only once, 'load' each time. # - def register_participant (regex, participant=nil, opts=nil, &block) + def register_participant (regex, participant=nil, opts={}, &block) if participant.is_a?(Hash) opts = participant participant = nil end - opts ||= {} - pa = @context.plist.register(regex, participant, opts, block) @context.storage.put_msg('participant_registered', 'regex' => regex.to_s) diff --git a/lib/ruote/svc/participant_list.rb b/lib/ruote/svc/participant_list.rb index 08e32da9..18679c0b 100644 --- a/lib/ruote/svc/participant_list.rb +++ b/lib/ruote/svc/participant_list.rb @@ -47,6 +47,11 @@ def initialize (context) # def register (name, participant, options, block) + raise( + ArgumentError.new( + "can only accept strings (classnames) or classes as participant arg") + ) unless [ String, Class, NilClass ].include?(participant.class) + klass = (participant || Ruote::BlockParticipant).to_s options = options.inject({}) { |h, (k, v)| diff --git a/test/functional/ft_3_participant_registration.rb b/test/functional/ft_3_participant_registration.rb index 7479eadc..4446ab99 100644 --- a/test/functional/ft_3_participant_registration.rb +++ b/test/functional/ft_3_participant_registration.rb @@ -410,5 +410,15 @@ def test_register_block_catchall_default %w[ Ruote::StorageParticipant ], @engine.participant_list.collect { |pe| pe.classname }) end + + def test_argument_error_on_instantiated_participant + + assert_raise ArgumentError do + @engine.register 'alpha', Ruote::StorageParticipant.new + end + assert_raise ArgumentError do + @engine.register 'alpha', Ruote::StorageParticipant.new, 'hello' => 'kitty' + end + end end