tenant_realm 1.0.2 → 1.1.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
  SHA256:
3
- metadata.gz: 5b8289d86354fe7ee75ca07d9b04ca4f7193a2bdb12f97e90f06757f6ee4103d
4
- data.tar.gz: 8bedca7bab527dd404765ac3d46db39364b9cce22416445f0e701760efdbc757
3
+ metadata.gz: cb38988c0c6f15c4ab3ad38292bf08b4f1f3f30579d4c50b6fe992748f9c4c53
4
+ data.tar.gz: '0740480bc624fbd480c00dee419d442b3358093b12b5a080787cba77898708b7'
5
5
  SHA512:
6
- metadata.gz: 60b01860846cc2db01b93c8701751bdb5b41f8fc3689b781b5b4a1a88985f7043246c89dd6527e87089560eb04c547cf0e51cd2d221d4c2997e73c524e440808
7
- data.tar.gz: 16452e0151f60519c4137730503573b8bc965bb918f00f00805e02ae05584c1c4a7e7942c5ad92f08a5e0b48a0b169a7658cd67dc3b902c07f78a9614193c441
6
+ metadata.gz: 2babc4881ad94fbd81ae8356de99ea1ba9b3cd970ac78ef5a3ccbde642c5cedffa5560b36a0e27cb88eed3d3b30f4300d21811edce64cb4149abf7070cbf64ac
7
+ data.tar.gz: a0fd3f716507576ba08520997faeb93f6748c383c523e96266ec5fd7c9969e36e66e948cf39630d8caa09642ac36ccaf6e8fbab52b4bb5c474f012885925e75c
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :tenant_realm do
4
+ desc 'Rollback db for all tenants'
5
+ task rollback: :environment do
6
+ tenants = TenantRealm::Tenant.tenants
7
+
8
+ puts 'Rollback primary'
9
+ Rake::Task['db:rollback:primary'].invoke
10
+ Rake::Task['db:rollback:primary'].reenable
11
+
12
+ tenants.each do |tenant|
13
+ shard = TenantRealm::Utils.shard_name_from_tenant(tenant:)
14
+
15
+ puts "Rollback #{shard}"
16
+
17
+ db_config = TenantRealm::Utils.dig_db_config(tenant:)
18
+
19
+ if db_config.blank?
20
+ puts "Skip Rollback #{shard}"
21
+
22
+ next
23
+ end
24
+
25
+ Rake::Task["db:rollback:#{shard}"].invoke
26
+ Rake::Task["db:rollback:#{shard}"].reenable
27
+ end
28
+ end
29
+ end
@@ -4,7 +4,7 @@ module TenantRealm
4
4
  module Cache
5
5
  class BaseCache
6
6
  class << self
7
- def cache_tenants(_tenants)
7
+ def cache_tenants(tenants:)
8
8
  raise NotImplementedError
9
9
  end
10
10
 
@@ -12,11 +12,11 @@ module TenantRealm
12
12
  raise NotImplementedError
13
13
  end
14
14
 
15
- def cache_tenant(_tenant)
15
+ def cache_tenant(tenant:)
16
16
  raise NotImplementedError
17
17
  end
18
18
 
19
- def tenant(_identifier)
19
+ def tenant(identifier:)
20
20
  raise NotImplementedError
21
21
  end
22
22
 
@@ -9,7 +9,7 @@ module TenantRealm
9
9
  module Cache
10
10
  class KredisCache < BaseCache
11
11
  class << self
12
- def cache_tenants(tenants)
12
+ def cache_tenants(tenants:)
13
13
  return if tenants.blank?
14
14
 
15
15
  cached_tenants = tenants_kredis
@@ -22,7 +22,7 @@ module TenantRealm
22
22
  cached_tenants.value&.map(&:deep_symbolize_keys) || []
23
23
  end
24
24
 
25
- def cache_tenant(tenant)
25
+ def cache_tenant(tenant:)
26
26
  return tenant if tenant.blank?
27
27
 
28
28
  tenant_unique_keys(tenant).each do |key|
@@ -33,7 +33,7 @@ module TenantRealm
33
33
  tenant
34
34
  end
35
35
 
36
- def tenant(identifier)
36
+ def tenant(identifier:)
37
37
  cached_tenant = tenant_kredis(identifier)
38
38
  cached_tenant.value&.deep_symbolize_keys
39
39
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # internal usage
4
+ # no need hash parameters
3
5
  module TenantRealm
