mongoid-multitenancy 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30fa52034535ce4524481877d5b9e048e1eeeaa5
4
- data.tar.gz: 533f4f95ecb750443629027cac6d0dd9edc6bb73
3
+ metadata.gz: bc62ee7dad2407f285292511b1a3ff9487b2f658
4
+ data.tar.gz: de93ec4f6f8182bd4307c9cc865b585f215d9a68
5
5
  SHA512:
6
- metadata.gz: efb3239aa595fe974954364f1b8b7cf2b0bb061d87dac50166294f54a219ed97b68504deead534086576016e840d38b125612a64d12a429d3b37c19ef90deb6a
7
- data.tar.gz: f3a64574e2ef09ade685ab061806bd37885286ead3efe20d884887d14e42ab748e712a1635b9fc2724aa6bb520d614684e70b973bf4952b2866bad396e2125fd
6
+ metadata.gz: 1bbfd25a05be1f5bb1a873fa53f42df8546b6cc24a568b846500d6b8e429df9ebb6781e21fdac50b91f34f95a415f0c8a83dd9de0017e0d86919828c215b13b2
7
+ data.tar.gz: 747a8e3b7e5cc1ee8daaa5713a3e39f82978a27c10e0dac8bc4b7ef94eb38b561c982c8349252a6265b2dee08fc0981a796ff9149776c02f080687f9479f6274
data/Gemfile CHANGED
@@ -1,11 +1,11 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'mongoid', '~> 5.0'
3
+ gem 'mongoid', '~> 5.1'
4
4
 
5
- gem 'rake', '~> 10.0'
5
+ gem 'rake', '~> 11.0'
6
6
 
7
7
  group :test do
8
- gem 'database_cleaner', github: 'DatabaseCleaner/database_cleaner', ref: '1cab518'
8
+ gem 'database_cleaner'
9
9
  gem 'coveralls', require: false
10
10
  gem 'rspec', '~> 3.1'
11
11
  gem 'yard', '~> 0.8'
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # mongoid-multitenancy [![Build Status](https://travis-ci.org/PerfectMemory/mongoid-multitenancy.png?branch=master)](https://travis-ci.org/PerfectMemory/mongoid-multitenancy) [![Coverage Status](https://coveralls.io/repos/PerfectMemory/mongoid-multitenancy/badge.svg?branch=master&service=github)](https://coveralls.io/github/PerfectMemory/mongoid-multitenancy?branch=master) [![Code Climate](https://codeclimate.com/github/PerfectMemory/mongoid-multitenancy.png)](https://codeclimate.com/github/PerfectMemory/mongoid-multitenancy) [![Dependency Status](https://gemnasium.com/PerfectMemory/mongoid-multitenancy.png)](https://gemnasium.com/PerfectMemory/mongoid-multitenancy)
1
+ # mongoid-multitenancy [![Build Status](https://api.travis-ci.org/PerfectMemory/mongoid-multitenancy.png?branch=master)](https://travis-ci.org/PerfectMemory/mongoid-multitenancy) [![Coverage Status](https://coveralls.io/repos/PerfectMemory/mongoid-multitenancy/badge.svg?branch=master&service=github)](https://coveralls.io/github/PerfectMemory/mongoid-multitenancy?branch=master) [![Code Climate](https://codeclimate.com/github/PerfectMemory/mongoid-multitenancy.png)](https://codeclimate.com/github/PerfectMemory/mongoid-multitenancy) [![Dependency Status](https://gemnasium.com/PerfectMemory/mongoid-multitenancy.png)](https://gemnasium.com/PerfectMemory/mongoid-multitenancy)
2
2
 
