Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Build
on: [push, pull_request]
jobs:
test:
strategy:
fail-fast: false
matrix:
ruby: ['2.7']
mongoid: ['6']
mongodb: ['4.4', '5.0']

runs-on: ubuntu-latest
name: Ruby ${{ matrix.ruby }} / Mongo ${{ matrix.mongodb }} / Mongoid ${{ matrix.mongoid }}

steps:
- uses: actions/checkout@v3
- name: Start MongoDB
uses: supercharge/mongodb-github-action@1.7.0
with:
mongodb-version: ${{ matrix.mongodb }}

- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}

- name: Install gems
env:
MATRIX_MONGOID_VERSION: ${{ matrix.mongoid }}
run: |
export BUNDLE_GEMFILE="${GITHUB_WORKSPACE}/gemfiles/Mongoid_${MATRIX_MONGOID_VERSION}.gemfile"
gem install bundler
bundle install --jobs 4 --retry 3

- run: bundle exec rspec
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ spec/reports
test/tmp
test/version_tmp
tmp
.tool-versions

# YARD artifacts
.yardoc
Expand Down
4 changes: 0 additions & 4 deletions gemfiles/Mongoid_4.gemfile

This file was deleted.

4 changes: 0 additions & 4 deletions gemfiles/Mongoid_5.gemfile

This file was deleted.

1 change: 0 additions & 1 deletion gemfiles/Mongoid_6.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@ source 'https://rubygems.org'
gemspec path: '../'

gem 'activesupport', '~> 5.0'
gem 'mongoid-paranoia', github: 'ream88/mongoid-paranoia' # Fix chicken or the egg
gem 'mongoid', '~> 6.0'
7 changes: 6 additions & 1 deletion lib/mongoid/core_ext/relations/options.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
module Mongoid
module Relations
module Options
COMMON << :versioned
alias_method :validate_without_versioned!, :validate!

def validate!(options)
options_without_versioned = options.except(:versioned)
validate_without_versioned!(options_without_versioned)
end
end
end
end
27 changes: 8 additions & 19 deletions lib/mongoid/core_ext/versioning.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ module Versioning
# @example Revise the document.
# person.revise
#
# @todo Remove Mongoid 4 support.
# @since 1.0.0
def revise
previous = previous_revision
Expand All @@ -43,16 +42,8 @@ def revise
if version_max.present? && versions.length > version_max
to_delete = versions.first
version_to_delete = to_delete.version
if to_delete.respond_to?(:paranoid?) && to_delete.paranoid?
versions.delete_one(to_delete)

query = collection.find(atomic_selector)
query.respond_to?(:update_one) ?
query.update_one('$pull' => { 'versions' => { 'version' => version_to_delete } }) :
query.update('$pull' => { 'versions' => { 'version' => version_to_delete } })
else
versions.where(version: version_to_delete).delete_all
end

versions.where(version: version_to_delete).delete_all
end
self.version = (version || 1) + 1
end
Expand Down Expand Up @@ -131,18 +122,16 @@ def versionless
#
# @return [ Document, nil ] The previously saved document.
#
# @todo Remove Mongoid 4 support.
# @since 2.0.0
def previous_revision
options = respond_to?(:mongo_client) ?
mongo_client.options.symbolize_keys :
mongo_session.options
options = mongo_client.options.symbolize_keys

_loading_revision do
self.class.unscoped
.with(options)
.where(_id: id)
.any_of({ version: version }, version: nil).first
self.class.with(options) do |m|
m.unscoped
.where(_id: id)
.any_of({ version: version }, version: nil).first
end
end
end

Expand Down
2 changes: 1 addition & 1 deletion lib/mongoid/versioning/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module Mongoid
module Versioning
VERSION = '2.1.0'.freeze
VERSION = '3.0.0'.freeze
end
end
3 changes: 1 addition & 2 deletions mongoid-versioning.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ Gem::Specification.new do |gem|
gem.require_path = 'lib'

gem.add_dependency 'activesupport', '>= 4.0'
gem.add_dependency 'mongoid', '>= 4.0.0', '< 7.0.0'
gem.add_development_dependency 'mongoid-paranoia', '>= 1.1.0', '< 3.0.0'
gem.add_dependency 'mongoid', '>= 6.0.0', '< 7.0.0'
gem.add_development_dependency 'rake', '~> 10.0'
gem.add_development_dependency 'rspec', '~> 3'
end
2 changes: 0 additions & 2 deletions spec/app/models/author.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
class Author
include Mongoid::Document
field :name, type: String

