ros-apartment 2.7.0 → 2.8.1.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +78 -0
  3. data/.github/workflows/changelog.yml +63 -0
  4. data/.rubocop.yml +78 -4
  5. data/.rubocop_todo.yml +50 -13
  6. data/CHANGELOG.md +963 -0
  7. data/Gemfile +2 -2
  8. data/Guardfile +0 -15
  9. data/HISTORY.md +118 -84
  10. data/README.md +27 -0
  11. data/Rakefile +5 -2
  12. data/gemfiles/rails_5_0.gemfile +1 -1
  13. data/gemfiles/rails_5_1.gemfile +1 -1
  14. data/gemfiles/rails_5_2.gemfile +1 -1
  15. data/gemfiles/rails_6_0.gemfile +1 -1
  16. data/gemfiles/rails_master.gemfile +1 -1
  17. data/lib/apartment.rb +5 -3
  18. data/lib/apartment/active_record/connection_handling.rb +3 -0
  19. data/lib/apartment/active_record/internal_metadata.rb +0 -2
  20. data/lib/apartment/active_record/schema_migration.rb +0 -2
  21. data/lib/apartment/adapters/abstract_adapter.rb +5 -3
  22. data/lib/apartment/adapters/abstract_jdbc_adapter.rb +2 -1
  23. data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +2 -1
  24. data/lib/apartment/adapters/mysql2_adapter.rb +3 -0
  25. data/lib/apartment/adapters/postgresql_adapter.rb +30 -7
  26. data/lib/apartment/console.rb +5 -9
  27. data/lib/apartment/custom_console.rb +2 -2
  28. data/lib/apartment/log_subscriber.rb +33 -0
  29. data/lib/apartment/railtie.rb +26 -21
  30. data/lib/apartment/tasks/enhancements.rb +1 -1
  31. data/lib/apartment/tasks/task_helper.rb +7 -2
  32. data/lib/apartment/tenant.rb +6 -18
  33. data/lib/apartment/version.rb +1 -1
  34. data/lib/generators/apartment/install/templates/apartment.rb +2 -1
  35. data/lib/tasks/apartment.rake +5 -6
  36. data/{apartment.gemspec → ros-apartment.gemspec} +3 -4
  37. metadata +14 -12
  38. data/.travis.yml +0 -49
  39. data/lib/apartment/active_record/log_subscriber.rb +0 -41
@@ -7,7 +7,7 @@ module Apartment
7
7
  class RakeTaskEnhancer
8
8
  module TASKS
9
9
  ENHANCE_BEFORE = %w[db:drop].freeze
10
- ENHANCE_AFTER = %w[db:create db:migrate db:rollback db:migrate:up db:migrate:down db:migrate:redo db:seed].freeze
10
+ ENHANCE_AFTER = %w[db:migrate db:rollback db:migrate:up db:migrate:down db:migrate:redo db:seed].freeze
11
11
  freeze
12
12
  end
13
13
 
@@ -19,7 +19,6 @@ module Apartment
19
19
  def self.warn_if_tenants_empty
20
20
  return unless tenants.empty? && ENV['IGNORE_EMPTY_TENANTS'] != 'true'
21
21
 
22
- # rubocop:disable Rails/Output
23
22
  puts <<-WARNING
24
23
  [WARNING] - The list of tenants to migrate appears to be empty. This could mean a few things:
25
24
 
@@ -29,7 +28,13 @@ module Apartment
29
28
 
30
29
  Note that your tenants currently haven't been migrated. You'll need to run `db:migrate` to rectify this.
31
30
  WARNING
32
- # rubocop:enable Rails/Output
31
+ end
32
+
33
+ def self.create_tenant(tenant_name)
34
+ puts("Creating #{tenant_name} tenant")
35
+ Apartment::Tenant.create(tenant_name)
36
+ rescue Apartment::TenantExists => e
37
+ puts "Tried to create already existing tenant: #{e}"
33
38
  end
34
39
  end
35
40
  end
@@ -15,20 +15,6 @@ module Apartment
15
15
 
16
16
  attr_writer :config
17
17
 
18
- def init_once
19
- return if @already_initialized
20
-
21
- # To avoid infinite loops in work init is doing,
22
- # we need to set @already_initialized to true
23
- # before init is called
24
- @already_initialized = true
25
- init
26
- end
27
-
28
- def reinitialize
29
- @already_initialized = false
30
- end
31
-
32
18
  # Fetch the proper multi-tenant adapter based on Rails config
