ec-pg 0.1.3 → 0.1.5

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: 615463774272fc429a2f2dfe75db88f133cdd4507b5d5d94147ff84da214a220
4
- data.tar.gz: f23f77f305c261f719a37a79d9728aba485a7b214332b08abc87abcab2330421
3
+ metadata.gz: 63b59448c98ca14882ddcd20aab8efd9e35c3d970891ca2f97722a539ec31bd1
4
+ data.tar.gz: 592bba1d9afb65ca9ad8b49baa45b217c0f6872e5558abb90a0044e0e8a7b6ea
5
5
  SHA512:
6
- metadata.gz: 27e2de6ff3980f2ff75160147fcfc87dd1ad2b5f4f3965bde1601883c23bfa637fc0c38ce93d6b7a3b4f2d537eb8835252026781e162a7324e3951f2e216ae22
7
- data.tar.gz: f8135d52f5fd32e97a6e992b6930b0a19b14a27d3e926d6ef03ae19df960baf72ca54557c8d8e5dad0184b6f4360b69cae9be961cac084bc452558362fb7e35f
6
+ metadata.gz: 38921ca6212c3e0a5468db148a1b663adccc23c463c8fc12c2b00a497b6696a83109e8b76c2597c947e06afbf1878607beb235532ab2b64157f7497c2d913391
7
+ data.tar.gz: aa7e5b7f89c86a26c0f1171f227fb4a5664a2fc6d381f263c69368a11347acb8c8571da3b1f22baff9322468d34c5a1e0c9c2e58f15fa0061d0bdc3a5c99472a
@@ -5,116 +5,58 @@ module Ec
5
5
  # Runs ActiveRecord migrations in the context of a specific schema or shard.
6
6
  #
7
7
  # == Schema migrations
8
- #
9
- # Sets search_path to the target schema before running migrations so that
10
- # Rails creates (and tracks via schema_migrations) tables inside that schema.
11
- #
12
- # Migrator.migrate_schema("tenant_abc")
13
- # Migrator.migrate_schema("tenant_abc", version: 20240101120000)
14
- # Migrator.rollback_schema("tenant_abc", steps: 2)
15
- #
16
- # Migrator.migrate_each_schema(["tenant_a", "tenant_b"])
17
- #
18
- # == Shard migrations
19
- #
20
- # Connects to the target shard before running migrations.
21
- #
22
- # Migrator.migrate_shard(:shard_one)
23
- # Migrator.rollback_shard(:shard_one, steps: 1)
24
- #
25
- # # Migrate all shards derived from configuration.number_of_shards
26
- # Migrator.migrate_each_shard
27
- #
28
- # # Or supply an explicit list
29
- # Migrator.migrate_each_shard([:shard_one, :shard_two])
30
- #
31
8
  class Migrator
32
9
  class << self
33
- # Runs pending migrations with search_path set to +schema_name+.
34
- #
35
- # @param schema_name [String]
36
- # @param paths [Array<String>] migration paths (defaults to Rails configured paths)
37
- # @param version [Integer, nil] target version; migrates to latest when nil
38
- def migrate_schema(connection, schema_name, paths: nil, version: nil)
39
- Ec::Pg.dprint("Running migration for: #{schema_name}".red)
40
- connection.schema_search_path = schema_name
41
- run_migrations(connection, paths: paths, version: version)
42
- end
43
10
 
11
+ # Runs pending migrations on all schemas
12
+ #
44
13
  def migrate_all_schemas
45
14
  Ec::Pg::SchemaMixin.registered_models.each do |model|
46
15
  model.schemas.each do |shard, schemas|
47
16
  Ec::Pg.switch(shard: shard) do
48
- schemas.each do |schema|
49
- Ec::Pg.dprint("migrating model: #{model}, shard: #{shard}, schema: #{schema}")
50
- migrate_schema(model.connection, schema)
17
+ schemas.each do |schema_name|
18
+ Ec::Pg.dprint("migrating model: #{model}, shard: #{shard}, schema: #{schema_name}".red)
19
+ migrate_schema(model.connection, schema_name)
51
20
  end
52
21
  end
53
22
  end
54
23
  end
55
24
  end
56
25
 
57
- # Calls {migrate_schema} for each name in +schema_names+.
26
+ # Rollsback schemas
58
27
  #
59
- # @param schema_names [Array<String>]
60
- def migrate_each_schema(connection, schema_names, paths: nil, version: nil)
61
- schema_names.each { |name| migrate_schema(connection, name, paths: paths, version: version) }
62
- end
63
-
64
- # Rolls back +steps+ migrations with search_path set to +schema_name+.
65
- #
66
- # @param schema_name [String]
67
- # @param steps [Integer] number of migrations to roll back (default 1)
68
- def rollback_schema(schema_name, steps: 1, paths: nil)
69
- SchemaManager.with_schema(schema_name) do
70
- build_context(paths).rollback(steps)
28
+ def rollback_all_schemas(steps: 1)
29
+ Ec::Pg::SchemaMixin.registered_models.each do |model|
30
+ model.schemas.each do |shard, schemas|
31
+ Ec::Pg.switch(shard: shard) do
32
+ schemas.each do |schema_name|
33
+ Ec::Pg.dprint("rolling back model: #{model}, shard: #{shard}, schema: #{schema_name}".red)
34
+ rollback_schema(model.connection, schema_name, steps)
35
+ end
36
+ end
37
+ end
71
38
  end
72
39
  end
73
40
 
74
- # Runs pending migrations connected to +shard_name+.
75
- #
76
- # @param shard_name [Symbol]
77
- # @param paths [Array<String>]
78
- # @param version [Integer, nil]
79
- def migrate_shard(shard_name, paths: nil, version: nil)
80
- ShardManager.with_shard(shard_name) do
81
- run_migrations(paths: paths, version: version)
82
- end
83
- end
84
41
 
85
- # Calls {migrate_shard} for each name in +shard_names+.
86
- # When +shard_names+ is omitted, derives +:shard_1+ through +:shard_N+
87
- # from +configuration.number_of_shards+.
88
- #
89
- # @param shard_names [Array<Symbol>, nil]
90
- def migrate_each_shard(shard_names = nil, paths: nil, version: nil)
91
- (shard_names || default_shards).each do |name|
92
- migrate_shard(name, paths: paths, version: version)
42
+ private
43
+
44
+ def rollback_schema(connection, schema_name, steps)
45
+ with_pool(connection, schema_name) do |pool|
46
+ pool.migration_context.rollback(steps)
93
47
  end
94
48
  end
95
49
 
96
- # Rolls back +steps+ migrations connected to +shard_name+.
97
- #
98
- # @param shard_name [Symbol]
99
- # @param steps [Integer]
100
- def rollback_shard(shard_name, steps: 1, paths: nil)
101
- ShardManager.with_shard(shard_name) do
102
- build_context(paths).rollback(steps)
50
+ def migrate_schema(pool, schema_name)
51
+ with_pool(connection, schema_name) do |pool|
52
+ pool.migration_context.migrate
103
53
  end
104
54
  end
105
55
 
106
- private
107
-
108
- def run_migrations(connection, paths: nil, version: nil)
109
- Ec::Pg.dprint("migrations_path: #{paths}")
110
-
56
+ def with_pool(connection, schema_name)
111
57
  ActiveRecord::Base.establish_connection(connection.pool.db_config)
112
- connection.pool.migration_context.migrate
113
- end
114
-
115
- def default_shards
116
- n = Ec::Pg.configuration.number_of_shards
117
- (1..n).map { |i| :"shard_#{i}" }
58
+ connection.schema_search_path = schema_name
59
+ yield(connection.pool)
118
60
  end
119
61
  end
120
62
  end
data/lib/ec/pg/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Ec
4
4
  module Pg
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.5"
6
6
  end
7
7
  end
@@ -4,9 +4,9 @@ namespace :ec_pg do
4
4
  # ---------------------------------------------------------------------------
5
5
  # Migrations
6
6
  # ---------------------------------------------------------------------------
7
- namespace :migrate do
7
+ namespace :schemas do
8
8
  task preload_models: :environment do
9
- if ENV['CPG_DEBUG']
9
+ if ENV['ECPG_DEBUG']
10
10
  ActiveRecord::Base.logger = Logger.new(STDOUT)
11
11
  end
12
12
 
@@ -15,46 +15,15 @@ namespace :ec_pg do
15
15
  end
16
16
  end
17
17
 
18
- desc "Migrate a single schema. Usage: rake 'ec_pg:migrate:schema[name]'"
19
- task :schema, [:name] => :environment do |_, args|
20
- name = args[:name] or abort "Usage: rake 'ec_pg:migrate:schema[schema_name]'"
21
- Ec::Pg::Migrator.migrate_schema(name)
22
- puts "Schema '#{name}' migrated."
23
- end
24
-
25
- desc "Migrate comma-separated schemas. Usage: rake 'ec_pg:migrate:schemas[tenant_a,tenant_b]'"
26
- task :schemas => :preload_models do
18
+ desc "Migrate all schemas including public."
19
+ task :migrate => :preload_models do
27
20
  Ec::Pg::Migrator.migrate_all_schemas
28
21
  end
29
22
 
30
- desc "Roll back a schema. Usage: rake 'ec_pg:migrate:rollback_schema[name]' or '[name,2]'"
31
- task :rollback_schema, [:name, :steps] => :environment do |_, args|
32
- name = args[:name] or abort "Usage: rake 'ec_pg:migrate:rollback_schema[name]'"
33
- steps = args[:steps]&.to_i || 1
34
- Ec::Pg::Migrator.rollback_schema(name, steps: steps)
35
- puts "Rolled back #{steps} migration(s) in schema '#{name}'."
36
- end
37
-
38
- desc "Migrate a single shard. Usage: rake 'ec_pg:migrate:shard[shard_one]'"
39
- task :shard, [:name] => :environment do |_, args|
40
- name = args[:name] or abort "Usage: rake 'ec_pg:migrate:shard[shard_name]'"
41
- Ec::Pg::Migrator.migrate_shard(name.to_sym)
42
- puts "Shard '#{name}' migrated."
43
- end
44
-
45
- desc "Migrate all shards (derived from configuration.number_of_shards, or explicit list)"
46
- task :shards, [:names] => :environment do |_, args|
47
- shards = args[:names]&.split(",")&.map { |s| s.strip.to_sym }
48
- Ec::Pg::Migrator.migrate_each_shard(shards)
49
- puts "All shards migrated."
50
- end
51
-
52
- desc "Roll back a shard. Usage: rake 'ec_pg:migrate:rollback_shard[shard_one]' or '[shard_one,2]'"
53
- task :rollback_shard, [:name, :steps] => :environment do |_, args|
54
- name = args[:name] or abort "Usage: rake 'ec_pg:migrate:rollback_shard[name]'"
55
- steps = args[:steps]&.to_i || 1
56
- Ec::Pg::Migrator.rollback_shard(name.to_sym, steps: steps)
57
- puts "Rolled back #{steps} migration(s) in shard '#{name}'."
23
+ desc "Rollback all schemas including public. Usage: rake 'ec_pg:schemas:rollback[2]"
24
+ task :rollback, [:steps] => :preload_models do |_, args|
25
+ steps = args[:steps]&.to_i || 1
26
+ Ec::Pg::Migrator.rollback_all_schemas(steps: steps)
58
27
  end
59
28
  end
60
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ec-pg
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - gmhawash