3
3
  mongoid-multitenancy adds the ability to scope [Mongoid](https://github.com/mongoid/mongoid) models to a tenant in a **shared database strategy**. Tenants are represented by a tenant model, such as `Client`. mongoid-multitenancy will help you set the current tenant on each request and ensures that all 'tenant models' are always properly scoped to the current tenant: when viewing, searching and creating.
4
4
 
@@ -85,10 +85,14 @@ The association passed to the `tenant` function must be valid.
85
85
 
86
86
  `tenant` accepts several options:
87
87
 
88
- * :optional : set to true when the tenant is optional (default value is `false`)
89
- * :immutable : set to true when the tenant field is immutable (default value is `true`)
90
- * :full_indexes : set to true to add the tenant field automatically to all the indexes (default value is `true`)
91
- * :class_name, etc. : all the other options will be passed to the mongoid relation (belongs_to)
88
+ | Option | Default | Description |
89
+ | ------------- | ------------- | ------------- |
90
+ | :optional | false | set to true when the tenant is optional |
91
+ | :immutable | true | set to true when the tenant field is immutable |
92
+ | :full_indexes | true | set to true to add the tenant field automatically to all the indexes |
93
+ | :index | false | set to true to define an index for the tenant field |
94
+ | :scopes | true | set to true to define scopes :shared and :unshared |
95
+ | :class_name, etc. | | all the other options will be passed to the mongoid relation (belongs_to) |
92
96
 
93
97
  Some examples to illustrate this behavior:
94
98
 
@@ -181,12 +185,12 @@ class Article
181
185
  end
182
186
  ```
183
187
 
184
- * When used with an *optional* tenant, the uniqueness constraint is not scoped if the item is shared, but is
185
- scoped to the client new item otherwise. Note that a private item cannot have the the value if a shared item
186
- already uses it.
188
+ * When used with an *optional* tenant, the uniqueness constraint by default is not scoped if the item is shared, but is
189
+ scoped to the client new item otherwise. Note that by default in that case a private item cannot have a value if a shared item
190
+ already uses it. You can change that behaviour by setting the option `exclude_shared` to `true`.
187
191
 
188
192
  In the following case, 2 private articles can have the same slug if they belongs to 2 different clients. But if a shared
189
- article has the slug "slugA", no client will be able to use that slug again, like a standard validates_uniqueness_of does.
193
+ article has the slug "slugA", no client will be able to use that slug again, like a standard `validates_uniqueness_of` does.
190
194
 
191
195
  ```ruby
192
196
  class Article
@@ -201,6 +205,22 @@ class Article
201
205
  end
202
206
  ```
203
207
 
208
+ In the following case, 2 private articles can have the same slug if they belongs to 2 different clients even if a shared
209
+ article already uses that same slug, like a `validates_uniqueness_of scope: :client` does.
210
+
211
+ ```ruby
212
+ class Article
213
+ include Mongoid::Document
214
+ include Mongoid::Multitenancy::Document
215
+
216
+ tenant :client, optional: true
217
+
218
+ field :slug
219
+
220
+ validates_tenant_uniqueness_of :slug, exclude_shared: true
221
+ end
222
+ ```
223
+
204
224
  Mongoid indexes
205
225
  -------------------
206
226
 
@@ -2,14 +2,15 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'mongoid', '~> 4.0'
4
4
 
5
- gem 'rake', '~> 10.0'
5
+ gem 'rake', '~> 11.0'
6
6
 
7
7
  group :test do
8
- gem 'database_cleaner', github: 'DatabaseCleaner/database_cleaner', ref: '1cab518'
9
- gem 'coveralls', :require => false
8
+ gem 'database_cleaner'
9
+ gem 'coveralls', require: false
10
10
  gem 'rspec', '~> 3.1'
11
11
  gem 'yard', '~> 0.8'
12
12
  gem 'mongoid-rspec', '~> 2.1'
13
+ gem 'rubocop', require: false
13
14
  end
14
15
 
15
16
  # Specify your gem's dependencies in mongoid-multitenancy.gemspec
@@ -1,15 +1,16 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'mongoid', '~> 5.0'
3
+ gem 'mongoid', '~> 5.1'
4
4
 
5
- gem 'rake', '~> 10.0'
5
+ gem 'rake', '~> 11.0'
6
6
 
7
7
  group :test do
8
- gem 'database_cleaner', github: 'DatabaseCleaner/database_cleaner', ref: '1cab518'
9
- gem 'coveralls', :require => false
8
+ gem 'database_cleaner'
9
+ gem 'coveralls', require: false
10
10
  gem 'rspec', '~> 3.1'
11
11
  gem 'yard', '~> 0.8'
12
12
  gem 'mongoid-rspec', '~> 3.0'
13
+ gem 'rubocop', require: false
13
14
  end
14
15
 
15
16
  # Specify your gem's dependencies in mongoid-multitenancy.gemspec
@@ -7,7 +7,7 @@ module Mongoid
7
7
  attr_accessor :tenant_field, :tenant_options
8
8
 
9
9
  # List of authorized options
10
- MULTITENANCY_OPTIONS = [:optional, :immutable, :full_indexes, :index]
10
+ MULTITENANCY_OPTIONS = [:optional, :immutable, :full_indexes, :index, :scopes].freeze
11
11
 
12
12
  # Defines the tenant field for the document.
13
13
  #
@@ -24,10 +24,13 @@ module Mongoid
24
24
  # wil raise an Exception.
25
25
  # @option options [ Boolean ] :optional If true allow the document
26
26
  # to be shared among all the tenants.
27
- #
27
+ # @option options [ Boolean ] :index If true build an index for
28
+ # the tenant field itself.
29
+ # @option options [ Boolean ] :scopes If true create scopes :shared
30
+ # and :unshared.
28
31
  # @return [ Field ] The generated field
29
32
  def tenant(association = :account, options = {})
30
- options = { full_indexes: true, immutable: true }.merge!(options)
33
+ options = { full_indexes: true, immutable: true, scopes: true }.merge!(options)
31
34
  assoc_options, multitenant_options = build_options(options)
32
35
 
33
36
  # Setup the association between the class and the tenant class
@@ -40,7 +43,7 @@ module Mongoid
40
43
  # Validates the tenant field
41
44
  validates_tenancy_of tenant_field, multitenant_options
42
45
 
43
- define_scopes
46
+ define_scopes if multitenant_options[:scopes]
44
47
  define_initializer association
45
48
  define_inherited association, options
46
49
  define_index if multitenant_options[:index]
@@ -131,7 +134,7 @@ module Mongoid
131
134
  # Define the inherited method
132
135
  def define_inherited(association, options)
133
136
  define_singleton_method(:inherited) do |child|
134
- child.tenant association, options
137
+ child.tenant association, options.merge(scopes: false)
135
138
  super(child)
136
139
  end
137
140
  end
@@ -16,18 +16,18 @@ module Mongoid
16
16
  def validate_each(object, attribute, value)
17
17
  # Immutable Check
18
18
  if options[:immutable]
19
- if object.send(:attribute_changed?, attribute) and object.send(:attribute_was, attribute)
19
+ if object.send(:attribute_changed?, attribute) && object.send(:attribute_was, attribute)
20
20
  object.errors.add(attribute, 'is immutable and cannot be updated')
21
21
  end
22
22
  end
23
23
 
24
24
  # Ownership check
25
- if value and Mongoid::Multitenancy.current_tenant and value != Mongoid::Multitenancy.current_tenant.id
26
- object.errors.add(attribute, "not authorized")
25
+ if value && Mongoid::Multitenancy.current_tenant && value != Mongoid::Multitenancy.current_tenant.id
26
+ object.errors.add(attribute, 'not authorized')
27
27
  end
28
28
 
29
29
  # Optional Check
30
- if !options[:optional] and value.nil?
30
+ if !options[:optional] && value.nil?
31
31
  object.errors.add(attribute, 'is mandatory')
32
32
  end
33
33
  end
@@ -58,8 +58,8 @@ module Mongoid
58
58
  name = document.database_field_name(item)
59
59
  tenant_value = document.attributes[name]
60
60
 
61
- if document.class.tenant_options[:optional]
62
- if document.attributes[name]
61
+ if document.class.tenant_options[:optional] && !options[:exclude_shared]
62
+ if tenant_value
63
63
  criteria = criteria.where(:"#{item}".in => [tenant_value, nil])
64
64
  end
65
65
  else
@@ -1,6 +1,6 @@
1
1
  module Mongoid
2
2
  module Multitenancy
3
3
  # Version
4
- VERSION = '1.1.3'
4
+ VERSION = '1.2.0'.freeze
5
5
  end
6
6
  end
@@ -7,7 +7,6 @@ require 'mongoid/multitenancy/validators/tenant_uniqueness'
7
7
  module Mongoid
8
8
  module Multitenancy
9
9
  class << self
10
-
11
10
  # Set the current tenant. Make it Thread aware
12
11
  def current_tenant=(tenant)
13
12
  Thread.current[:current_tenant] = tenant
@@ -22,9 +21,9 @@ module Mongoid
22
21
  def with_tenant(tenant, &block)
23
22
  raise ArgumentError, 'block required' if block.nil?
24
23
 
25
- old_tenant = self.current_tenant
24
+ old_tenant = current_tenant
26
25
  self.current_tenant = tenant
27
- result = block.call
26
+ result = yield
28
27
  self.current_tenant = old_tenant
29
28
  result
30
29
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.summary = 'Support of a multi-tenant database with Mongoid'
9
9
  gem.homepage = 'https://github.com/PerfectMemory/mongoid-multitenancy'
10
10
  gem.license = 'MIT'
11
- gem.files = `git ls-files`.split($\)
12
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
11
+ gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = 'mongoid-multitenancy'
15
15
  gem.require_paths = ['lib']
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'tenant' do
4
-
5
4
  let(:client) do
6
5
  Account.create!(name: 'client')
7
6
  end
@@ -12,26 +11,25 @@ describe 'tenant' do
12
11
 
13
12
  context 'without index: true' do
14
13
  it 'does not create an index' do
15
- expect(Immutable).not_to have_index_for(:client_id => 1)
14
+ expect(Immutable).not_to have_index_for(client_id: 1)
16
15
  end
17
16
  end
18
17
 
19
18
  context 'with index: true' do
20
19
  it 'creates an index' do
21
- expect(Indexable).to have_index_for(:client_id => 1)
20
+ expect(Indexable).to have_index_for(client_id: 1)
22
21
  end
23
22
  end
24
23
 
25
24
  context 'with full_indexes: true' do
26
25
  it 'add the tenant field on each index' do
27
- expect(Immutable).to have_index_for(:client_id => 1, title: 1)
26
+ expect(Immutable).to have_index_for(client_id: 1, title: 1)
28
27
  end
29
28
  end
30
29
 
31
30
  context 'with full_indexes: false' do
32
31
  it 'does not add the tenant field on each index' do
33
- expect(Indexable).not_to have_index_for(:client_id => 1, title: 1)
32
+ expect(Indexable).not_to have_index_for(client_id: 1, title: 1)
34
33
  end
35
34
  end
36
-
37
35
  end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mandatory do
4
-
5
4
  let(:client) do
6
5
  Account.create!(name: 'client')
7
6
  end
@@ -17,6 +16,18 @@ describe Mandatory do
17
16
  it_behaves_like 'a tenantable model'
18
17
  it { is_expected.to validate_tenant_uniqueness_of(:slug) }
19
18
 
19
+ describe '.shared' do
20
+ it 'is defined' do
21
+ expect(Mandatory).to respond_to(:shared)
22
+ end
23
+ end
24
+
25
+ describe '.unshared' do
26
+ it 'is defined' do
27
+ expect(Mandatory).to respond_to(:unshared)
28
+ end
29
+ end
30
+
20
31
  describe '.default_scope' do
21
32
  before do
22
33
  Mongoid::Multitenancy.with_tenant(client) { @itemX = Mandatory.create!(title: 'title X', slug: 'article-x') }
@@ -1,5 +1,5 @@
1
1
  class Account
2
2
  include Mongoid::Document
3
3
 
4
- field :name, :type => String
4
+ field :name, type: String
5
5
  end
@@ -4,12 +4,12 @@ class Immutable
4
4
 
5
5
  tenant(:client, class_name: 'Account', immutable: true)
6
6
 
7
- field :slug, :type => String
8
- field :title, :type => String
7
+ field :slug, type: String
8
+ field :title, type: String
9
9
 
10
10
  validates_tenant_uniqueness_of :slug
11
11
  validates_presence_of :slug
12
12
  validates_presence_of :title
13
13
 
14
- index({ title: 1 })
14
+ index(title: 1)
15
15
  end
@@ -6,5 +6,5 @@ class Indexable
6
6
 
7
7
  tenant :client, class_name: 'Account', index: true, full_indexes: false
8
8
 
9
- index({ title: 1 })
9
+ index(title: 1)
10
10
  end
@@ -5,11 +5,11 @@ class Mandatory
5
5
  tenant(:client, class_name: 'Account')
6
6
 
7
7
  field :slug, type: String
8
- field :title, type:String
8
+ field :title, type: String
9
9
 
10
10
  validates_tenant_uniqueness_of :slug
11
11
  validates_presence_of :slug
12
12
  validates_presence_of :title
13
13
 
14
- index({ title: 1 })
14
+ index(title: 1)
15
15
  end
@@ -4,12 +4,12 @@ class Mutable
4
4
 
5
5
  tenant :client, class_name: 'Account', immutable: false, optional: false
6
6
 
7
- field :slug, :type => String
8
- field :title, :type => String
7
+ field :slug, type: String
8
+ field :title, type: String
9
9
 
10
10
  validates_tenant_uniqueness_of :slug
11
11
  validates_presence_of :slug
12
12
  validates_presence_of :title
13
13
 
14
- index({ title: 1 })
14
+ index(title: 1)
15
15
  end
@@ -1,9 +1,9 @@
1
1
  require 'models/mutable'
2
2
 
3
3
  class MutableChild < Mutable
4
- field :random, type: String
4
+ field :random, type: String
5
5
  end
6
6
 
7
7
  class AnotherMutableChild < Mutable
8
- field :random, type: String
9
- end
8
+ field :random, type: String
9
+ end
@@ -0,0 +1,11 @@
1
+ class NoScopable
2
+ include Mongoid::Document
3
+ include Mongoid::Multitenancy::Document
4
+
5
+ tenant :client, class_name: 'Account', scopes: false
6
+
7
+ field :slug, type: String
8
+ field :title, type: String
9
+
10
+ index(title: 1)
11
+ end
@@ -11,5 +11,5 @@ class Optional
11
11
  validates_presence_of :slug
12
12
  validates_presence_of :title
13
13
 
14
- index({ title: 1 })
14
+ index(title: 1)
15
15
  end
@@ -0,0 +1,15 @@
1
+ class OptionalExclude
2
+ include Mongoid::Document
3
+ include Mongoid::Multitenancy::Document
4
+
5
+ tenant(:client, class_name: 'Account', optional: true)
6
+
7
+ field :slug, type: String
8
+ field :title, type: String
9
+
10
+ validates_tenant_uniqueness_of :slug, exclude_shared: true
11
+ validates_presence_of :slug
12
+ validates_presence_of :title
13
+
14
+ index(title: 1)
15
+ end
@@ -21,7 +21,7 @@ describe Mongoid::Multitenancy do
21
21
  end
22
22
 
23
23
  it 'restores the current tenant after the block' do
24
- Mongoid::Multitenancy.with_tenant(another_client) do ; end
24
+ Mongoid::Multitenancy.with_tenant(another_client) { ; }
25
25
  expect(Mongoid::Multitenancy.current_tenant).to eq client
26
26
  end
27
27
  end
@@ -43,5 +43,4 @@ describe MutableChild do
43
43
  end
44
44
  end
45
45
  end
46
-
47
46
  end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe OptionalExclude do
4
+ let(:client) do
5
+ Account.create!(name: 'client')
6
+ end
7
+
8
+ let(:another_client) do
9
+ Account.create!(name: 'another client')
10
+ end
11
+
12
+ let(:item) do
13
+ OptionalExclude.new(title: 'title X', slug: 'page-x')
14
+ end
15
+
16
+ it_behaves_like 'a tenantable model'
17
+
18
+ describe '#valid?' do
19
+ context 'with a tenant' do
20
+ before do
21
+ Mongoid::Multitenancy.current_tenant = client
22
+ end
23
+
24
+ it 'is valid' do
25
+ expect(item).to be_valid
26
+ end
27
+
28
+ context 'with a uniqueness constraint' do
29
+ let(:duplicate) do
30
+ OptionalExclude.new(title: 'title Y', slug: 'page-x')
31
+ end
32
+
33
+ before do
34
+ item.save!
35
+ end
36
+
37
+ it 'does not allow duplicates on the same tenant' do
38
+ expect(duplicate).not_to be_valid
39
+ end
40
+
41
+ it 'allow duplicates on a different same tenant' do
42
+ Mongoid::Multitenancy.with_tenant(another_client) do
43
+ expect(duplicate).to be_valid
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ context 'without a tenant' do
50
+ it 'is valid' do
51
+ expect(item).to be_valid
52
+ end
53
+
54
+ context 'with a uniqueness constraint' do
55
+ let(:duplicate) do
56
+ OptionalExclude.new(title: 'title Y', slug: 'page-x')
57
+ end
58
+
59
+ before do
60
+ item.save!
61
+ end
62
+
63
+ it 'allow duplicates on any client' do
64
+ Mongoid::Multitenancy.with_tenant(client) do
65
+ expect(duplicate).to be_valid
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Optional do
4
-
5
4
  let(:client) do
6
5
  Account.create!(name: 'client')
7
6
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe NoScopable do
4
+ it_behaves_like 'a tenantable model' do
5
+ let(:client) do
6
+ Account.create!(name: 'client')
7
+ end
8
+
9
+ let(:another_client) do
10
+ Account.create!(name: 'another client')
11
+ end
12
+
13
+ let(:item) do
14
+ NoScopable.new(title: 'title X', slug: 'page-x')
15
+ end
16
+ end
17
+
18
+ describe '.shared' do
19
+ it 'is not defined' do
20
+ expect(NoScopable).not_to respond_to(:shared)
21
+ end
22
+ end
23
+
24
+ describe '.unshared' do
25
+ it 'is not defined' do
26
+ expect(NoScopable).not_to respond_to(:unshared)
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,4 @@
1
1
  shared_examples_for 'a tenantable model' do
2
-
3
2
  it { is_expected.to belong_to(:client) }
4
3
  it { is_expected.to have_index_for(client_id: 1, title: 1) }
5
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-multitenancy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aymeric Brisse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-25 00:00:00.000000000 Z
11
+ date: 2016-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -58,11 +58,15 @@ files:
58
58
  - spec/models/mandatory.rb
59
59
  - spec/models/mutable.rb
60
60
  - spec/models/mutable_child.rb
61
+ - spec/models/no_scopable.rb
61
62
  - spec/models/optional.rb
63
+ - spec/models/optional_exclude.rb
62
64
  - spec/mongoid-multitenancy_spec.rb
63
65
  - spec/mutable_child_spec.rb
64
66
  - spec/mutable_spec.rb
67
+ - spec/optional_exclude_spec.rb
65
68
  - spec/optional_spec.rb
69
+ - spec/scopable_spec.rb
66
70
  - spec/spec_helper.rb
67
71
  - spec/support/mongoid_matchers.rb
68
72
  - spec/support/shared_examples.rb
@@ -86,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
90
  version: '0'
87
91
  requirements: []
88
92
  rubyforge_project:
89
- rubygems_version: 2.2.5
93
+ rubygems_version: 2.4.5.1
90
94
  signing_key:
91
95
  specification_version: 4
92
96
  summary: Support of a multi-tenant database with Mongoid
@@ -101,11 +105,15 @@ test_files:
101
105
  - spec/models/mandatory.rb
102
106
  - spec/models/mutable.rb
103
107
  - spec/models/mutable_child.rb
108
+ - spec/models/no_scopable.rb
104
109
  - spec/models/optional.rb
110
+ - spec/models/optional_exclude.rb
105
111
  - spec/mongoid-multitenancy_spec.rb
106
112
  - spec/mutable_child_spec.rb
107
113
  - spec/mutable_spec.rb
114
+ - spec/optional_exclude_spec.rb
108
115
  - spec/optional_spec.rb
116
+ - spec/scopable_spec.rb
109
117
  - spec/spec_helper.rb
110
118
  - spec/support/mongoid_matchers.rb
111
119
  - spec/support/shared_examples.rb