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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7650ddb667009ee039677b92f7bb557db0f92b9b12441ff96de8bf9c512d6bb3
4
- data.tar.gz: c3248fee222eb0a13a332aa234719f16947f93e05a5cf4250f4f8a16f066ebb9
3
+ metadata.gz: 49e3b2423b50c3452294c464d3e63097ffe05d4d7ff4e64720795f0e72dc1e6e
4
+ data.tar.gz: 43d34ad4e0940dd00458d1945b17f45ece01a831fb53b844efa9f555d8b0f14d
5
5
  SHA512:
6
- metadata.gz: 47cdc90dee9cd19aa2ae5968c596cc8a77d0b30b7123693946bed97de9ed3083c8bfd2a66166ba0ac75c0d74a82418adb5788c5d28a20796e8503669da2c9399
7
- data.tar.gz: 34f0f835de314a7311bebc89a48f413c58020d0f0ff90b4a738a26fe2e4d854816c9bb9af8029499d3f140a3c606a7b422ab0dce4f7763ae49a2101b38c97934
6
+ metadata.gz: c4ab23f2761b651b001a13e05627c3f6ad830d727242a13f1c5baeda0e6c91080850151fe437eff71c652991cb51c1a82ff7edc2a66eef67dc3d6cba02d56e41
7
+ data.tar.gz: 9b8e9aa4039ba456bb108ce9331b7343e07dac189ba6a26de45fe4e93caa4acfcafa7062d219249d07af2418e9070c07cf86dd6d7e713e0d023af5cb4b860479
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- safe_migrations (1.0.0)
5
- activerecord (>= 7.2)
4
+ safe_migrations (1.0.2)
5
+ activerecord (>= 7.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module SafeMigrations
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.0.2'.freeze
3
3
  end
@@ -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.2'
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.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-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
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '7.2'
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.2'
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: