diff --git a/lib/mongo/operation/write/gle.rb b/lib/mongo/operation/write/gle.rb index 3b9ce95837..4401f3f63a 100644 --- a/lib/mongo/operation/write/gle.rb +++ b/lib/mongo/operation/write/gle.rb @@ -26,8 +26,8 @@ module GLE def execute_message(context) context.with_connection do |connection| - result_class = defined?(self.class::LegacyResult) ? self.class::LegacyResult : - defined?(self.class::Result) ? self.class::Result : Result + result_class = self.class.const_defined?(:LegacyResult, false) ? self.class::LegacyResult : + self.class.const_defined?(:Result, false) ? self.class::Result : Result result_class.new(connection.dispatch([ message, gle ].compact)).validate! end end diff --git a/lib/mongo/operation/write/write_command_enabled.rb b/lib/mongo/operation/write/write_command_enabled.rb index 50dc3aec19..f6064d0e1e 100644 --- a/lib/mongo/operation/write/write_command_enabled.rb +++ b/lib/mongo/operation/write/write_command_enabled.rb @@ -44,7 +44,7 @@ def execute(context) private def execute_write_command(context) - result_class = defined?(self.class::Result) ? self.class::Result : Result + result_class = self.class.const_defined?(:Result, false) ? self.class::Result : Result result_class.new(write_command_op.execute(context)).validate! end end diff --git a/spec/mongo/operation/result_spec.rb b/spec/mongo/operation/result_spec.rb index 6f33d1925d..9c193da627 100644 --- a/spec/mongo/operation/result_spec.rb +++ b/spec/mongo/operation/result_spec.rb @@ -272,4 +272,23 @@ end end end + + context 'when there is a top-level Result class defined' do + + before do + class Result + def get_result + Mongo::Client.new([DEFAULT_ADDRESS], TEST_OPTIONS).database.command(:ping => 1) + end + end + end + + let(:result) do + Result.new.get_result + end + + it 'uses the Result class of the operation' do + expect(result).to be_a(Mongo::Operation::Result) + end + end end