activerecord-multi-tenant 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -28
- data/Appraisals +6 -49
- data/Gemfile.lock +77 -61
- data/gemfiles/active_record_5.2.gemfile +2 -1
- data/gemfiles/active_record_5.2.gemfile.lock +38 -38
- data/gemfiles/active_record_6.0.gemfile +1 -1
- data/gemfiles/active_record_6.0.gemfile.lock +95 -95
- data/gemfiles/rails_5.2.gemfile +2 -1
- data/gemfiles/rails_5.2.gemfile.lock +38 -38
- data/gemfiles/rails_6.0.gemfile +1 -1
- data/gemfiles/rails_6.0.gemfile.lock +95 -95
- data/lib/activerecord-multi-tenant/controller_extensions.rb +2 -6
- data/lib/activerecord-multi-tenant/copy_from_client.rb +2 -2
- data/lib/activerecord-multi-tenant/migrations.rb +2 -2
- data/lib/activerecord-multi-tenant/model_extensions.rb +3 -9
- data/lib/activerecord-multi-tenant/multi_tenant.rb +1 -0
- data/lib/activerecord-multi-tenant/query_rewriter.rb +22 -73
- data/lib/activerecord-multi-tenant/sidekiq.rb +2 -1
- data/lib/activerecord-multi-tenant/version.rb +1 -1
- data/spec/activerecord-multi-tenant/controller_extensions_spec.rb +19 -24
- data/spec/activerecord-multi-tenant/model_extensions_spec.rb +6 -30
- data/spec/activerecord-multi-tenant/query_rewriter_spec.rb +8 -0
- data/spec/activerecord-multi-tenant/sidekiq_spec.rb +4 -4
- data/spec/schema.rb +1 -4
- data/spec/spec_helper.rb +1 -6
- metadata +6 -14
- data/gemfiles/active_record_5.1.gemfile +0 -15
- data/gemfiles/active_record_5.1.gemfile.lock +0 -180
- data/gemfiles/rails_4.2.gemfile +0 -16
- data/gemfiles/rails_4.2.gemfile.lock +0 -175
- data/gemfiles/rails_5.0.gemfile +0 -15
- data/gemfiles/rails_5.0.gemfile.lock +0 -180
- data/gemfiles/rails_5.1.gemfile +0 -15
- data/gemfiles/rails_5.1.gemfile.lock +0 -180
@@ -18,7 +18,8 @@ module Sidekiq::Middleware::MultiTenant
|
|
18
18
|
class Server
|
19
19
|
def call(worker_class, msg, queue)
|
20
20
|
if msg.has_key?('multi_tenant')
|
21
|
-
|
21
|
+
tenant = msg['multi_tenant']['class'].constantize.find(msg['multi_tenant']['id'])
|
22
|
+
MultiTenant.with(tenant) do
|
22
23
|
yield
|
23
24
|
end
|
24
25
|
else
|
@@ -21,11 +21,7 @@ describe "Controller Extensions", type: :controller do
|
|
21
21
|
describe ApplicationController, type: :controller do
|
22
22
|
controller do
|
23
23
|
def index
|
24
|
-
|
25
|
-
render body: 'custom called'
|
26
|
-
else
|
27
|
-
render text: 'custom called'
|
28
|
-
end
|
24
|
+
render body: 'custom called'
|
29
25
|
end
|
30
26
|
end
|
31
27
|
|
@@ -35,30 +31,29 @@ describe "Controller Extensions", type: :controller do
|
|
35
31
|
end
|
36
32
|
end
|
37
33
|
|
38
|
-
if ActionPack::VERSION::MAJOR >= 5
|
39
|
-
class APIApplicationController < ActionController::API
|
40
|
-
include Rails.application.routes.url_helpers
|
41
|
-
set_current_tenant_through_filter
|
42
|
-
before_action :your_method_that_finds_the_current_tenant
|
43
34
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
35
|
+
class APIApplicationController < ActionController::API
|
36
|
+
include Rails.application.routes.url_helpers
|
37
|
+
set_current_tenant_through_filter
|
38
|
+
before_action :your_method_that_finds_the_current_tenant
|
39
|
+
|
40
|
+
def your_method_that_finds_the_current_tenant
|
41
|
+
current_account = Account.new
|
42
|
+
current_account.name = 'account1'
|
43
|
+
set_current_tenant(current_account)
|
49
44
|
end
|
45
|
+
end
|
50
46
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
end
|
47
|
+
describe APIApplicationController, type: :controller do
|
48
|
+
controller do
|
49
|
+
def index
|
50
|
+
render body: 'custom called'
|
56
51
|
end
|
52
|
+
end
|
57
53
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
54
|
+
it 'Finds the correct tenant using the filter command' do
|
55
|
+
get :index
|
56
|
+
expect(MultiTenant.current_tenant.name).to eq 'account1'
|
62
57
|
end
|
63
58
|
end
|
64
59
|
end
|
@@ -412,17 +412,13 @@ describe MultiTenant do
|
|
412
412
|
account1 = Account.create! name: 'Account 1'
|
413
413
|
category1 = Category.create! name: 'Category 1'
|
414
414
|
|
415
|
-
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5
|
415
|
+
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5
|
416
416
|
<<-sql
|
417
417
|
SELECT "projects"."id" AS t0_r0, "projects"."account_id" AS t0_r1, "projects"."name" AS t0_r2, "categories"."id" AS t1_r0, "categories"."name" AS t1_r1 FROM "projects" LEFT OUTER JOIN "project_categories" ON "project_categories"."project_id" = "projects"."id" AND "project_categories"."account_id" = 1 AND "projects"."account_id" = 1 LEFT OUTER JOIN "categories" ON "categories"."id" = "project_categories"."category_id" AND "project_categories"."account_id" = 1 WHERE "projects"."account_id" = 1
|
418
418
|
sql
|
419
|
-
elsif uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 6
|
420
|
-
<<-sql
|
421
|
-
SELECT "projects"."id" AS t0_r0, "projects"."account_id" AS t0_r1, "projects"."name" AS t0_r2, "categories"."id" AS t1_r0, "categories"."name" AS t1_r1 FROM "projects" LEFT OUTER JOIN "project_categories" ON "project_categories"."account_id" = 1 AND "project_categories"."project_id" = "projects"."id" AND "projects"."account_id" = 1 LEFT OUTER JOIN "categories" ON "categories"."id" = "project_categories"."category_id" AND "project_categories"."account_id" = 1 WHERE "projects"."account_id" = 1
|
422
|
-
sql
|
423
419
|
else
|
424
420
|
<<-sql
|
425
|
-
SELECT "projects"."id" AS t0_r0, "projects"."account_id" AS t0_r1, "projects"."name" AS t0_r2, "categories"."id" AS t1_r0, "categories"."name" AS t1_r1 FROM "projects" LEFT OUTER JOIN "project_categories" ON "project_categories"."
|
421
|
+
SELECT "projects"."id" AS t0_r0, "projects"."account_id" AS t0_r1, "projects"."name" AS t0_r2, "categories"."id" AS t1_r0, "categories"."name" AS t1_r1 FROM "projects" LEFT OUTER JOIN "project_categories" ON "project_categories"."account_id" = 1 AND "project_categories"."project_id" = "projects"."id" AND "projects"."account_id" = 1 LEFT OUTER JOIN "categories" ON "categories"."id" = "project_categories"."category_id" AND "project_categories"."account_id" = 1 WHERE "projects"."account_id" = 1
|
426
422
|
sql
|
427
423
|
end
|
428
424
|
|
@@ -455,17 +451,13 @@ describe MultiTenant do
|
|
455
451
|
category1 = Category.create! name: 'Category 1'
|
456
452
|
|
457
453
|
MultiTenant.with(account1) do
|
458
|
-
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5
|
454
|
+
expected_sql = if uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 5
|
459
455
|
<<-sql
|
460
456
|
SELECT "tasks".* FROM "tasks" INNER JOIN "projects" ON "projects"."id" = "tasks"."project_id" AND "projects"."account_id" = 1 LEFT JOIN project_categories pc ON project.category_id = pc.id WHERE "tasks"."account_id" = 1
|
461
457
|
sql
|
462
|
-
elsif uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 6
|
463
|
-
<<-sql
|
464
|
-
SELECT "tasks".* FROM "tasks" INNER JOIN "projects" ON "projects"."account_id" = 1 AND "projects"."id" = "tasks"."project_id" LEFT JOIN project_categories pc ON project.category_id = pc.id WHERE "tasks"."account_id" = 1
|
465
|
-
sql
|
466
458
|
else
|
467
459
|
<<-sql
|
468
|
-
SELECT "tasks".* FROM "tasks" INNER JOIN "projects" ON "projects"."
|
460
|
+
SELECT "tasks".* FROM "tasks" INNER JOIN "projects" ON "projects"."account_id" = 1 AND "projects"."id" = "tasks"."project_id" LEFT JOIN project_categories pc ON project.category_id = pc.id WHERE "tasks"."account_id" = 1
|
469
461
|
sql
|
470
462
|
end
|
471
463
|
|
@@ -497,17 +489,9 @@ describe MultiTenant do
|
|
497
489
|
<<-sql.strip
|
498
490
|
SELECT "projects".* FROM "projects" WHERE "projects"."account_id" = #{account.id} AND "projects"."id" = $1 LIMIT $2
|
499
491
|
sql
|
500
|
-
elsif uses_prepared_statements? && ActiveRecord::VERSION::MAJOR > 4
|
501
|
-
<<-sql.strip
|
502
|
-
SELECT "projects".* FROM "projects" WHERE "projects"."account_id" = #{account.id} AND "projects"."id" = $1 LIMIT $2
|
503
|
-
sql
|
504
|
-
elsif uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 4
|
505
|
-
<<-sql.strip
|
506
|
-
SELECT "projects".* FROM "projects" WHERE "projects"."account_id" = #{account.id} AND "projects"."id" = $1 LIMIT 1
|
507
|
-
sql
|
508
492
|
else
|
509
493
|
<<-sql.strip
|
510
|
-
SELECT "projects".* FROM "projects" WHERE "projects"."account_id" = #{account.id} AND "projects"."id" =
|
494
|
+
SELECT "projects".* FROM "projects" WHERE "projects"."account_id" = #{account.id} AND "projects"."id" = $1 LIMIT $2
|
511
495
|
sql
|
512
496
|
end
|
513
497
|
|
@@ -520,17 +504,9 @@ describe MultiTenant do
|
|
520
504
|
<<-sql.strip
|
521
505
|
SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT $2
|
522
506
|
sql
|
523
|
-
elsif uses_prepared_statements? && ActiveRecord::VERSION::MAJOR > 4
|
524
|
-
<<-sql.strip
|
525
|
-
SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT $2
|
526
|
-
sql
|
527
|
-
elsif uses_prepared_statements? && ActiveRecord::VERSION::MAJOR == 4
|
528
|
-
<<-sql.strip
|
529
|
-
SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT 1
|
530
|
-
sql
|
531
507
|
else
|
532
508
|
<<-sql.strip
|
533
|
-
SELECT "projects".* FROM "projects" WHERE "projects"."id" =
|
509
|
+
SELECT "projects".* FROM "projects" WHERE "projects"."id" = $1 LIMIT $2
|
534
510
|
sql
|
535
511
|
end
|
536
512
|
|
@@ -90,4 +90,12 @@ describe "Query Rewriter" do
|
|
90
90
|
}.to change { Project.count }.from(3).to(1)
|
91
91
|
end
|
92
92
|
end
|
93
|
+
|
94
|
+
context "when update without arel" do
|
95
|
+
it "can call method" do
|
96
|
+
expect {
|
97
|
+
ActiveRecord::Base.connection.update("SELECT 1")
|
98
|
+
}.not_to raise_error
|
99
|
+
end
|
100
|
+
end
|
93
101
|
end
|
@@ -4,14 +4,14 @@ require 'activerecord-multi-tenant/sidekiq'
|
|
4
4
|
|
5
5
|
describe MultiTenant, 'Sidekiq' do
|
6
6
|
let(:server) { Sidekiq::Middleware::MultiTenant::Server.new }
|
7
|
+
let(:account) { Account.create(name: 'test') }
|
7
8
|
|
8
9
|
describe 'server middleware' do
|
9
10
|
it 'sets the multitenant context when provided in message' do
|
10
|
-
|
11
|
-
|
12
|
-
'multi_tenant' => { 'class' => MultiTenant.current_tenant_class, 'id' => tenant_id}},
|
11
|
+
server.call(double,{'bogus' => 'message',
|
12
|
+
'multi_tenant' => { 'class' => account.class.name, 'id' => account.id}},
|
13
13
|
'bogus_queue') do
|
14
|
-
expect(MultiTenant.current_tenant).to eq(
|
14
|
+
expect(MultiTenant.current_tenant).to eq(account)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
data/spec/schema.rb
CHANGED
@@ -181,10 +181,7 @@ end
|
|
181
181
|
class Comment < ActiveRecord::Base
|
182
182
|
multi_tenant :account
|
183
183
|
belongs_to :commentable, polymorphic: true
|
184
|
-
|
185
|
-
if ActiveRecord::VERSION::MAJOR >= 4
|
186
|
-
belongs_to :task, -> { where(comments: { commentable_type: 'Task' }) }, foreign_key: 'commentable_id'
|
187
|
-
end
|
184
|
+
belongs_to :task, -> { where(comments: { commentable_type: 'Task' }) }, foreign_key: 'commentable_id'
|
188
185
|
end
|
189
186
|
|
190
187
|
class Organization < ActiveRecord::Base
|
data/spec/spec_helper.rb
CHANGED
@@ -43,12 +43,7 @@ MultiTenantTest::Application.config.secret_token = 'x' * 40
|
|
43
43
|
MultiTenantTest::Application.config.secret_key_base = 'y' * 40
|
44
44
|
|
45
45
|
def uses_prepared_statements?
|
46
|
-
|
47
|
-
config = ActiveRecord::Base.connection.instance_variable_get(:@config)
|
48
|
-
config.fetch(:prepared_statements, true)
|
49
|
-
else
|
50
|
-
ActiveRecord::Base.connection.prepared_statements
|
51
|
-
end
|
46
|
+
ActiveRecord::Base.connection.prepared_statements
|
52
47
|
end
|
53
48
|
|
54
49
|
require 'schema'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-multi-tenant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Citus Data
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: request_store
|
@@ -168,18 +168,10 @@ files:
|
|
168
168
|
- activerecord-multi-tenant.gemspec
|
169
169
|
- docker-compose.yml
|
170
170
|
- gemfiles/.bundle/config
|
171
|
-
- gemfiles/active_record_5.1.gemfile
|
172
|
-
- gemfiles/active_record_5.1.gemfile.lock
|
173
171
|
- gemfiles/active_record_5.2.gemfile
|
174
172
|
- gemfiles/active_record_5.2.gemfile.lock
|
175
173
|
- gemfiles/active_record_6.0.gemfile
|
176
174
|
- gemfiles/active_record_6.0.gemfile.lock
|
177
|
-
- gemfiles/rails_4.2.gemfile
|
178
|
-
- gemfiles/rails_4.2.gemfile.lock
|
179
|
-
- gemfiles/rails_5.0.gemfile
|
180
|
-
- gemfiles/rails_5.0.gemfile.lock
|
181
|
-
- gemfiles/rails_5.1.gemfile
|
182
|
-
- gemfiles/rails_5.1.gemfile.lock
|
183
175
|
- gemfiles/rails_5.2.gemfile
|
184
176
|
- gemfiles/rails_5.2.gemfile.lock
|
185
177
|
- gemfiles/rails_6.0.gemfile
|
@@ -214,7 +206,7 @@ homepage: https://github.com/citusdata/activerecord-multi-tenant
|
|
214
206
|
licenses:
|
215
207
|
- MIT
|
216
208
|
metadata: {}
|
217
|
-
post_install_message:
|
209
|
+
post_install_message:
|
218
210
|
rdoc_options: []
|
219
211
|
require_paths:
|
220
212
|
- lib
|
@@ -229,8 +221,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
229
221
|
- !ruby/object:Gem::Version
|
230
222
|
version: '0'
|
231
223
|
requirements: []
|
232
|
-
rubygems_version: 3.
|
233
|
-
signing_key:
|
224
|
+
rubygems_version: 3.1.2
|
225
|
+
signing_key:
|
234
226
|
specification_version: 4
|
235
227
|
summary: ActiveRecord/Rails integration for multi-tenant databases, in particular
|
236
228
|
the Citus extension for PostgreSQL
|
@@ -1,15 +0,0 @@
|
|
1
|
-
# This file was generated by Appraisal
|
2
|
-
|
3
|
-
source "https://rubygems.org"
|
4
|
-
|
5
|
-
gem "appraisal"
|
6
|
-
gem "activerecord", "~> 5.1.0"
|
7
|
-
gem "i18n", "~> 0.9.5"
|
8
|
-
gem "nokogiri", "~> 1.7.1"
|
9
|
-
gem "nio4r", "~> 2.3.1"
|
10
|
-
gem "sprockets", "~> 3.7.1"
|
11
|
-
gem "byebug", "~> 9.0.6"
|
12
|
-
gem "rake", "12.0.0"
|
13
|
-
gem "redis", "3.3.3"
|
14
|
-
|
15
|
-
gemspec path: "../"
|
@@ -1,180 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ..
|
3
|
-
specs:
|
4
|
-
activerecord-multi-tenant (1.0.4)
|
5
|
-
rails (>= 4.2)
|
6
|
-
request_store (>= 1.0.5)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: https://rubygems.org/
|
10
|
-
specs:
|
11
|
-
actioncable (5.1.7)
|
12
|
-
actionpack (= 5.1.7)
|
13
|
-
nio4r (~> 2.0)
|
14
|
-
websocket-driver (~> 0.6.1)
|
15
|
-
actionmailer (5.1.7)
|
16
|
-
actionpack (= 5.1.7)
|
17
|
-
actionview (= 5.1.7)
|
18
|
-
activejob (= 5.1.7)
|
19
|
-
mail (~> 2.5, >= 2.5.4)
|
20
|
-
rails-dom-testing (~> 2.0)
|
21
|
-
actionpack (5.1.7)
|
22
|
-
actionview (= 5.1.7)
|
23
|
-
activesupport (= 5.1.7)
|
24
|
-
rack (~> 2.0)
|
25
|
-
rack-test (>= 0.6.3)
|
26
|
-
rails-dom-testing (~> 2.0)
|
27
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
28
|
-
actionview (5.1.7)
|
29
|
-
activesupport (= 5.1.7)
|
30
|
-
builder (~> 3.1)
|
31
|
-
erubi (~> 1.4)
|
32
|
-
rails-dom-testing (~> 2.0)
|
33
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
34
|
-
activejob (5.1.7)
|
35
|
-
activesupport (= 5.1.7)
|
36
|
-
globalid (>= 0.3.6)
|
37
|
-
activemodel (5.1.7)
|
38
|
-
activesupport (= 5.1.7)
|
39
|
-
activerecord (5.1.7)
|
40
|
-
activemodel (= 5.1.7)
|
41
|
-
activesupport (= 5.1.7)
|
42
|
-
arel (~> 8.0)
|
43
|
-
activesupport (5.1.7)
|
44
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
45
|
-
i18n (>= 0.7, < 2)
|
46
|
-
minitest (~> 5.1)
|
47
|
-
tzinfo (~> 1.1)
|
48
|
-
appraisal (2.2.0)
|
49
|
-
bundler
|
50
|
-
rake
|
51
|
-
thor (>= 0.14.0)
|
52
|
-
arel (8.0.0)
|
53
|
-
builder (3.2.3)
|
54
|
-
byebug (9.0.6)
|
55
|
-
coderay (1.1.2)
|
56
|
-
concurrent-ruby (1.1.5)
|
57
|
-
connection_pool (2.2.2)
|
58
|
-
crass (1.0.4)
|
59
|
-
diff-lcs (1.3)
|
60
|
-
erubi (1.9.0)
|
61
|
-
globalid (0.4.2)
|
62
|
-
activesupport (>= 4.2.0)
|
63
|
-
i18n (0.9.5)
|
64
|
-
concurrent-ruby (~> 1.0)
|
65
|
-
loofah (2.3.0)
|
66
|
-
crass (~> 1.0.2)
|
67
|
-
nokogiri (>= 1.5.9)
|
68
|
-
mail (2.7.1)
|
69
|
-
mini_mime (>= 0.1.1)
|
70
|
-
method_source (0.9.2)
|
71
|
-
mini_mime (1.0.2)
|
72
|
-
mini_portile2 (2.1.0)
|
73
|
-
minitest (5.12.2)
|
74
|
-
nio4r (2.3.1)
|
75
|
-
nokogiri (1.7.2)
|
76
|
-
mini_portile2 (~> 2.1.0)
|
77
|
-
pg (1.1.4)
|
78
|
-
pry (0.12.2)
|
79
|
-
coderay (~> 1.1.0)
|
80
|
-
method_source (~> 0.9.0)
|
81
|
-
pry-byebug (3.4.3)
|
82
|
-
byebug (>= 9.0, < 9.1)
|
83
|
-
pry (~> 0.10)
|
84
|
-
rack (2.0.7)
|
85
|
-
rack-protection (2.0.7)
|
86
|
-
rack
|
87
|
-
rack-test (1.1.0)
|
88
|
-
rack (>= 1.0, < 3)
|
89
|
-
rails (5.1.7)
|
90
|
-
actioncable (= 5.1.7)
|
91
|
-
actionmailer (= 5.1.7)
|
92
|
-
actionpack (= 5.1.7)
|
93
|
-
actionview (= 5.1.7)
|
94
|
-
activejob (= 5.1.7)
|
95
|
-
activemodel (= 5.1.7)
|
96
|
-
activerecord (= 5.1.7)
|
97
|
-
activesupport (= 5.1.7)
|
98
|
-
bundler (>= 1.3.0)
|
99
|
-
railties (= 5.1.7)
|
100
|
-
sprockets-rails (>= 2.0.0)
|
101
|
-
rails-dom-testing (2.0.3)
|
102
|
-
activesupport (>= 4.2.0)
|
103
|
-
nokogiri (>= 1.6)
|
104
|
-
rails-html-sanitizer (1.3.0)
|
105
|
-
loofah (~> 2.3)
|
106
|
-
railties (5.1.7)
|
107
|
-
actionpack (= 5.1.7)
|
108
|
-
activesupport (= 5.1.7)
|
109
|
-
method_source
|
110
|
-
rake (>= 0.8.7)
|
111
|
-
thor (>= 0.18.1, < 2.0)
|
112
|
-
rake (12.0.0)
|
113
|
-
redis (3.3.3)
|
114
|
-
request_store (1.4.1)
|
115
|
-
rack (>= 1.4)
|
116
|
-
rspec (3.9.0)
|
117
|
-
rspec-core (~> 3.9.0)
|
118
|
-
rspec-expectations (~> 3.9.0)
|
119
|
-
rspec-mocks (~> 3.9.0)
|
120
|
-
rspec-core (3.9.0)
|
121
|
-
rspec-support (~> 3.9.0)
|
122
|
-
rspec-expectations (3.9.0)
|
123
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
124
|
-
rspec-support (~> 3.9.0)
|
125
|
-
rspec-mocks (3.9.0)
|
126
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
127
|
-
rspec-support (~> 3.9.0)
|
128
|
-
rspec-rails (3.9.0)
|
129
|
-
actionpack (>= 3.0)
|
130
|
-
activesupport (>= 3.0)
|
131
|
-
railties (>= 3.0)
|
132
|
-
rspec-core (~> 3.9.0)
|
133
|
-
rspec-expectations (~> 3.9.0)
|
134
|
-
rspec-mocks (~> 3.9.0)
|
135
|
-
rspec-support (~> 3.9.0)
|
136
|
-
rspec-support (3.9.0)
|
137
|
-
sidekiq (5.0.4)
|
138
|
-
concurrent-ruby (~> 1.0)
|
139
|
-
connection_pool (~> 2.2, >= 2.2.0)
|
140
|
-
rack-protection (>= 1.5.0)
|
141
|
-
redis (~> 3.3, >= 3.3.3)
|
142
|
-
sprockets (3.7.2)
|
143
|
-
concurrent-ruby (~> 1.0)
|
144
|
-
rack (> 1, < 3)
|
145
|
-
sprockets-rails (3.2.1)
|
146
|
-
actionpack (>= 4.0)
|
147
|
-
activesupport (>= 4.0)
|
148
|
-
sprockets (>= 3.0.0)
|
149
|
-
thor (0.20.3)
|
150
|
-
thread_safe (0.3.6)
|
151
|
-
tzinfo (1.2.5)
|
152
|
-
thread_safe (~> 0.1)
|
153
|
-
websocket-driver (0.6.5)
|
154
|
-
websocket-extensions (>= 0.1.0)
|
155
|
-
websocket-extensions (0.1.4)
|
156
|
-
|
157
|
-
PLATFORMS
|
158
|
-
ruby
|
159
|
-
|
160
|
-
DEPENDENCIES
|
161
|
-
activerecord (~> 5.1.0)
|
162
|
-
activerecord-multi-tenant!
|
163
|
-
appraisal
|
164
|
-
byebug (~> 9.0.6)
|
165
|
-
i18n (~> 0.9.5)
|
166
|
-
nio4r (~> 2.3.1)
|
167
|
-
nokogiri (~> 1.7.1)
|
168
|
-
pg
|
169
|
-
pry
|
170
|
-
pry-byebug
|
171
|
-
rake (= 12.0.0)
|
172
|
-
redis (= 3.3.3)
|
173
|
-
rspec (>= 3.0)
|
174
|
-
rspec-rails
|
175
|
-
sidekiq
|
176
|
-
sprockets (~> 3.7.1)
|
177
|
-
thor
|
178
|
-
|
179
|
-
BUNDLED WITH
|
180
|
-
1.17.3
|