33
19
  #
34
20
  # @return {subclass of Apartment::AbstractAdapter}
@@ -38,9 +24,10 @@ module Apartment
38
24
  adapter_method = "#{config[:adapter]}_adapter"
39
25
 
40
26
  if defined?(JRUBY_VERSION)
41
- if config[:adapter] =~ /mysql/
27
+ case config[:adapter]
28
+ when /mysql/
42
29
  adapter_method = 'jdbc_mysql_adapter'
43
- elsif config[:adapter] =~ /postgresql/
30
+ when /postgresql/
44
31
  adapter_method = 'jdbc_postgresql_adapter'
45
32
  end
46
33
  end
@@ -51,7 +38,9 @@ module Apartment
51
38
  raise "The adapter `#{adapter_method}` is not yet supported"
52
39
  end
53
40
 
54
- raise AdapterNotFound, "database configuration specifies nonexistent #{config[:adapter]} adapter" unless respond_to?(adapter_method)
41
+ unless respond_to?(adapter_method)
42
+ raise AdapterNotFound, "database configuration specifies nonexistent #{config[:adapter]} adapter"
43
+ end
55
44
 
56
45
  send(adapter_method, config)
57
46
  end
@@ -61,7 +50,6 @@ module Apartment
61
50
  #
62
51
  def reload!(config = nil)
63
52
  Thread.current[:apartment_adapter] = nil
64
- reinitialize
65
53
  @config = config
66
54
  end
67
55
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Apartment
4
- VERSION = '2.7.0'
4
+ VERSION = '2.8.1.rc2'
5
5
  end
@@ -23,7 +23,8 @@ Apartment.configure do |config|
23
23
  # You can make this dynamic by providing a Proc object to be called on migrations.
24
24
  # This object should yield either:
25
25
  # - an array of strings representing each Tenant name.
26
- # - a hash which keys are tenant names, and values custom db config (must contain all key/values required in database.yml)
26
+ # - a hash which keys are tenant names, and values custom db config
27
+ # (must contain all key/values required in database.yml)
27
28
  #
28
29
  # config.tenant_names = lambda{ Customer.pluck(:tenant_name) }
29
30
  # config.tenant_names = ['tenant1', 'tenant2']
@@ -7,13 +7,10 @@ require 'parallel'
7
7
  apartment_namespace = namespace :apartment do
8
8
  desc 'Create all tenants'
9
9
  task :create do
10
+ Apartment::TaskHelper.warn_if_tenants_empty
11
+
10
12
  Apartment::TaskHelper.tenants.each do |tenant|
11
- begin
12
- puts("Creating #{tenant} tenant")
13
- Apartment::Tenant.create(tenant)
14
- rescue Apartment::TenantExists => e
15
- puts e.message
16
- end
13
+ Apartment::TaskHelper.create_tenant(tenant)
17
14
  end
18
15
  end
19
16
 
@@ -34,6 +31,7 @@ apartment_namespace = namespace :apartment do
34
31
  Apartment::TaskHelper.warn_if_tenants_empty
35
32
  Apartment::TaskHelper.each_tenant do |tenant|
36
33
  begin
34
+ Apartment::TaskHelper.create_tenant(tenant)
37
35
  puts("Migrating #{tenant} tenant")
38
36
  Apartment::Migrator.migrate tenant
39
37
  rescue Apartment::TenantNotFound => e
@@ -48,6 +46,7 @@ apartment_namespace = namespace :apartment do
48
46
 
49
47
  Apartment::TaskHelper.each_tenant do |tenant|
50
48
  begin
49
+ Apartment::TaskHelper.create_tenant(tenant)
51
50
  puts("Seeding #{tenant} tenant")
52
51
  Apartment::Tenant.switch(tenant) do
53
52
  Apartment::Tenant.seed
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.files = Dir.chdir(File.expand_path(__dir__)) do
18
18
  `git ls-files -z`.split("\x0").reject do |f|
19
19
  # NOTE: ignore all test related
20
- f.match(%r{^(test|spec|features)/})
20
+ f.match(%r{^(test|spec|features|documentation)/})
21
21
  end
22
22
  end