4
6
  class Helpers
5
7
  class << self
@@ -10,42 +10,46 @@ module TenantRealm
10
10
  }
11
11
 
12
12
  class << self
13
- def tenants
13
+ def tenants(force_load: false)
14
14
  if cache.present?
15
- tenants = cache.tenants
16
- return tenants if tenants.present?
15
+ unless force_load
16
+ tenants = cache.tenants
17
+ return tenants if tenants.present?
18
+ end
17
19
 
18
20
  tenants = Utils.fetch_tenants
19
- cache.cache_tenants(tenants)
21
+ cache.cache_tenants(tenants:)
20
22
  tenants
21
23
  else
22
24
  Utils.fetch_tenants
23
25
  end
24
26
  end
25
27
 
26
- def tenant(identifier)
28
+ def tenant(identifier:, force_load: false)
27
29
  if cache.present?
28
- tenant = cache.tenant(identifier)
29
- return tenant if tenant.present?
30
+ unless force_load
31
+ tenant = cache.tenant(identifier:)
32
+ return tenant if tenant.present?
33
+ end
30
34
 
31
- tenant = Utils.fetch_tenant(identifier)
32
- cache.cache_tenant(tenant)
35
+ tenant = Utils.fetch_tenant(identifier:)
36
+ cache.cache_tenant(tenant:)
33
37
  tenant
34
38
  else
35
39
  Utils.fetch_tenant
36
40
  end
37
41
  end
38
42
 
39
- def cache_tenants(tenants)
43
+ def cache_tenants(tenants:)
40
44
  return Helpers.dev_log('Tenant Realm: Skip cache tenants because cache not configured') if cache.blank?
41
45
 
42
- cache.cache_tenants(tenants)
46
+ cache.cache_tenants(tenants:)
43
47
  end
44
48
 
45
- def cache_tenant(tenant)
49
+ def cache_tenant(tenant:)
46
50
  return Helpers.dev_log('Tenant Realm: Skip cache tenant because cache not configured') if cache.blank?
47
51
 
48
- cache.cache_tenant(tenant)
52
+ cache.cache_tenant(tenant:)
49
53
  end
50
54
 
51
55
  private
@@ -13,7 +13,7 @@ module TenantRealm
13
13
  (Config.fetch_tenants.call.presence || []).map(&:deep_symbolize_keys)
14
14
  end
15
15
 
16
- def fetch_tenant(identifier)
16
+ def fetch_tenant(identifier:)
17
17
  Helpers.raise_if_not_proc(Config.fetch_tenant, 'config.fetch_tenant')
18
18
 
19
19
  Config.fetch_tenant.call(identifier)&.deep_symbolize_keys
@@ -41,7 +41,7 @@ module TenantRealm
41
41
  shard.underscore
42
42
  end
43
43
 
44
- def identifier_resolver(request)
44
+ def identifier_resolver(request:)
45
45
  raise Error, 'config.identifier_resolver must be provided' if Config.identifier_resolver.blank?
46
46
 
47
47
  Helpers.raise_if_not_proc(Config.identifier_resolver, 'config.identifier_resolver')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TenantRealm
4
- VERSION = '1.0.2'
4
+ VERSION = '1.1.0'
5
5
  end
data/lib/tenant_realm.rb CHANGED
@@ -30,8 +30,8 @@ module TenantRealm
30
30
 
31
31
  return :primary if skip_switch_db
32
32
 
33
- identifier = Utils.identifier_resolver(request)
34
- tenant = Tenant.tenant(identifier)
33
+ identifier = Utils.identifier_resolver(request:)
34
+ tenant = Tenant.tenant(identifier:)
35
35
  db_config = Utils.dig_db_config(tenant:)
36
36
 
37
37
  return :primary if db_config.blank?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tenant_realm
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alpha
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-29 00:00:00.000000000 Z
11
+ date: 2024-01-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby on Rails gem to support multi-tenant
14
14
  email:
@@ -23,6 +23,7 @@ files:
23
23
  - lib/generators/templates/tenant_realm.tt
24
24
  - lib/generators/tenant_realm_generator.rb
25
25
  - lib/tasks/migrate.rake
26
+ - lib/tasks/rollback.rake
26
27
  - lib/tenant_realm.rb
27
28
  - lib/tenant_realm/cache/base_cache.rb
28
29
  - lib/tenant_realm/cache/kredis_cache.rb