mongoid-multitenancy 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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