diff --git a/lib/unread/base.rb b/lib/unread/base.rb index 3cfa080..a1289c6 100644 --- a/lib/unread/base.rb +++ b/lib/unread/base.rb @@ -8,7 +8,11 @@ def acts_as_reader ReadMark.reader_classes ||= [] unless ReadMark.reader_classes.include?(self) - ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks + if ActiveRecord::VERSION::MAJOR < 5 + ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks + else + ReadMark.belongs_to :reader, polymorphic: true, inverse_of: :read_marks, optional: true + end has_many :read_marks, dependent: :delete_all, as: :reader, inverse_of: :reader diff --git a/spec/unread/readable_spec.rb b/spec/unread/readable_spec.rb index c8add8c..ef275fc 100644 --- a/spec/unread/readable_spec.rb +++ b/spec/unread/readable_spec.rb @@ -253,6 +253,34 @@ expect(@reader.read_marks.single.count).to eq 1 end + + context 'when the reader class defines a default_scope that excludes tha reader instance' do + before { ReadMark.stub(belongs_to_required_by_default: true) } + + let!(:reader_class) do + CustomReader = Class.new(ActiveRecord::Base) do + self.primary_key = 'number' + self.table_name = 'readers' + + acts_as_reader + + default_scope { where.not(name: 'foo') } + end + end + let!(:reader) { reader_class.create!(name: 'foo') } + let(:document) { Document.create! } + + before do + wait + document + end + + subject { document.mark_as_read!(for: reader) } + + it 'does not raise_error' do + expect { subject }.not_to raise_error + end + end end describe '.mark_as_read!' do