23
23
  s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
@@ -27,8 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.homepage = 'https://github.com/rails-on-services/apartment'
28
28
  s.licenses = ['MIT']
29
29
 
30
- # must be >= 3.1.2 due to bug in prepared_statements
31
- s.add_dependency 'activerecord', '>= 5.0.0', '< 6.1'
30
+ s.add_dependency 'activerecord', '>= 5.0.0', '< 6.2'
32
31
  s.add_dependency 'parallel', '< 2.0'
33
32
  s.add_dependency 'public_suffix', '>= 2.0.5', '< 5.0'
34
33
  s.add_dependency 'rack', '>= 1.3.6', '< 3.0'
@@ -36,7 +35,7 @@ Gem::Specification.new do |s|
36
35
  s.add_development_dependency 'appraisal', '~> 2.2'
37
36
  s.add_development_dependency 'bundler', '>= 1.3', '< 3.0'
38
37
  s.add_development_dependency 'capybara', '~> 2.0'
39
- s.add_development_dependency 'rake', '~> 0.9'
38
+ s.add_development_dependency 'rake', '~> 13.0'
40
39
  s.add_development_dependency 'rspec', '~> 3.4'
41
40
  s.add_development_dependency 'rspec-rails', '~> 3.4'
42
41
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ros-apartment
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.0
4
+ version: 2.8.1.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Brunner
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-06-26 00:00:00.000000000 Z
13
+ date: 2020-12-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 5.0.0
22
22
  - - "<"
23
23
  - !ruby/object:Gem::Version
24
- version: '6.1'
24
+ version: '6.2'
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -31,7 +31,7 @@ dependencies:
31
31
  version: 5.0.0
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
- version: '6.1'
34
+ version: '6.2'
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: parallel
37
37
  requirement: !ruby/object:Gem::Requirement
@@ -140,14 +140,14 @@ dependencies:
140
140
  requirements:
141
141
  - - "~>"
142
142
  - !ruby/object:Gem::Version
143
- version: '0.9'
143
+ version: '13.0'
144
144
  type: :development
145
145
  prerelease: false
146
146
  version_requirements: !ruby/object:Gem::Requirement
147
147
  requirements:
148
148
  - - "~>"
149
149
  - !ruby/object:Gem::Version
150
- version: '0.9'
150
+ version: '13.0'
151
151
  - !ruby/object:Gem::Dependency
152
152
  name: rspec
153
153
  requirement: !ruby/object:Gem::Requirement
@@ -228,22 +228,23 @@ executables: []
228
228
  extensions: []
229
229
  extra_rdoc_files: []
230
230
  files:
231
+ - ".circleci/config.yml"
231
232
  - ".github/ISSUE_TEMPLATE.md"
233
+ - ".github/workflows/changelog.yml"
232
234
  - ".gitignore"
233
235
  - ".pryrc"
234
236
  - ".rspec"
235
237
  - ".rubocop.yml"
236
238
  - ".rubocop_todo.yml"
237
239
  - ".story_branch.yml"
238
- - ".travis.yml"
239
240
  - Appraisals
241
+ - CHANGELOG.md
240
242
  - Gemfile
241
243
  - Guardfile
242
244
  - HISTORY.md
243
245
  - README.md
244
246
  - Rakefile
245
247
  - TODO.md
246
- - apartment.gemspec
247
248
  - docker-compose.yml
248
249
  - gemfiles/rails_4_2.gemfile
249
250
  - gemfiles/rails_5_0.gemfile
@@ -254,7 +255,6 @@ files:
254
255
  - lib/apartment.rb
255
256
  - lib/apartment/active_record/connection_handling.rb
256
257
  - lib/apartment/active_record/internal_metadata.rb
257
- - lib/apartment/active_record/log_subscriber.rb
258
258
  - lib/apartment/active_record/schema_migration.rb
259
259
  - lib/apartment/adapters/abstract_adapter.rb
260
260
  - lib/apartment/adapters/abstract_jdbc_adapter.rb
@@ -273,6 +273,7 @@ files:
273
273
  - lib/apartment/elevators/host.rb
274
274
  - lib/apartment/elevators/host_hash.rb
275
275
  - lib/apartment/elevators/subdomain.rb
276
+ - lib/apartment/log_subscriber.rb
276
277
  - lib/apartment/migrator.rb
