mongoid-tenant 0.0.5 → 0.0.7
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 +4 -4
- data/.travis.yml +2 -0
- data/Gemfile +3 -1
- data/Guardfile +2 -2
- data/README.md +33 -4
- data/benchmarks/benchmark.rb +1 -1
- data/lib/mongoid/tenancy.rb +34 -9
- data/lib/mongoid/tenant/railtie.rb +11 -8
- data/lib/mongoid/tenant/tasks/tenant.rake +10 -9
- data/lib/mongoid/tenant/version.rb +1 -1
- data/lib/mongoid/tenant.rb +5 -2
- data/mongoid-tenant.gemspec +3 -4
- data/spec/mongoid/tenancy_spec.rb +104 -0
- data/spec/mongoid/tenant_spec.rb +31 -0
- data/spec/spec_helper.rb +29 -4
- data/spec/support/models.rb +29 -1
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13200e42649305b163500529ef5cf49d9f72b6af
|
4
|
+
data.tar.gz: 3d7df78088d6668b12b1e1f371ff2dd283c2f1fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 890d1639ca4a5b59fe6a49c72ba53942c223c25f766ad84d2ffc1bd15f40a42bb8127810c5af0f6ce69b1bc48efa0f29f5ade830e302ae3c25af2e5ee4a31b6e
|
7
|
+
data.tar.gz: b3784c0a6748cc5380bec1bafab4cd1f317f3d92193d732bc3c5fd1852223a579781a6d2471f8d23a344414e9d4a617d660e9b406d7454ccea4b89fc857a8f2f
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -2,6 +2,8 @@ source 'http://rubygems.org'
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
+
gem 'mongoid', '5.0.0.beta'
|
6
|
+
|
5
7
|
group :test do
|
6
8
|
gem 'guard'
|
7
9
|
gem 'guard-rspec'
|
@@ -9,5 +11,5 @@ group :test do
|
|
9
11
|
gem 'rspec', '>= 3.2.0'
|
10
12
|
gem 'coveralls', require: false
|
11
13
|
gem 'codeclimate-test-reporter', require: nil
|
12
|
-
gem 'mongoid-rspec'
|
14
|
+
gem 'mongoid-rspec'
|
13
15
|
end
|
data/Guardfile
CHANGED
@@ -9,14 +9,14 @@
|
|
9
9
|
|
10
10
|
# guard :rubocop do
|
11
11
|
guard :rubocop, all_on_start: false, keep_failed: false, cli: ['-D'] do
|
12
|
-
watch(
|
12
|
+
watch(/.+\.rb$/)
|
13
13
|
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
14
14
|
end
|
15
15
|
|
16
16
|
guard :rspec, cmd: 'bundle exec rspec' do
|
17
17
|
watch(%r{^spec/.+_spec\.rb$})
|
18
18
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
19
|
-
watch(
|
19
|
+
watch(%r{^generators/(.+)\.rb$}) { |_m| 'spec/schemaless/worker_spec' }
|
20
20
|
|
21
21
|
watch('spec/spec_helper.rb') { 'spec' }
|
22
22
|
end
|
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Mongoid::Tenant
|
2
2
|
===============
|
3
3
|
|
4
|
-
[](http://badge.fury.io/rb/mongoid-tenant)
|
5
5
|
[](https://gemnasium.com/nofxx/mongoid-tenant)
|
6
|
-
[](http://travis-ci.org/nofxx/mongoid-tenant)
|
7
7
|
|
8
8
|
## Mongoid::Tenant
|
9
9
|
|
@@ -35,6 +35,8 @@ And that's all. But we need a tenancy:
|
|
35
35
|
class Shop
|
36
36
|
include Mongoid::Document
|
37
37
|
include Mongoid::Tenancy
|
38
|
+
|
39
|
+
tenant_key :url
|
38
40
|
end
|
39
41
|
```
|
40
42
|
|
@@ -54,10 +56,20 @@ Shop.first.tenancy!
|
|
54
56
|
|
55
57
|
### Tenancy.tenants
|
56
58
|
|
57
|
-
Helper to execute something on each tenant namespace.
|
59
|
+
Helper to execute something on each tenant namespace.
|
60
|
+
has_many substitute. Eg:
|
58
61
|
|
59
62
|
```
|
60
|
-
Shop
|
63
|
+
class Shop
|
64
|
+
...
|
65
|
+
has_tenant :bikes
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
69
|
+
Or raw:
|
70
|
+
|
71
|
+
```
|
72
|
+
Shop.tenants { |tenant| puts "#{tenant} have #{Bike.count} bike(s)" }
|
61
73
|
```
|
62
74
|
|
63
75
|
|
@@ -69,3 +81,20 @@ You'll need to provide which Tenancy to scope. In our example:
|
|
69
81
|
```
|
70
82
|
TENANCY=Shop bundle exec rails db:mongoid:create_indexes
|
71
83
|
```
|
84
|
+
|
85
|
+
## ApplicationController
|
86
|
+
|
87
|
+
Write your logic:
|
88
|
+
|
89
|
+
```
|
90
|
+
def app_domain
|
91
|
+
@domain ||= Shop.find_by(uri: /^#{request.env["SERVER_NAME"]}/)
|
92
|
+
@domain.tenancy!
|
93
|
+
end
|
94
|
+
```
|
95
|
+
|
96
|
+
|
97
|
+
## Issues
|
98
|
+
|
99
|
+
|
100
|
+
http://github.com/nofxx/mongoid-tenant
|
data/benchmarks/benchmark.rb
CHANGED
data/lib/mongoid/tenancy.rb
CHANGED
@@ -1,24 +1,49 @@
|
|
1
1
|
module Mongoid
|
2
|
+
#
|
3
|
+
# Tenancy Module
|
4
|
+
#
|
5
|
+
# Provides #tenant_key and #tenancy!
|
6
|
+
#
|
2
7
|
module Tenancy
|
3
8
|
extend ActiveSupport::Concern
|
9
|
+
#
|
10
|
+
# Model instance
|
11
|
+
module ClassMethods
|
12
|
+
def tenant_key(key, options = {})
|
13
|
+
field key, type: Symbol
|
14
|
+
options[:validates] ||= { presence: true }
|
15
|
+
options[:index] ||= {}
|
4
16
|
|
5
|
-
|
6
|
-
field :uri, type: String
|
17
|
+
validates key, { uniqueness: true }.merge(options[:validates])
|
7
18
|
|
8
|
-
|
19
|
+
index({ key => 1 }, { unique: true }.merge(options[:index]))
|
9
20
|
|
10
|
-
|
21
|
+
define_method(:tenant_key) do
|
22
|
+
send(key).to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
define_singleton_method(:clear_tenancy!) do
|
26
|
+
Thread.current[:tenancy] = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
define_singleton_method(:with_tenants) do |&block|
|
30
|
+
all.each do |t|
|
31
|
+
t.tenancy!
|
32
|
+
block.call(t)
|
33
|
+
end
|
34
|
+
clear_tenancy!
|
35
|
+
end
|
36
|
+
end
|
11
37
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
yield t
|
38
|
+
def has_tenant(relative)
|
39
|
+
define_method(relative) do
|
40
|
+
tenancy! && relative.to_s.classify.constantize
|
16
41
|
end
|
17
42
|
end
|
18
43
|
end
|
19
44
|
|
20
45
|
def tenancy!
|
21
|
-
Thread.current[:
|
46
|
+
Thread.current[:tenancy] = tenant_key
|
22
47
|
end
|
23
48
|
end # Tenancy
|
24
49
|
end # Mongoid
|
@@ -1,10 +1,13 @@
|
|
1
1
|
module Rails
|
2
|
-
module Mongoid
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
module Mongoid
|
3
|
+
module Tenant
|
4
|
+
# Load rake tasks
|
5
|
+
# MongoDB Indexes
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
rake_tasks do
|
8
|
+
load 'mongoid/tenant/tasks/tenant.rake'
|
9
|
+
end
|
6
10
|
end
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
+
end # Tenant
|
12
|
+
end # Mongoid
|
13
|
+
end # Rails
|
@@ -1,25 +1,26 @@
|
|
1
|
-
Rake::Task[
|
2
|
-
Rake::Task[
|
1
|
+
Rake::Task['db:mongoid:create_indexes'].clear
|
2
|
+
Rake::Task['db:mongoid:remove_undefined_indexes'].clear
|
3
3
|
|
4
4
|
namespace :db do
|
5
5
|
namespace :mongoid do
|
6
|
-
|
7
|
-
def get_tenancy
|
6
|
+
def tenancy_env
|
8
7
|
ENV['TENANCY'] ||
|
9
8
|
fail("Provide a tenancy model: `TENANCY=Foo #{ARGV.join}`")
|
10
9
|
end
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
desc 'Create Mongoid indexes, tenant aware'
|
12
|
+
task create_indexes: [:environment, :load_models] do
|
13
|
+
Rake::Task['db:mongoid:create_indexes'].clear
|
14
|
+
Object.const_get(tenancy_env).all.each do |t|
|
15
15
|
puts "Tenant #{t}"
|
16
16
|
t.tenancy!
|
17
17
|
::Mongoid::Tasks::Database.create_indexes
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
desc 'Removes undefined Mongoid indexes, tenant aware'
|
22
|
+
task remove_undefined_indexes: [:environment, :load_models] do
|
23
|
+
Object.const_get(tenancy_env).all.each do |t|
|
23
24
|
puts "Tenant #{t}"
|
24
25
|
t.tenancy!
|
25
26
|
::Mongoid::Tasks::Database.remove_undefined_indexes
|
data/lib/mongoid/tenant.rb
CHANGED
@@ -1,14 +1,17 @@
|
|
1
1
|
require 'mongoid'
|
2
|
-
|
2
|
+
require 'mongoid/tenancy'
|
3
3
|
|
4
4
|
require 'mongoid/tenant/railtie' if defined?(Rails)
|
5
5
|
|
6
6
|
module Mongoid
|
7
|
+
#
|
8
|
+
# The tenant
|
9
|
+
#
|
7
10
|
module Tenant
|
8
11
|
extend ActiveSupport::Concern
|
9
12
|
|
10
13
|
included do
|
11
|
-
store_in database: -> { Thread.current[:
|
14
|
+
store_in database: -> { Thread.current[:tenancy] }
|
12
15
|
end
|
13
16
|
end # Tenant
|
14
17
|
end # Mongoid
|
data/mongoid-tenant.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
3
3
|
require 'mongoid/tenant/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ['Marcos Piccinini']
|
10
10
|
s.homepage = 'http://github.com/nofxx/mongoid-tenant'
|
11
|
-
s.summary = '
|
12
|
-
s.description = 'Mongoid
|
11
|
+
s.summary = 'Multiple databases Models for Mongoid documents.'
|
12
|
+
s.description = 'Multiple databases Mongoid Models. Good for SaaS Apps.'
|
13
13
|
s.license = 'MIT'
|
14
14
|
|
15
15
|
s.rubyforge_project = 'mongoid-tenant'
|
@@ -17,6 +17,5 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.files = `git ls-files`.split("\n")
|
19
19
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
21
20
|
s.require_paths = ['lib']
|
22
21
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongoid::Tenancy do
|
4
|
+
def clear_tenancy!
|
5
|
+
Thread.current[:tenancy] = nil
|
6
|
+
end
|
7
|
+
|
8
|
+
describe 'A Journal' do
|
9
|
+
let(:journal) { Journal.create!(url: 'a_casseta_test', name: 'A Casseta') }
|
10
|
+
let(:other) { Journal.create!(url: 'a_planeta_test', name: 'O Planeta') }
|
11
|
+
|
12
|
+
it 'should work' do
|
13
|
+
journal.tenancy!
|
14
|
+
expect { Article.create!(title: 'Nice Coffeeshop') }.to_not raise_error
|
15
|
+
expect(Article.count).to eq 1
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should not interfer with mongoid' do
|
19
|
+
journal.tenancy!
|
20
|
+
expect(Journal.count).to eq 1
|
21
|
+
expect(Journal.all.to_a).to eq [journal]
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should switch from tenant to tenant' do
|
25
|
+
journal.tenancy!
|
26
|
+
expect { Article.create!(title: 'Nice Coffeeshop') }.to_not raise_error
|
27
|
+
expect(Article.count).to eq 1
|
28
|
+
other.tenancy!
|
29
|
+
expect(Article.count).to eq 0
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should switch back from tenant' do
|
33
|
+
other.tenancy!
|
34
|
+
expect { Article.create!(title: 'Nice Coffeeshop') }.to_not raise_error
|
35
|
+
expect(Article.count).to eq 1
|
36
|
+
journal.tenancy!
|
37
|
+
expect(Article.count).to eq 0
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should switch another test' do
|
41
|
+
journal.tenancy!
|
42
|
+
expect { Article.create!(title: 'Nice Coffeeshop 1') }.to_not raise_error
|
43
|
+
other.tenancy!
|
44
|
+
expect { Article.create!(title: 'Nice Coffeeshop 2') }.to_not raise_error
|
45
|
+
expect(Article.count).to eq 1
|
46
|
+
journal.tenancy!
|
47
|
+
expect(Article.count).to eq 1
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should have a multiple helper' do
|
51
|
+
journal.tenancy!
|
52
|
+
Article.create!(title: 'Nice Coffeeshop')
|
53
|
+
clear_tenancy!
|
54
|
+
expect(journal.articles.count).to eq 1
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should have a multiple helper' do
|
58
|
+
journal.tenancy!
|
59
|
+
article = Article.create!(title: 'Nice Coffeeshop')
|
60
|
+
clear_tenancy!
|
61
|
+
expect(journal.articles.first).to eq article
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should not leak tenancy key' do
|
65
|
+
journal && other
|
66
|
+
Journal.with_tenants { Article.create!(title: 'Hello') }
|
67
|
+
expect(Thread.current[:tenancy]).to be nil
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should have a multiple helper' do
|
71
|
+
journal && other
|
72
|
+
Journal.with_tenants { Article.create!(title: 'Hello') }
|
73
|
+
Journal.with_tenants { Article.create!(title: 'Hello') }
|
74
|
+
journal.tenancy!
|
75
|
+
expect(Article.count).to eq 2
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'A Blog' do
|
80
|
+
let(:blog) { Blog.create!(url: 'b_casseta_test', name: 'A Casseta') }
|
81
|
+
let(:other) { Blog.create!(url: 'b_planeta_test', name: 'O Planeta') }
|
82
|
+
|
83
|
+
it 'should not validate key' do
|
84
|
+
expect(Blog.create!(name: 'Monty News')).to be_valid
|
85
|
+
expect(Blog.count).to eq 1
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should work fine w/o key' do
|
89
|
+
Blog.create!(name: 'Monty News')
|
90
|
+
expect(Blog.first.name).to eq 'Monty News'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should not create database if it`s sparse' do
|
94
|
+
expect { Blog.create!(name: 'Monty News') }
|
95
|
+
.to_not change(self, :fetch_dbs)
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'should create database if it`s sparse' do
|
99
|
+
expect { blog && blog.tenancy! && Article.create! }
|
100
|
+
.to change(self, :fetch_dbs)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
data/spec/mongoid/tenant_spec.rb
CHANGED
@@ -1,4 +1,35 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Mongoid::Tenant do
|
4
|
+
it 'should have a tenancy' do
|
5
|
+
expect(Journal).to include(Mongoid::Tenancy)
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should not have both modules' do
|
9
|
+
expect(Journal).to_not include(Mongoid::Tenant)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should have a tenant' do
|
13
|
+
expect(Article).to include(Mongoid::Tenant)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should not have both modules' do
|
17
|
+
expect(Article).to_not include(Mongoid::Tenancy)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should not interfer with tenancy' do
|
21
|
+
expect do
|
22
|
+
Journal.create!(url: 'a_planeta_test', name: 'Planeta Diário')
|
23
|
+
end.to_not raise_error
|
24
|
+
expect(Journal.count).to eq 1
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should not interfer other models' do
|
28
|
+
expect { City.create!(name: 'Sin City') }.to_not raise_error
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should interfer with tenant w/o tenancy' do
|
32
|
+
expect { Article.create!(title: 'A Very Nice Coffeeshop') }
|
33
|
+
.to raise_error(NoMethodError)
|
34
|
+
end
|
4
35
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -16,7 +16,7 @@ require 'mongoid/tenant'
|
|
16
16
|
|
17
17
|
ENV['MONGOID_ENV'] = 'test'
|
18
18
|
|
19
|
-
|
19
|
+
DB_CONFIG = {
|
20
20
|
default: {
|
21
21
|
database: 'mongoid_tenant_test',
|
22
22
|
hosts: ["localhost: #{ENV['MONGODB_PORT'] || 27_017}"],
|
@@ -24,12 +24,28 @@ db_config = {
|
|
24
24
|
}
|
25
25
|
}
|
26
26
|
|
27
|
+
def new_conn(db = '')
|
28
|
+
Mongo::Client.new(DB_CONFIG[:default][:hosts], database: db)
|
29
|
+
end
|
30
|
+
|
31
|
+
def fetch_dbs
|
32
|
+
new_conn.database_names.to_a # each { |n| START_DBS << n }
|
33
|
+
end
|
34
|
+
|
35
|
+
def drop_shared
|
36
|
+
%w( a_casseta_test a_planeta_test b_casseta_test b_planeta_test ).each do |db|
|
37
|
+
new_conn(db).database.drop
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
START_DBS = fetch_dbs
|
42
|
+
|
27
43
|
Mongoid.configure do |config|
|
28
44
|
config.load_configuration(
|
29
45
|
if Mongoid::VERSION >= '5'
|
30
|
-
{ clients:
|
46
|
+
{ clients: DB_CONFIG }
|
31
47
|
else
|
32
|
-
{ sessions:
|
48
|
+
{ sessions: DB_CONFIG }
|
33
49
|
end
|
34
50
|
)
|
35
51
|
end
|
@@ -42,10 +58,19 @@ RSpec.configure do |config|
|
|
42
58
|
config.include Mongoid::Matchers
|
43
59
|
|
44
60
|
config.before(:each) do
|
45
|
-
|
61
|
+
Thread.current[:tenancy] = nil
|
62
|
+
drop_shared
|
63
|
+
# HACK: Mongoid.purge!
|
64
|
+
[Journal, Blog, City].each(&:delete_all)
|
65
|
+
end
|
66
|
+
|
67
|
+
config.after(:each) do
|
68
|
+
drop_shared
|
46
69
|
end
|
47
70
|
|
48
71
|
config.after(:suite) do
|
72
|
+
extra_dbs = fetch_dbs - START_DBS
|
73
|
+
fail "Extra DBs: #{extra_dbs.inspect}" unless extra_dbs.empty?
|
49
74
|
puts "\n# With Mongoid v#{Mongoid::VERSION}"
|
50
75
|
end
|
51
76
|
end
|
data/spec/support/models.rb
CHANGED
@@ -1,14 +1,42 @@
|
|
1
|
-
# A nice model for
|
1
|
+
# A nice model for jornalistic SaaS!
|
2
2
|
class Journal
|
3
3
|
include Mongoid::Document
|
4
4
|
include Mongoid::Tenancy
|
5
5
|
|
6
6
|
field :name
|
7
|
+
tenant_key :url
|
8
|
+
|
9
|
+
has_tenant :articles
|
7
10
|
end
|
8
11
|
|
12
|
+
# Reporter -> Journal tenant
|
13
|
+
class Reporter
|
14
|
+
include Mongoid::Document
|
15
|
+
include Mongoid::Tenant
|
16
|
+
|
17
|
+
field :name
|
18
|
+
end
|
19
|
+
|
20
|
+
# Article -> Journal tenant
|
9
21
|
class Article
|
10
22
|
include Mongoid::Document
|
11
23
|
include Mongoid::Tenant
|
24
|
+
|
12
25
|
field :title
|
13
26
|
field :body
|
14
27
|
end
|
28
|
+
|
29
|
+
# City normal model
|
30
|
+
class City
|
31
|
+
include Mongoid::Document
|
32
|
+
field :name
|
33
|
+
end
|
34
|
+
|
35
|
+
class Blog
|
36
|
+
include Mongoid::Document
|
37
|
+
include Mongoid::Tenancy
|
38
|
+
field :name
|
39
|
+
tenant_key :url, validates: { allow_nil: true }, index: { sparse: true }
|
40
|
+
|
41
|
+
has_tenant :articles
|
42
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-tenant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcos Piccinini
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mongoid
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
- - ">"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 4.0.0
|
27
|
-
description: Mongoid
|
27
|
+
description: Multiple databases Mongoid Models. Good for SaaS Apps.
|
28
28
|
email:
|
29
29
|
executables: []
|
30
30
|
extensions: []
|
@@ -45,6 +45,7 @@ files:
|
|
45
45
|
- lib/mongoid/tenant/tasks/tenant.rake
|
46
46
|
- lib/mongoid/tenant/version.rb
|
47
47
|
- mongoid-tenant.gemspec
|
48
|
+
- spec/mongoid/tenancy_spec.rb
|
48
49
|
- spec/mongoid/tenant_spec.rb
|
49
50
|
- spec/spec_helper.rb
|
50
51
|
- spec/support/models.rb
|
@@ -68,11 +69,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
68
69
|
version: '0'
|
69
70
|
requirements: []
|
70
71
|
rubyforge_project: mongoid-tenant
|
71
|
-
rubygems_version: 2.4.
|
72
|
+
rubygems_version: 2.4.8
|
72
73
|
signing_key:
|
73
74
|
specification_version: 4
|
74
|
-
summary:
|
75
|
+
summary: Multiple databases Models for Mongoid documents.
|
75
76
|
test_files:
|
77
|
+
- spec/mongoid/tenancy_spec.rb
|
76
78
|
- spec/mongoid/tenant_spec.rb
|
77
79
|
- spec/spec_helper.rb
|
78
80
|
- spec/support/models.rb
|
81
|
+
has_rdoc:
|