Skip to content

Commit

Permalink
Merge pull request RolifyCommunity#371 from lorefnon/enh/mongoid-5.0.…
Browse files Browse the repository at this point in the history
…0-compat

Make specs pass for all versions of Mongoid
  • Loading branch information
wldcordeiro committed Nov 14, 2015
2 parents cae37e5 + f3c88c7 commit 6d1e268
Show file tree
Hide file tree
Showing 13 changed files with 92 additions and 12 deletions.
6 changes: 4 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ language: ruby
sudo: false

rvm:
- 2.2.3
- 2.2.2
- 2.1.2
- 2.0.0


before_install:
- gem update --system
Expand All @@ -16,7 +16,9 @@ script: bundle exec rake

env:
- ADAPTER=active_record
- ADAPTER=mongoid
- ADAPTER=mongoid MONGOID_VERSION=3
- ADAPTER=mongoid MONGOID_VERSION=4
- ADAPTER=mongoid MONGOID_VERSION=5

services: mongodb

Expand Down
10 changes: 9 additions & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,14 @@ group :test do
gem "sqlite3", :platform => "ruby"
gem "activerecord", ">= 3.2.0", :require => "active_record"
when "mongoid"
gem "mongoid", "~> 3.1"
case ENV["MONGOID_VERSION"]
when nil, '5'
gem "mongoid", "~> 5"
when '4'
gem "mongoid", "~> 4"
when '3'
gem "mongoid", "~> 3"
end
gem "bson_ext", :platform => "ruby"
else
raise "Unknown model adapter: #{ENV["ADAPTER"]}"
Expand All @@ -18,6 +25,7 @@ group :test do
gem 'byebug'
gem 'pry-byebug'
gem 'test-unit' # Implicitly loaded by ammeter
gem 'database_cleaner'
gem 'codeclimate-test-reporter', :require => nil
end

Expand Down
7 changes: 4 additions & 3 deletions spec/generators_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,12 @@
ENV['ADAPTER'] ||= 'active_record'

if ENV['ADAPTER'] == 'active_record'
load File.dirname(__FILE__) + '/support/adapters/utils/active_record.rb'
require 'active_record/railtie'
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
establish_connection
else
require 'mongoid'
Mongoid.load!("spec/support/adapters/mongoid.yml", :test)
load File.dirname(__FILE__) + '/support/adapters/utils/mongoid.rb'
load_mongoid_config
end

module TestApp
Expand Down
2 changes: 1 addition & 1 deletion spec/rolify/custom_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ def role_class
it_behaves_like "Role.scopes"
it_behaves_like Rolify::Dynamic
it_behaves_like "Rolify.callbacks"
end
end
1 change: 1 addition & 0 deletions spec/rolify/resource_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -542,6 +542,7 @@
context "strict user" do
before(:all) do
@strict_user = StrictUser.first
@strict_user.role_ids
@strict_user.add_role(:forum, Forum.first)
@strict_user.add_role(:forum, Forum)
end
Expand Down
13 changes: 13 additions & 0 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require "codeclimate-test-reporter"

CodeClimate::TestReporter.start

require 'rubygems'
Expand All @@ -11,6 +12,8 @@
require 'its'
rescue LoadError
end
require 'database_cleaner'

require 'coveralls'
Coveralls.wear_merged!

Expand Down Expand Up @@ -47,4 +50,14 @@ def silence_warnings(&block)

RSpec.configure do |config|
config.expect_with(:rspec) { |c| c.syntax = [:should, :expect] }

config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end

config.after(:suite) do |example|
DatabaseCleaner.clean
end

end
7 changes: 4 additions & 3 deletions spec/support/adapters/active_record.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
require 'active_record'
load File.dirname(__FILE__) + '/utils/active_record.rb'

extend_rspec_with_activerecord_specific_matchers
establish_connection

RSpec::Matchers::BuiltIn::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::BuiltIn::ContainExactly)
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
ActiveRecord::Base.extend Rolify

load File.dirname(__FILE__) + '/../schema.rb'
Expand Down
21 changes: 19 additions & 2 deletions spec/support/adapters/mongoid.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
require 'mongoid'
load File.dirname(__FILE__) + '/utils/mongoid.rb'

Mongoid.load!("spec/support/adapters/mongoid.yml", :test)
load_mongoid_config

begin
Mongo::Logger.logger.level = ::Logger::FATAL
rescue NameError
end

::Mongoid::Document.module_eval do
def self.included(base)
Expand All @@ -13,6 +18,8 @@ def self.included(base)
# Standard user and role classes
class User
include Mongoid::Document
default_scope -> { order_by id: 'asc' }

rolify

field :login, :type => String
Expand All @@ -21,6 +28,7 @@ class User
# Standard user and role classes
class StrictUser
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
rolify strict: true

field :login, :type => String
Expand Down Expand Up @@ -48,6 +56,7 @@ class Role
# Resourcifed and rolifed at the same time
class HumanResource
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
resourcify :resources
rolify

Expand All @@ -74,13 +83,15 @@ class HumanResource
# Custom role and class names
class Customer
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
rolify :role_cname => "Privilege"

field :login, :type => String
end

class Privilege
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
has_and_belongs_to_many :customers
belongs_to :resource, :polymorphic => true
scopify
Expand All @@ -100,13 +111,15 @@ class Privilege
module Admin
class Moderator
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
rolify :role_cname => "Admin::Right"

field :login, :type => String
end

class Right
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
has_and_belongs_to_many :moderators, :class_name => 'Admin::Moderator'
belongs_to :resource, :polymorphic => true
scopify
Expand All @@ -126,13 +139,15 @@ class Right
# Resources classes
class Forum
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
#resourcify done during specs setup to be able to use custom user classes

field :name, :type => String
end

class Group
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
#resourcify done during specs setup to be able to use custom user classes

field :name, :type => String
Expand All @@ -145,6 +160,7 @@ def subgroups

class Team
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
#resourcify done during specs setup to be able to use custom user classes

field :team_code, :type => Integer
Expand All @@ -153,6 +169,7 @@ class Team

class Organization
include Mongoid::Document
default_scope -> { order_by id: 'asc' }
end

class Company < Organization
Expand Down
File renamed without changes.
6 changes: 6 additions & 0 deletions spec/support/adapters/mongoid_4.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
test:
sessions:
default:
database: godfather
hosts:
- localhost:27017
6 changes: 6 additions & 0 deletions spec/support/adapters/mongoid_5.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
test:
clients:
default:
database: godfather
hosts:
- localhost:27017
12 changes: 12 additions & 0 deletions spec/support/adapters/utils/active_record.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
require 'active_record'

def establish_connection
ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => ":memory:"
)
end

def extend_rspec_with_activerecord_specific_matchers
RSpec::Matchers::BuiltIn::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::BuiltIn::ContainExactly)
end
13 changes: 13 additions & 0 deletions spec/support/adapters/utils/mongoid.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
require 'mongoid'

def mongoid_major_version
Mongoid::VERSION.split('.').first.to_i
end

def mongoid_config
"spec/support/adapters/mongoid_#{mongoid_major_version}.yml"
end

def load_mongoid_config
Mongoid.load!(mongoid_config, :test)
end

0 comments on commit 6d1e268

Please sign in to comment.