277
278
  - lib/apartment/model.rb
278
279
  - lib/apartment/railtie.rb
@@ -285,6 +286,7 @@ files:
285
286
  - lib/generators/apartment/install/install_generator.rb
286
287
  - lib/generators/apartment/install/templates/apartment.rb
287
288
  - lib/tasks/apartment.rake
289
+ - ros-apartment.gemspec
288
290
  homepage: https://github.com/rails-on-services/apartment
289
291
  licenses:
290
292
  - MIT
@@ -300,11 +302,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
300
302
  version: '0'
301
303
  required_rubygems_version: !ruby/object:Gem::Requirement
302
304
  requirements:
303
- - - ">="
305
+ - - ">"
304
306
  - !ruby/object:Gem::Version
305
- version: '0'
307
+ version: 1.3.1
306
308
  requirements: []
307
- rubygems_version: 3.0.3
309
+ rubygems_version: 3.1.4
308
310
  signing_key:
309
311
  specification_version: 4
310
312
  summary: A Ruby gem for managing database multitenancy. Apartment Gem drop in replacement
@@ -1,49 +0,0 @@
1
- os: linux
2
-
3
- language: ruby
4
- services:
5
- - docker
6
- rvm:
7
- - jruby-9.2.11.0
8
- - 2.4.10
9
- - 2.5.8
10
- - 2.6.6
11
- - 2.7.1
12
- - jruby-head
13
- - ruby-head
14
-
15
- branches:
16
- only:
17
- - master
18
- - development
19
-
20
- gemfile:
21
- - gemfiles/rails_5_0.gemfile
22
- - gemfiles/rails_5_1.gemfile
23
- - gemfiles/rails_5_2.gemfile
24
- - gemfiles/rails_6_0.gemfile
25
- - gemfiles/rails_master.gemfile
26
-
27
- bundler_args: --without local
28
- before_install:
29
- - sudo /etc/init.d/mysql stop
30
- - sudo /etc/init.d/postgresql stop
31
- - docker-compose up -d
32
-
33
- env:
34
- RUBY_GC_MALLOC_LIMIT: 90000000
35
- RUBY_GC_HEAP_FREE_SLOTS: 200000
36
- jobs:
37
- include:
38
- - name: Rubocop Lint
39
- script: gem install perx-rubocop && rubocop
40
-
41
- allow_failures:
42
- - rvm: ruby-head
43
- - rvm: jruby-head
44
- - gemfile: gemfiles/rails_master.gemfile
45
- exclude:
46
- - rvm: 2.4.10
47
- gemfile: gemfiles/rails_6_0.gemfile
48
- fast_finish: true
49
- cache: bundler
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActiveRecord
4
- class LogSubscriber
5
- def apartment_log
6
- return unless Apartment.active_record_log
7
-
8
- database = color("[#{Apartment.connection.current_database}] ", ActiveSupport::LogSubscriber::MAGENTA, true)
9
- schema = nil
10
- schema = color("[#{Apartment.connection.schema_search_path.tr('"', '')}] ", ActiveSupport::LogSubscriber::YELLOW, true) unless Apartment.connection.schema_search_path.nil?
11
- "#{database}#{schema}"
12
- end
13
-
14
- def payload_binds(binds, type_casted_binds)
15
- return unless (binds || []).empty?
16
-
17
- casted_params = type_casted_binds(type_casted_binds)
18
- binds = ' ' + binds.zip(casted_params).map { |attr, value| render_bind(attr, value) }.inspect
19
- binds
20
- end
21
-
22
- def sql(event)
23
- self.class.runtime += event.duration
24
- return unless logger.debug?
25
-
26
- payload = event.payload
27
-
28
- return if IGNORE_PAYLOAD_NAMES.include?(payload[:name])
29
-
30
- name = "#{payload[:name]} (#{event.duration.round(1)}ms)"
31
- name = "CACHE #{name}" if payload[:cached]
32
- sql = payload[:sql]
33
- binds = payload_binds(payload[:binds], payload[:type_casted_binds])
34
-
35
- name = colorize_payload_name(name, payload[:name])
36
- sql = color(sql, sql_color(sql), true) if colorize_logging
37
-
38
- debug " #{apartment_log}#{name} #{sql}#{binds}"
39
- end
40
- end
41
- end