ridgepole 3.0.1 → 3.0.3

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: cccf60348e4baf7ac0988edb6e68bc14b0cbb945a167e4a2e6d9ef71d5e35c8a
4
- data.tar.gz: 9ff98ff1c8a823fe988129816db0bcc4dac1c9f1a5c565faa47ef8aa3852507b
3
+ metadata.gz: 5d9ad7e2017aa2af02dd9f0fb5c45cdc7fd1a4f3925778e966246589e352d5ea
4
+ data.tar.gz: b07a08f0001ed86483597794962e0293be0dc609b7c0a5fdc4425c28c10b8b49
5
5
  SHA512:
6
- metadata.gz: f0dc88f6715d8500bb4edfa106140ea7ca6cd1c207edd51cf65d12a76453ed2eb3d575ee8b73d7d96a0e386c4dec3e34ff985bf81bcc7a8026529946c3b40f74
7
- data.tar.gz: 750a855f189b49cafbc35db15d227b2b2cbf8f2a545075b46a390697f768b3b9c606d9c6403c74c3491fdc76a408944aba2a3a2f7781dd475d096b82ec6f330a
6
+ metadata.gz: 5747b6d95e0fb69c35c40508935d5474f1ed3750d09354218cfdda6a35de7b5ecbe2a45307bcdca718f2d15a1af12e9c7d95271837c1ae46e0903def31568e09
7
+ data.tar.gz: 1ca608fb67b6fcfb6b21fd2c2d4a6fd354a1f7e93333c7e183b5af01a7fbf711693ba4910a43019145d342cb311523c6b54395c5afceb5624b36fddb7a0d361d
data/.rubocop.yml CHANGED
@@ -60,3 +60,5 @@ Gemspec/DevelopmentDependencies:
60
60
  Enabled: false
61
61
  Lint/LiteralInInterpolation:
62
62
  Enabled: false
63
+ Naming/PredicateMethod:
64
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## 3.0
4
4
 
