synerma-apartment 3.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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.pryrc +5 -0
  4. data/.rspec +4 -0
  5. data/.rubocop.yml +79 -0
  6. data/.ruby-version +1 -0
  7. data/Appraisals +182 -0
  8. data/CODE_OF_CONDUCT.md +71 -0
  9. data/Gemfile +20 -0
  10. data/Guardfile +11 -0
  11. data/README.md +671 -0
  12. data/Rakefile +157 -0
  13. data/legacy_CHANGELOG.md +965 -0
  14. data/lib/apartment/active_record/connection_handling.rb +31 -0
  15. data/lib/apartment/active_record/internal_metadata.rb +9 -0
  16. data/lib/apartment/active_record/postgres/schema_dumper.rb +20 -0
  17. data/lib/apartment/active_record/postgresql_adapter.rb +58 -0
  18. data/lib/apartment/active_record/schema_migration.rb +11 -0
  19. data/lib/apartment/adapters/abstract_adapter.rb +275 -0
  20. data/lib/apartment/adapters/abstract_jdbc_adapter.rb +20 -0
  21. data/lib/apartment/adapters/jdbc_mysql_adapter.rb +19 -0
  22. data/lib/apartment/adapters/jdbc_postgresql_adapter.rb +62 -0
  23. data/lib/apartment/adapters/mysql2_adapter.rb +77 -0
  24. data/lib/apartment/adapters/postgis_adapter.rb +13 -0
  25. data/lib/apartment/adapters/postgresql_adapter.rb +280 -0
  26. data/lib/apartment/adapters/sqlite3_adapter.rb +66 -0
  27. data/lib/apartment/adapters/trilogy_adapter.rb +29 -0
  28. data/lib/apartment/console.rb +24 -0
  29. data/lib/apartment/custom_console.rb +42 -0
  30. data/lib/apartment/deprecation.rb +8 -0
  31. data/lib/apartment/elevators/domain.rb +23 -0
  32. data/lib/apartment/elevators/first_subdomain.rb +18 -0
  33. data/lib/apartment/elevators/generic.rb +33 -0
  34. data/lib/apartment/elevators/host.rb +35 -0
  35. data/lib/apartment/elevators/host_hash.rb +26 -0
  36. data/lib/apartment/elevators/subdomain.rb +66 -0
  37. data/lib/apartment/log_subscriber.rb +45 -0
  38. data/lib/apartment/migrator.rb +46 -0
  39. data/lib/apartment/model.rb +29 -0
  40. data/lib/apartment/railtie.rb +68 -0
  41. data/lib/apartment/tasks/enhancements.rb +55 -0
  42. data/lib/apartment/tasks/task_helper.rb +54 -0
  43. data/lib/apartment/tenant.rb +63 -0
  44. data/lib/apartment/version.rb +5 -0
  45. data/lib/apartment.rb +155 -0
  46. data/lib/generators/apartment/install/USAGE +5 -0
  47. data/lib/generators/apartment/install/install_generator.rb +11 -0
  48. data/lib/generators/apartment/install/templates/apartment.rb +116 -0
  49. data/lib/tasks/apartment.rake +106 -0
  50. data/synerma-apartment.gemspec +40 -0
  51. metadata +198 -0
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'apartment/migrator'
4
+ require 'apartment/tasks/task_helper'
5
+ require 'parallel'
6
+
7
+ apartment_namespace = namespace :apartment do
8
+ desc 'Create all tenants'
9
+ task :create do
10
+ Apartment::TaskHelper.warn_if_tenants_empty
11
+
12
+ Apartment::TaskHelper.tenants.each do |tenant|
13
+ Apartment::TaskHelper.create_tenant(tenant)
14
+ end
15
+ end
16
+
17
+ desc 'Drop all tenants'
18
+ task :drop do
19
+ Apartment::TaskHelper.tenants.each do |tenant|
20
+ puts("Dropping #{tenant} tenant")
21
+ Apartment::Tenant.drop(tenant)
22
+ rescue Apartment::TenantNotFound, ActiveRecord::NoDatabaseError => e
23
+ puts e.message
24
+ end
25
+ end
26
+
27
+ desc 'Migrate all tenants'
28
+ task :migrate do
29
+ Apartment::TaskHelper.warn_if_tenants_empty
30
+ Apartment::TaskHelper.each_tenant do |tenant|
31
+ Apartment::TaskHelper.migrate_tenant(tenant)
32
+ end
33
+ end
34
+
35
+ desc 'Seed all tenants'
36
+ task :seed do
37
+ Apartment::TaskHelper.warn_if_tenants_empty
38
+
39
+ Apartment::TaskHelper.each_tenant do |tenant|
40
+ Apartment::TaskHelper.create_tenant(tenant)
41
+ puts("Seeding #{tenant} tenant")
42
+ Apartment::Tenant.switch(tenant) do
43
+ Apartment::Tenant.seed
44
+ end
45
+ rescue Apartment::TenantNotFound => e
46
+ puts e.message
47
+ end
48
+ end
49
+
50
+ desc 'Rolls the migration back to the previous version (specify steps w/ STEP=n) across all tenants.'
51
+ task :rollback do
52
+ Apartment::TaskHelper.warn_if_tenants_empty
53
+
54
+ step = ENV['STEP'] ? ENV['STEP'].to_i : 1
55
+
56
+ Apartment::TaskHelper.each_tenant do |tenant|
57
+ puts("Rolling back #{tenant} tenant")
58
+ Apartment::Migrator.rollback tenant, step
59
+ rescue Apartment::TenantNotFound => e
60
+ puts e.message
61
+ end
62
+ end
63
+
64
+ namespace :migrate do
65
+ desc 'Runs the "up" for a given migration VERSION across all tenants.'
66
+ task :up do
67
+ Apartment::TaskHelper.warn_if_tenants_empty
68
+
69
+ version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
70
+ raise 'VERSION is required' unless version
71
+
72
+ Apartment::TaskHelper.each_tenant do |tenant|
73
+ puts("Migrating #{tenant} tenant up")
74
+ Apartment::Migrator.run :up, tenant, version
75
+ rescue Apartment::TenantNotFound => e
76
+ puts e.message
77
+ end
78
+ end
79
+
80
+ desc 'Runs the "down" for a given migration VERSION across all tenants.'
81
+ task :down do
82
+ Apartment::TaskHelper.warn_if_tenants_empty
83
+
84
+ version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
85
+ raise 'VERSION is required' unless version
86
+
87
+ Apartment::TaskHelper.each_tenant do |tenant|
88
+ puts("Migrating #{tenant} tenant down")
89
+ Apartment::Migrator.run :down, tenant, version
90
+ rescue Apartment::TenantNotFound => e
91
+ puts e.message
92
+ end
93
+ end
94
+
95
+ desc 'Rolls back the tenant one migration and re migrate up (options: STEP=x, VERSION=x).'
96
+ task :redo do
97
+ if ENV['VERSION']
98
+ apartment_namespace['migrate:down'].invoke
99
+ apartment_namespace['migrate:up'].invoke
100
+ else
101
+ apartment_namespace['rollback'].invoke
102
+ apartment_namespace['migrate'].invoke
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH << File.expand_path('lib', __dir__)
4
+ require 'apartment/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'synerma-apartment'
8
+ s.version = Apartment::VERSION
9
+
10
+ s.authors = ['Ryan Brunner', 'Brad Robertson', 'Rui Baltazar', 'Mauricio Novelo']
11
+ s.summary = 'A Ruby gem for managing database multitenancy. Apartment Gem drop in replacement'
12
+ s.description = 'Apartment allows Rack applications to deal with database multitenancy through ActiveRecord'
13
+ s.email = ['ryan@influitive.com', 'brad@influitive.com', 'rui.p.baltazar@gmail.com', 'mauricio@campusesp.com']
14
+ # Specify which files should be added to the gem when it is released.
15
+ # The `git ls-files -z` loads the files in the RubyGem that have been
16
+ # added into git.
17
+ s.files = Dir.chdir(File.expand_path(__dir__)) do
18
+ `git ls-files -z`.split("\x0").reject do |f|
19
+ # NOTE: ignore all test related
20
+ f.match(%r{^(test|spec|features|documentation|gemfiles|.github)/})
21
+ end
22
+ end
23
+ s.executables = s.files.grep(%r{^bin/}).map { |f| File.basename(f) }
24
+ s.require_paths = ['lib']
25
+
26
+ s.homepage = 'https://github.com/rails-on-services/apartment'
27
+ s.licenses = ['MIT']
28
+ s.metadata = {
29
+ 'github_repo' => 'ssh://github.com/rails-on-services/apartment',
30
+ 'rubygems_mfa_required' => 'true',
31
+ }
32
+
33
+ s.required_ruby_version = '>= 3.1', '<= 3.4'
34
+
35
+ s.add_dependency('activerecord', '>= 6.1.0', '< 8.1')
36
+ s.add_dependency('activesupport', '>= 6.1.0', '< 8.1')
37
+ s.add_dependency('parallel', '< 2.0')
38
+ s.add_dependency('public_suffix', '>= 2.0.5', '<= 6.0.1')
39
+ s.add_dependency('rack', '>= 1.3.6', '< 4.0')
40
+ end
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: synerma-apartment
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ryan Brunner
8
+ - Brad Robertson
9
+ - Rui Baltazar
10
+ - Mauricio Novelo
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2024-12-31 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: activerecord
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 6.1.0
23
+ - - "<"
24
+ - !ruby/object:Gem::Version
25
+ version: '8.1'
26
+ type: :runtime
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 6.1.0
33
+ - - "<"
34
+ - !ruby/object:Gem::Version
35
+ version: '8.1'
36
+ - !ruby/object:Gem::Dependency
37
+ name: activesupport
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 6.1.0
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: '8.1'
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 6.1.0
53
+ - - "<"
54
+ - !ruby/object:Gem::Version
55
+ version: '8.1'
56
+ - !ruby/object:Gem::Dependency
57
+ name: parallel
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '2.0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "<"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: public_suffix
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: 2.0.5
77
+ - - "<="
78
+ - !ruby/object:Gem::Version
79
+ version: 6.0.1
80
+ type: :runtime
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 2.0.5
87
+ - - "<="
88
+ - !ruby/object:Gem::Version
89
+ version: 6.0.1
90
+ - !ruby/object:Gem::Dependency
91
+ name: rack
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 1.3.6
97
+ - - "<"
98
+ - !ruby/object:Gem::Version
99
+ version: '4.0'
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: 1.3.6
107
+ - - "<"
108
+ - !ruby/object:Gem::Version
109
+ version: '4.0'
110
+ description: Apartment allows Rack applications to deal with database multitenancy
111
+ through ActiveRecord
112
+ email:
113
+ - ryan@influitive.com
114
+ - brad@influitive.com
115
+ - rui.p.baltazar@gmail.com
116
+ - mauricio@campusesp.com
117
+ executables: []
118
+ extensions: []
119
+ extra_rdoc_files: []
120
+ files:
121
+ - ".gitignore"
122
+ - ".pryrc"
123
+ - ".rspec"
124
+ - ".rubocop.yml"
125
+ - ".ruby-version"
126
+ - Appraisals
127
+ - CODE_OF_CONDUCT.md
128
+ - Gemfile
129
+ - Guardfile
130
+ - README.md
131
+ - Rakefile
132
+ - legacy_CHANGELOG.md
133
+ - lib/apartment.rb
134
+ - lib/apartment/active_record/connection_handling.rb
135
+ - lib/apartment/active_record/internal_metadata.rb
136
+ - lib/apartment/active_record/postgres/schema_dumper.rb
137
+ - lib/apartment/active_record/postgresql_adapter.rb
138
+ - lib/apartment/active_record/schema_migration.rb
139
+ - lib/apartment/adapters/abstract_adapter.rb
140
+ - lib/apartment/adapters/abstract_jdbc_adapter.rb
141
+ - lib/apartment/adapters/jdbc_mysql_adapter.rb
142
+ - lib/apartment/adapters/jdbc_postgresql_adapter.rb
143
+ - lib/apartment/adapters/mysql2_adapter.rb
144
+ - lib/apartment/adapters/postgis_adapter.rb
145
+ - lib/apartment/adapters/postgresql_adapter.rb
146
+ - lib/apartment/adapters/sqlite3_adapter.rb
147
+ - lib/apartment/adapters/trilogy_adapter.rb
148
+ - lib/apartment/console.rb
149
+ - lib/apartment/custom_console.rb
150
+ - lib/apartment/deprecation.rb
151
+ - lib/apartment/elevators/domain.rb
152
+ - lib/apartment/elevators/first_subdomain.rb
153
+ - lib/apartment/elevators/generic.rb
154
+ - lib/apartment/elevators/host.rb
155
+ - lib/apartment/elevators/host_hash.rb
156
+ - lib/apartment/elevators/subdomain.rb
157
+ - lib/apartment/log_subscriber.rb
158
+ - lib/apartment/migrator.rb
159
+ - lib/apartment/model.rb
160
+ - lib/apartment/railtie.rb
161
+ - lib/apartment/tasks/enhancements.rb
162
+ - lib/apartment/tasks/task_helper.rb
163
+ - lib/apartment/tenant.rb
164
+ - lib/apartment/version.rb
165
+ - lib/generators/apartment/install/USAGE
166
+ - lib/generators/apartment/install/install_generator.rb
167
+ - lib/generators/apartment/install/templates/apartment.rb
168
+ - lib/tasks/apartment.rake
169
+ - synerma-apartment.gemspec
170
+ homepage: https://github.com/rails-on-services/apartment
171
+ licenses:
172
+ - MIT
173
+ metadata:
174
+ github_repo: ssh://github.com/rails-on-services/apartment
175
+ rubygems_mfa_required: 'true'
176
+ post_install_message:
177
+ rdoc_options: []
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '3.1'
185
+ - - "<="
186
+ - !ruby/object:Gem::Version
187
+ version: '3.4'
188
+ required_rubygems_version: !ruby/object:Gem::Requirement
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ requirements: []
194
+ rubygems_version: 3.3.7
195
+ signing_key:
196
+ specification_version: 4
197
+ summary: A Ruby gem for managing database multitenancy. Apartment Gem drop in replacement
198
+ test_files: []