Merge pull request #985 from hired/optional-item

Support belongs_to_required_by_default
This commit is contained in:
Jared Beck 2017-08-30 21:05:58 -04:00 committed by GitHub
commit 935999d03a
9 changed files with 55 additions and 15 deletions

View File

@ -15,7 +15,8 @@ recommendations of [keepachangelog.com](http://keepachangelog.com/).
### Fixed
- None
- [#985](https://github.com/airblade/paper_trail/pull/985) - Fix RecordInvalid error on nil item
association when belongs_to_required_by_default is enabled.
## 7.1.1 (2017-08-18)

View File

@ -12,7 +12,11 @@ module PaperTrail
extend ::ActiveSupport::Concern
included do
belongs_to :item, polymorphic: true
if ActiveRecord.gem_version >= Gem::Version.new("5.0")
belongs_to :item, polymorphic: true, optional: true
else
belongs_to :item, polymorphic: true
end
# Since the test suite has test coverage for this, we want to declare
# the association when the test suite is running. This makes it pass when

View File

@ -20,9 +20,14 @@ class BeforeDestroyModifier < CallbackModifier
paper_trail.on_destroy :before
end
class AfterDestroyModifier < CallbackModifier
has_paper_trail on: []
paper_trail.on_destroy :after
if ActiveRecord.gem_version < Gem::Version.new("5") ||
!ActiveRecord::Base.belongs_to_required_by_default
class AfterDestroyModifier < CallbackModifier
has_paper_trail on: []
paper_trail.on_destroy :after
end
end
class NoArgDestroyModifier < CallbackModifier

View File

@ -1,3 +1,7 @@
class Fluxor < ActiveRecord::Base
belongs_to :widget
if ActiveRecord.gem_version >= Gem::Version.new("5.0")
belongs_to :widget, optional: true
else
belongs_to :widget
end
end

View File

@ -1,7 +1,13 @@
class Person < ActiveRecord::Base
has_many :authorships, foreign_key: :author_id, dependent: :destroy
has_many :books, through: :authorships
belongs_to :mentor, class_name: "Person", foreign_key: :mentor_id
if ActiveRecord.gem_version >= Gem::Version.new("5.0")
belongs_to :mentor, class_name: "Person", foreign_key: :mentor_id, optional: true
else
belongs_to :mentor, class_name: "Person", foreign_key: :mentor_id
end
has_paper_trail
# Convert strings to TimeZone objects when assigned

View File

@ -1,4 +1,9 @@
class Whatchamajigger < ActiveRecord::Base
has_paper_trail
belongs_to :owner, polymorphic: true
if ActiveRecord.gem_version >= Gem::Version.new("5.0")
belongs_to :owner, polymorphic: true, optional: true
else
belongs_to :owner, polymorphic: true
end
end

View File

@ -1,6 +1,11 @@
class Wotsit < ActiveRecord::Base
has_paper_trail
belongs_to :widget
if ActiveRecord.gem_version >= Gem::Version.new("5.0")
belongs_to :widget, optional: true
else
belongs_to :widget
end
def created_on
created_at.to_date

View File

@ -31,7 +31,12 @@ module Dummy
if v >= Gem::Version.new("4.2") && v < Gem::Version.new("5.0.0.beta1")
config.active_record.raise_in_transactional_callbacks = true
end
if v >= Gem::Version.new("5.0.0.beta1")
if v >= Gem::Version.new("5.0.0.beta1") && v < Gem::Version.new("5.1")
config.active_record.belongs_to_required_by_default = true
config.active_record.time_zone_aware_types = [:datetime]
end
if v >= Gem::Version.new("5.1")
config.load_defaults "5.1"
config.active_record.time_zone_aware_types = [:datetime]
end
end

View File

@ -15,12 +15,17 @@ RSpec.describe CallbackModifier, type: :model, versioning: true do
end
end
context "when :after" do
it "creates the version after destroy" do
modifier = AfterDestroyModifier.create!(some_content: FFaker::Lorem.sentence)
modifier.test_destroy
expect(modifier.versions.last.reify).to be_flagged_deleted
if ActiveRecord.gem_version < Gem::Version.new("5") ||
!ActiveRecord::Base.belongs_to_required_by_default
context "when :after" do
it "creates the version after destroy" do
modifier = AfterDestroyModifier.create!(some_content: FFaker::Lorem.sentence)
modifier.test_destroy
expect(modifier.versions.last.reify).to be_flagged_deleted
end
end
end
context "when no argument" do