safe_migrations 1.0.0 → 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 +2 -2
- data/README.md +2 -0
- data/lib/safe_migrations/command_recorder_extension.rb +4 -1
- data/lib/safe_migrations/migration_helper.rb +12 -2
- data/lib/safe_migrations/version.rb +1 -1
- data/safe_migrations.gemspec +2 -2
- metadata +5 -5
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
|
|
@@ -53,8 +53,8 @@ module SafeMigrations
|
|
|
53
53
|
create_table(table, **options, &block) unless table_exists?(table)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
def safe_drop_table(table)
|
|
57
|
-
drop_table(table, if_exists: true) if table_exists?(table)
|
|
56
|
+
def safe_drop_table(table, **)
|
|
57
|
+
drop_table(table, if_exists: true, **) if table_exists?(table)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
def safe_add_foreign_key(from_table, to_table, **options)
|
|
@@ -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
|
data/safe_migrations.gemspec
CHANGED
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
|
|
22
22
|
spec.metadata['homepage_uri'] = spec.homepage
|
|
23
23
|
spec.metadata['source_code_uri'] = 'https://github.com/moskvin/safe_migrations'
|
|
24
|
-
spec.metadata['changelog_uri'] = 'https://github.com/moskvin/safe_migrations/CHANGELOG.md'
|
|
24
|
+
spec.metadata['changelog_uri'] = 'https://github.com/moskvin/safe_migrations/blob/master/CHANGELOG.md'
|
|
25
25
|
else
|
|
26
26
|
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
|
27
27
|
'public gem pushes.'
|
|
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
|
38
38
|
|
|
39
39
|
spec.required_ruby_version = '>= 3.2'
|
|
40
40
|
|
|
41
|
-
spec.add_dependency 'activerecord', '>= 7.
|
|
41
|
+
spec.add_dependency 'activerecord', '>= 7.0'
|
|
42
42
|
|
|
43
43
|
spec.add_development_dependency 'bundler', '~> 2.7'
|
|
44
44
|
spec.add_development_dependency 'rake', '~> 13.0'
|
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
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '7.
|
|
19
|
+
version: '7.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '7.
|
|
26
|
+
version: '7.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: bundler
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -114,7 +114,7 @@ metadata:
|
|
|
114
114
|
allowed_push_host: https://rubygems.org
|
|
115
115
|
homepage_uri: https://github.com/moskvin/safe_migrations
|
|
116
116
|
source_code_uri: https://github.com/moskvin/safe_migrations
|
|
117
|
-
changelog_uri: https://github.com/moskvin/safe_migrations/CHANGELOG.md
|
|
117
|
+
changelog_uri: https://github.com/moskvin/safe_migrations/blob/master/CHANGELOG.md
|
|
118
118
|
post_install_message:
|
|
119
119
|
rdoc_options: []
|
|
120
120
|
require_paths:
|