safe_migrations 1.0.1 → 1.0.2
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +2 -0
- data/lib/safe_migrations/command_recorder_extension.rb +4 -1
- data/lib/safe_migrations/migration_helper.rb +10 -0
- data/lib/safe_migrations/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 49e3b2423b50c3452294c464d3e63097ffe05d4d7ff4e64720795f0e72dc1e6e
|
|
4
|
+
data.tar.gz: 43d34ad4e0940dd00458d1945b17f45ece01a831fb53b844efa9f555d8b0f14d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c4ab23f2761b651b001a13e05627c3f6ad830d727242a13f1c5baeda0e6c91080850151fe437eff71c652991cb51c1a82ff7edc2a66eef67dc3d6cba02d56e41
|
|
7
|
+
data.tar.gz: 9b8e9aa4039ba456bb108ce9331b7343e07dac189ba6a26de45fe4e93caa4acfcafa7062d219249d07af2418e9070c07cf86dd6d7e713e0d023af5cb4b860479
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
G'day, mate! Welcome to **SafeMigrations**, a ripper of a gem that makes your Rails migrations as safe as a kangaroo in the outback. With `safe_` prefixed methods, this gem ensures your database schema changes are idempotent—no dramas if you run 'em twice. Built to play nice with Rails' `CommandRecorder`, it auto-reverses your migrations in the `change` method, so you can crack on with building your app without worrying about dodgy rollbacks.
|
|
4
4
|
|
|
5
|
+
[](https://badge.fury.io/rb/safe_migrations)
|
|
6
|
+
|
|
5
7
|
## Why SafeMigrations?
|
|
6
8
|
|
|
7
9
|
Tired of migrations chucking a wobbly when tables or columns already exist? SafeMigrations wraps Rails migration methods with `safe_` prefixes (e.g., `safe_create_table`, `safe_add_column`) to check for existing schema elements before making changes. It hooks into Rails' `CommandRecorder` for automatic reversals in `change`-based migrations, keeping your database fair dinkum.
|
|
@@ -16,6 +16,8 @@ module SafeMigrations
|
|
|
16
16
|
safe_remove_column_and_index
|
|
17
17
|
safe_change_column
|
|
18
18
|
safe_change_column_null
|
|
19
|
+
safe_add_reference
|
|
20
|
+
safe_remove_reference
|
|
19
21
|
].freeze
|
|
20
22
|
|
|
21
23
|
SAFE_REVERSIBLE_MAP = {
|
|
@@ -28,7 +30,8 @@ module SafeMigrations
|
|
|
28
30
|
safe_remove_foreign_key: :safe_add_foreign_key,
|
|
29
31
|
safe_add_column_and_index: :safe_remove_column_and_index,
|
|
30
32
|
safe_remove_column_and_index: :safe_add_column_and_index,
|
|
31
|
-
safe_change_column_null: :safe_change_column_null
|
|
33
|
+
safe_change_column_null: :safe_change_column_null,
|
|
34
|
+
safe_add_reference: :safe_remove_reference
|
|
32
35
|
}.freeze
|
|
33
36
|
|
|
34
37
|
def self.apply
|
|
@@ -67,6 +67,16 @@ module SafeMigrations
|
|
|
67
67
|
def safe_remove_foreign_key(from_table, to_table, **options)
|
|
68
68
|
table_exists?(from_table) && table_exists?(to_table) && foreign_key_exists?(from_table, to_table, **options) && remove_foreign_key(from_table, to_table, **options)
|
|
69
69
|
end
|
|
70
|
+
|
|
71
|
+
def safe_add_reference(table, ref_name, **)
|
|
72
|
+
return unless table_exists?(table)
|
|
73
|
+
|
|
74
|
+
column_exists?(table, "#{ref_name.to_s.singularize}_id") || add_reference(table, ref_name, **)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def safe_remove_reference(table, ref_name, **)
|
|
78
|
+
table_exists?(table) && column_exists?(table, "#{ref_name.to_s.singularize}_id") && remove_reference(table, ref_name, **options)
|
|
79
|
+
end
|
|
70
80
|
end
|
|
71
81
|
end
|
|
72
82
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: safe_migrations
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nikolay Moskvin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-10-
|
|
11
|
+
date: 2025-10-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|