5
+ ### 3.0.3 (2025/07/23)
6
+
7
+ - Fix for index `algorithm` option [pull#555](https://github.com/ridgepole/ridgepole/pull/555)
8
+
9
+ ### 3.0.2 (2025/06/22)
10
+
11
+ - Faster table definition comparisons [pull#549](https://github.com/ridgepole/ridgepole/pull/549)
12
+
5
13
  ### 3.0.1 (2025/01/12)
6
14
 
7
15
  - Normalize `check_constraint` [pull#512](https://github.com/ridgepole/ridgepole/pull/512)
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in ridgepole.gemspec
6
6
  gemspec
7
+
8
+ gem 'mutex_m' if Gem::Version.create(RUBY_VERSION) >= Gem::Version.create('3.4.0')
@@ -271,7 +271,7 @@ create_table(#{table_name.inspect}, #{inspect_options_include_default_proc(optio
271
271
  end
272
272
  RUBY
273
273
 
274
- if !(@options[:create_table_with_index]) && !indices.empty?
274
+ if !@options[:create_table_with_index] && !indices.empty?
275
275
  append_change_table(table_name, buf) do
276
276
  indices.each do |index_name, index_attrs|
277
277
  append_add_index(table_name, index_name, index_attrs, buf)
@@ -30,8 +30,9 @@ module Ridgepole
30
30
  @logger.verbose_info("# #{table_name}")
31
31
 
32
32
  unless @options[:drop_table_only]
33
- unless (attrs_delta = diff_inspect(from_attrs, to_attrs)).empty?
34
- @logger.verbose_info(attrs_delta)
33
+ unless hash_deep_equal?(from_attrs, to_attrs)
34
+ attrs_delta = diff_inspect(from_attrs, to_attrs)
35
+ @logger.verbose_info(attrs_delta) unless attrs_delta.empty?
35
36
  end
36
37
 
37
38
  scan_change(table_name, from_attrs, to_attrs, delta)
@@ -414,7 +415,7 @@ module Ridgepole
414
415
  end
415
416
  end
416
417
 
417
- if opts[:size] && (attrs[:type] == :text || attrs[:type] == :blob || attrs[:type] == :binary)
418
+ if opts[:size] && %i[text blob binary].include?(attrs[:type])
418
419
  case opts.delete(:size)
419
420
  when :tiny
420
421
  attrs[:type] = :blob if attrs[:type] == :binary
@@ -432,6 +433,9 @@ module Ridgepole
432
433
  # XXX: MySQL only?
433
434
  opts[:using] = :btree unless opts.key?(:using)
434
435
  opts[:unique] = false unless opts.key?(:unique)
436
+
437
+ # 'algorithm: concurrently' is required for index creation but not stored in PostgreSQL DB metadata, so remove 'algorithm' to prevent diff
438
+ opts.delete(:algorithm)
435
439
  end
436
440
 
437
441
  def columns_all_include?(expected_columns, actual_columns, table_options)
@@ -732,5 +736,16 @@ module Ridgepole
732
736
  @logger.warn "[WARNING] '#{table_name}' definition is not found" unless definition.key?(table_name)
733
737
  end
734
738
  end
739
+
740
+ def hash_deep_equal?(hash1, hash2)
741
+ return false unless hash1.is_a?(Hash) && hash2.is_a?(Hash)
742
+ return false if hash1.keys.to_set != hash2.keys.to_set
743
+
744
+ hash1.each do |k, v|
745
+ return false unless hash2.key?(k) && v == hash2[k]
746
+ end
747
+
748
+ true
749
+ end
735
750
  end
736
751
  end
@@ -23,11 +23,11 @@ module Ridgepole
23
23
  end
24
24
 
25
25
  def check_orphan_index(table_name, attrs)
26
- raise "Table `#{table_name}` to create the index is not defined: #{attrs[:indices].keys.join(',')}" if attrs[:indices] && !(attrs[:definition])
26
+ raise "Table `#{table_name}` to create the index is not defined: #{attrs[:indices].keys.join(',')}" if attrs[:indices] && !attrs[:definition]
27
27
  end
28
28
 
29
29
  def check_orphan_foreign_key(table_name, attrs)
30
- raise "Table `#{table_name}` to create the foreign key is not defined: #{attrs[:foreign_keys].keys.join(',')}" if attrs[:foreign_keys] && !(attrs[:definition])
30
+ raise "Table `#{table_name}` to create the foreign key is not defined: #{attrs[:foreign_keys].keys.join(',')}" if attrs[:foreign_keys] && !attrs[:definition]
31
31
  end
32
32
 
33
33
  def check_foreign_key_without_index(table_name, attrs)
@@ -85,7 +85,7 @@ module Ridgepole
85
85
  end
86
86
 
87
87
  def target?(table_name)
88
- !(@options[:tables]) || @options[:tables].include?(table_name)
88
+ !@options[:tables] || @options[:tables].include?(table_name)
89
89
  end
90
90
 
91
91
  def dump_from(conn)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ridgepole
4
- VERSION = '3.0.1'
4
+ VERSION = '3.0.3'
5
5
  end
data/lib/ridgepole.rb CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'logger'
4
4
  require 'open3'
5
- require 'pp' # rubocop:disable Lint/RedundantRequireStatement
5
+ require 'pp'
6
6
  require 'shellwords'
7
7
  require 'singleton'
8
8
  require 'stringio'
data/ridgepole.gemspec CHANGED
@@ -13,6 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.description = 'Ridgepole is a tool to manage DB schema. It defines DB schema using Rails DSL, and updates DB schema according to DSL.'
14
14
  spec.homepage = 'https://github.com/ridgepole/ridgepole'
15
15
  spec.license = 'MIT'
16
+ spec.platform = Gem::Platform::RUBY
16
17
 
17
18
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
18
19
  `git ls-files -z`.split("\x0").reject do |f|
@@ -40,7 +41,7 @@ Gem::Specification.new do |spec|
40
41
  spec.add_development_dependency 'rspec', '>= 3.0.0'
41
42
  spec.add_development_dependency 'rspec-match_fuzzy', '>= 0.2.0'
42
43
  spec.add_development_dependency 'rspec-match_ruby', '>= 0.1.3'
43
- spec.add_development_dependency 'rubocop', '1.69.2'
44
+ spec.add_development_dependency 'rubocop', '1.78.0'
44
45
  spec.add_development_dependency 'rubocop-rake', '>= 0.5.1'
45
46
  spec.add_development_dependency 'rubocop-rspec', '>= 2.1.0'
46
47
  spec.add_development_dependency 'simplecov'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-12 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activerecord
@@ -231,14 +231,14 @@ dependencies:
231
231
  requirements:
232
232
  - - '='
233
233
  - !ruby/object:Gem::Version
234
- version: 1.69.2
234
+ version: 1.78.0
235
235
  type: :development
236
236
  prerelease: false
237
237
  version_requirements: !ruby/object:Gem::Requirement
238
238
  requirements:
239
239
  - - '='
240
240
  - !ruby/object:Gem::Version
241
- version: 1.69.2
241
+ version: 1.78.0
242
242
  - !ruby/object:Gem::Dependency
243
243
  name: rubocop-rake
244
244
  requirement: !ruby/object:Gem::Requirement
@@ -376,7 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
376
376
  - !ruby/object:Gem::Version
377
377
  version: '0'
378
378
  requirements: []
379
- rubygems_version: 3.6.2
379
+ rubygems_version: 3.6.7
380
380
  specification_version: 4
381
381
  summary: Ridgepole is a tool to manage DB schema.
382
382
  test_files: []