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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 900512ea1f780b0a9aa5f53e8bb08a627f45ebb99c3c78fbd295a69674029ea6
4
- data.tar.gz: 860191187fbe5d59b6a01eb08463a8530cd966edfb17305aef3f3d32f0fcea3c
3
+ metadata.gz: 49e3b2423b50c3452294c464d3e63097ffe05d4d7ff4e64720795f0e72dc1e6e
4
+ data.tar.gz: 43d34ad4e0940dd00458d1945b17f45ece01a831fb53b844efa9f555d8b0f14d
5
5
  SHA512:
6
- metadata.gz: f77067d7ec9ffccc39aa3a9c7ce42b605e88ba4aaf139c1d6b71e7afaf29a5191c24950ff83a4839a7f880404cd5e842beb583c0311b8b70e5d30e228207fe4d
7
- data.tar.gz: 2b5e10af96721e262636d27fdee6efb984880debf90a179d514688918ec9cfb17e7b1c404c3f0b91d7dc398fa064f6aec5827954ee6eb75f08ab0c3cc3c3a7a6
6
+ metadata.gz: c4ab23f2761b651b001a13e05627c3f6ad830d727242a13f1c5baeda0e6c91080850151fe437eff71c652991cb51c1a82ff7edc2a66eef67dc3d6cba02d56e41
7
+ data.tar.gz: 9b8e9aa4039ba456bb108ce9331b7343e07dac189ba6a26de45fe4e93caa4acfcafa7062d219249d07af2418e9070c07cf86dd6d7e713e0d023af5cb4b860479
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- safe_migrations (1.0.1)
4
+ safe_migrations (1.0.2)
5
5
  activerecord (>= 7.0)
6
6
 
7
7
  GEM
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
+ [![Gem Version](https://badge.fury.io/rb/safe_migrations.svg)](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
@@ -1,3 +1,3 @@
1
1
  module SafeMigrations
2
- VERSION = '1.0.1'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  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.1
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-24 00:00:00.000000000 Z
11
+ date: 2025-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord