diff --git a/lib/rackstash/message.rb b/lib/rackstash/message.rb index 95a5b7d..786e218 100644 --- a/lib/rackstash/message.rb +++ b/lib/rackstash/message.rb @@ -83,7 +83,11 @@ module Rackstash end def dup_freeze(obj) - obj.frozen? ? obj : obj.dup.freeze + if obj.frozen? + obj + else + obj.dup.freeze rescue obj + end end end end diff --git a/spec/rackstash/message_spec.rb b/spec/rackstash/message_spec.rb index f099ce1..29f3f8a 100644 --- a/spec/rackstash/message_spec.rb +++ b/spec/rackstash/message_spec.rb @@ -26,6 +26,16 @@ describe Rackstash::Message do expect(message.message).to eq exception end + + it 'attempts to dup non-frozen objects' do + rational = Rational(2, 3) + expect(rational).to_not be_frozen + + message = Rackstash::Message.new(rational) + + expect(message.message).to_not be_frozen + expect(message.message).to equal rational + end end describe '#severity' do