belongs_to :paranoid_post
end
4 changes: 2 additions & 2 deletions spec/app/models/comment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ class Comment
# belongs_to :account
# belongs_to :movie
# belongs_to :rating
belongs_to :wiki_page
# belongs_to :wiki_page

belongs_to :commentable, polymorphic: true
belongs_to :commentable, polymorphic: true # wiki_page

validates :title, presence: true
# validates :movie, :rating, associated: true
Expand Down
38 changes: 0 additions & 38 deletions spec/app/models/paranoid_post.rb

This file was deleted.

4 changes: 2 additions & 2 deletions spec/app/models/wiki_page.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class WikiPage
field :description, type: String, localize: true
max_versions 5

has_many :comments, dependent: :destroy, validate: false
has_many :comments, dependent: :destroy, as: :commentable, validate: false
has_many :child_pages, class_name: 'WikiPage', dependent: :delete, inverse_of: :parent_pages
belongs_to :parent_pages, class_name: 'WikiPage', inverse_of: :child_pages
belongs_to :parent_pages, class_name: 'WikiPage', inverse_of: :child_pages, optional: true
end
53 changes: 19 additions & 34 deletions spec/mongoid/versioning_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,11 @@ class WikiPage
let(:title) { 'my new wiki' }

let!(:page) do
WikiPage.with(database: database_id_alt).create!(description: '1', title: title)
WikiPage.new(description: '1', title: title).tap do |page|
page.with(database: database_id_alt) do |page_alt|
page_alt.save!
end
end
end

context 'when the document is persisted once' do
Expand All @@ -189,21 +193,28 @@ class WikiPage
end

it 'persists to specified database' do
expect(WikiPage.with(database: database_id_alt).find_by(title: title)).not_to be_nil
expect(WikiPage.with(database: database_id_alt) { |w| w.find_by(title: title) }).not_to be_nil
end
end

context 'when the document is persisted more than once' do
before do
3.times { |n| page.with(database: database_id_alt).update_attribute(:description, n.to_s) }
skip "Mongoid 6 bug: https://jira.mongodb.org/browse/MONGOID-5379"
3.times do |n|
page.with(database: database_id_alt) do |page_alt|
page_alt.update_attribute(:description, n.to_s)
end
end
end

it 'returns the number of versions' do
expect(page.version).to eq(4)
page.with(database: database_id_alt) do |page_alt|
expect(page_alt.version).to eq(4)
end
end

it 'persists to specified database' do
expect(WikiPage.with(database: database_id_alt).find_by(title: title)).not_to be_nil
expect(WikiPage.with(database: database_id_alt) { |w| w.find_by(title: title) }).not_to be_nil
end

it 'persists the versions to specified database' do
Expand All @@ -212,7 +223,9 @@ class WikiPage
end

after do
WikiPage.with(database: database_id_alt).delete_all
WikiPage.with(database: database_id_alt) do |wiki_clazz|
wiki_clazz.delete_all
end
end
end
end
Expand Down Expand Up @@ -323,26 +336,6 @@ class WikiPage
end

context 'when saving over the number of maximum versions' do
context 'when the document is paranoid' do
let!(:post) do
ParanoidPost.create(title: 'test')
end

before do
3.times do |n|
post.update_attribute(:title, n.to_s)
end
end

it 'only versions the maximum amount' do
expect(post.versions.target.size).to eq(2)
end

it 'persists the changes' do
expect(post.reload.versions.target.size).to eq(2)
end
end

context 'when saving in succession' do
before do
10.times do |n|
Expand Down Expand Up @@ -402,10 +395,6 @@ class WikiPage
Comment.new(title: "Don't delete me!")
end

let!(:orphaned) do
Comment.create(title: 'Annie')
end

before do
page.comments << comment
page.update_attribute(:title, '5')
Expand All @@ -424,10 +413,6 @@ class WikiPage
expect(from_db).to eq(comment)
end

it 'does not delete related orphans' do
expect(Comment.find(orphaned.id)).to eq(orphaned)
end

it 'deletes the version' do
expect(page.versions).to be_empty
end
Expand Down