dynamic_migrations 3.6.12 → 3.6.14

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79b80c950a523a7f70c930e8c86774fa64009ae689f5164de3320dc8d55e4238
4
- data.tar.gz: 649f3e0f23d676e97b8cf3c8389875ae2127701eb405c7c8947bf19de076b7f2
3
+ metadata.gz: 2a53664f8e85f6f7570b65b756687db445a71c5e48cdc7f52ab4a394570e9be5
4
+ data.tar.gz: 49cad85aaff8c311714a5e9c47c16708e8f6c3d7b6f276ce94d5b0dc8703eae6
5
5
  SHA512:
6
- metadata.gz: 94c1280b7c62a39f8337d1093731625b22049eab02b642f17a9c8d1e7f067ef90cabb1dcabda980acde0eb38639ddbd1d30c9b740d85535d0250295e032b2983
7
- data.tar.gz: '0478e668cf87739da754981dd2be1acd6a21cdfb3ef41609043c12915a455a04ccf99f31e46b3d0a5630002a59ba6b085f65381a86ed1e4d17eeaa796e70b418'
6
+ metadata.gz: 03230e628a4b6b0719d12ffeecc68ba0395c405ae828232331195a319f2bfc394a00ba80f999ba68660392dede3a76d4656b749c991ba940332901c0a93cb771
7
+ data.tar.gz: 7b169d5836f5c6a53cfab698c3f8af30c397334bea5efb1087de0f9c33c481218955b90311715a75f96c124c9bd6306887713eddd5a218cbe375bedbd6dd5f31
data/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.6.14](https://github.com/craigulliott/dynamic_migrations/compare/v3.6.13...v3.6.14) (2023-09-14)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * allowing templates to return nil and skip adding to migrations ([3d90829](https://github.com/craigulliott/dynamic_migrations/commit/3d9082960403899b4243fde60629d9c83ce1e263))
9
+
10
+ ## [3.6.13](https://github.com/craigulliott/dynamic_migrations/compare/v3.6.12...v3.6.13) (2023-09-14)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * providing foreign_schema_name to create foreign key constraint, and only providing non default arguments ([e45d499](https://github.com/craigulliott/dynamic_migrations/commit/e45d4994a9b947f0d626bdd4b0e2a36136412370))
16
+
3
17
  ## [3.6.12](https://github.com/craigulliott/dynamic_migrations/compare/v3.6.11...v3.6.12) (2023-09-13)
4
18
 
5
19
 
@@ -11,7 +11,7 @@ module DynamicMigrations
11
11
  # because rails migrations don't support composite (multiple column) foreign keys
12
12
  # column_names and foreign_column_names can be a single column name or
13
13
  # an array of column names
14
- def add_foreign_key table_name, column_names, foreign_schema_name, foreign_table_name, foreign_column_names, name:, initially_deferred: false, deferrable: false, on_delete: :no_action, on_update: :no_action, comment: nil
14
+ def add_foreign_key table_name, column_names, foreign_table_name, foreign_column_names, name:, foreign_schema: nil, initially_deferred: false, deferrable: false, on_delete: :no_action, on_update: :no_action, comment: nil
15
15
  if initially_deferred == true && deferrable == false
16
16
  raise DeferrableOptionsError, "A constraint can only be initially deferred if it is also deferrable"
17
17
  end
@@ -19,6 +19,8 @@ module DynamicMigrations
19
19
  # convert single column names into arrays, this simplifies the logic below
20
20
  column_names = column_names.is_a?(Array) ? column_names : [column_names]
21
21
  foreign_column_names = foreign_column_names.is_a?(Array) ? foreign_column_names : [foreign_column_names]
22
+ # default to the current schema
23
+ foreign_schema_name = foreign_schema.nil? ? schema_name : foreign_schema
22
24
 
23
25
  # allow it to be deferred, and defer it by default
24
26
  deferrable_sql = if initially_deferred
@@ -12,13 +12,26 @@ module DynamicMigrations
12
12
  f_c_names = foreign_key_constraint.foreign_column_names
13
13
  foreign_column_names = (f_c_names.count == 1) ? ":#{f_c_names.first}" : "[:#{f_c_names.join(", :")}]"
14
14
 
15
- options = {
16
- name: ":#{foreign_key_constraint.name}",
17
- initially_deferred: foreign_key_constraint.initially_deferred,
18
- deferrable: foreign_key_constraint.deferrable,
19
- on_delete: ":#{foreign_key_constraint.on_delete}",
20
- on_update: ":#{foreign_key_constraint.on_update}"
21
- }
15
+ options = {}
16
+ options[:name] = ":#{foreign_key_constraint.name}"
17
+
18
+ # only provide values if they are different from the defaults
19
+ unless foreign_key_constraint.initially_deferred == false
20
+ options[:initially_deferred] = foreign_key_constraint.initially_deferred
21
+ end
22
+ unless foreign_key_constraint.deferrable == false
23
+ options[:deferrable] = foreign_key_constraint.deferrable
24
+ end
25
+ unless foreign_key_constraint.on_delete == :no_action
26
+ options[:on_delete] = ":#{foreign_key_constraint.on_delete}"
27
+ end
28
+ unless foreign_key_constraint.on_update == :no_action
29
+ options[:on_update] = ":#{foreign_key_constraint.on_update}"
30
+ end
31
+ unless foreign_key_constraint.table.schema.name == foreign_key_constraint.foreign_schema_name
32
+ options[:foreign_schema] = ":#{foreign_key_constraint.foreign_schema_name}"
33
+ end
34
+
22
35
  unless foreign_key_constraint.description.nil?
23
36
  options[:comment] = <<~RUBY
24
37
  <<~COMMENT
@@ -27,6 +40,10 @@ module DynamicMigrations
27
40
  RUBY
28
41
  end
29
42
 
43
+ if foreign_key_constraint.table.schema != foreign_key_constraint.foreign_table.schema
44
+ options[:foreign_schema] = foreign_key_constraint.foreign_table.schema.name.to_s
45
+ end
46
+
30
47
  options_syntax = options.map { |k, v| "#{k}: #{v}" }.join(", ")
31
48
 
32
49
  add_fragment schema: foreign_key_constraint.table.schema,
@@ -33,13 +33,18 @@ module DynamicMigrations
33
33
 
34
34
  arguments = template_class.new(trigger, code_comment).fragment_arguments
35
35
 
36
- # we only provide a dependent function if the function has more than one trigger
37
- # or is in a different schema, otherwise it is added to the same migration as this
38
- # trigger and we don't need to worry about dependencies
39
- if trigger.function && (trigger.function.triggers.count > 1 || trigger.table.schema != trigger.function.schema)
40
- add_fragment(dependent_function: trigger.function, **arguments)
41
- else
42
- add_fragment(**arguments)
36
+ # if the template class returns nil, then we skip the creation of this migration
37
+ # this is common for triggers where the template is respinsible for setting up
38
+ # multiple triggers (a mix of on update/insert and before/after etc.)
39
+ unless arguments.nil?
40
+ # we only provide a dependent function if the function has more than one trigger
41
+ # or is in a different schema, otherwise it is added to the same migration as this
42
+ # trigger and we don't need to worry about dependencies
43
+ if trigger.function && (trigger.function.triggers.count > 1 || trigger.table.schema != trigger.function.schema)
44
+ add_fragment(dependent_function: trigger.function, **arguments)
45
+ else
46
+ add_fragment(**arguments)
47
+ end
43
48
  end
44
49
 
45
50
  # no template, process this as a default trigger (takes all options)
@@ -124,8 +129,9 @@ module DynamicMigrations
124
129
  end
125
130
 
126
131
  def recreate_trigger original_trigger, updated_trigger
132
+ fragments = []
127
133
  # remove the original trigger
128
- removal_fragment = remove_trigger original_trigger, <<~CODE_COMMENT
134
+ fragments << remove_trigger(original_trigger, <<~CODE_COMMENT)
129
135
  Removing original trigger because it has changed (it is recreated below)
130
136
  Changes:
131
137
  #{indent original_trigger.differences_descriptions(updated_trigger).join("\n")}
@@ -135,9 +141,10 @@ module DynamicMigrations
135
141
  recreation_fragment = add_trigger updated_trigger, <<~CODE_COMMENT
136
142
  Recreating this trigger
137
143
  CODE_COMMENT
144
+ fragments << recreation_fragment unless recreation_fragment.nil?
138
145
 
139
146
  # return the new fragments (the main reason to return them here is for the specs)
140
- [removal_fragment, recreation_fragment]
147
+ fragments
141
148
  end
142
149
 
143
150
  # add a comment to a trigger
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DynamicMigrations
4
- VERSION = "3.6.12"
4
+ VERSION = "3.6.14"
5
5
  end
@@ -5,7 +5,7 @@ module DynamicMigrations
5
5
  module ActiveRecord
6
6
  module Migrators
7
7
  module ForeignKeyConstraint
8
- def add_foreign_key: (Symbol table_name, Array[Symbol] column_names, Symbol foreign_schema_name, Symbol foreign_table_name, Array[Symbol] foreign_column_names, name: Symbol, ?initially_deferred: bool, ?deferrable: bool, ?on_delete: Symbol, ?on_update: Symbol, ?comment: String?) -> void
8
+ def add_foreign_key: (Symbol table_name, Array[Symbol] column_names, Symbol foreign_table_name, Array[Symbol] foreign_column_names, name: Symbol, ?foreign_schema: Symbol?, ?initially_deferred: bool, ?deferrable: bool, ?on_delete: Symbol, ?on_update: Symbol, ?comment: String?) -> void
9
9
  def remove_foreign_key: (Symbol table_name, Symbol name) -> void
10
10
  def set_foreign_key_comment: (Symbol table_name, Symbol foreign_key_name, String comment) -> void
11
11
  def remove_foreign_key_comment: (Symbol table_name, Symbol foreign_key_name) -> void
@@ -9,7 +9,7 @@ module DynamicMigrations
9
9
  def self.has_template?: (Symbol template_name) -> bool
10
10
  def self.add_template: (Symbol template_name, singleton(TriggerTemplateBase) template_class) -> void
11
11
 
12
- def add_trigger: (Server::Database::Schema::Table::Trigger trigger, ?String? code_comment) -> Fragment
12
+ def add_trigger: (Server::Database::Schema::Table::Trigger trigger, ?String? code_comment) -> Fragment?
13
13
  def remove_trigger: (Server::Database::Schema::Table::Trigger trigger, ?String? code_comment) -> Fragment
14
14
  def recreate_trigger: (Server::Database::Schema::Table::Trigger original_trigger, Server::Database::Schema::Table::Trigger updated_trigger) -> Array[Fragment]
15
15
  def set_trigger_comment: (Postgres::Server::Database::Schema::Table::Trigger trigger, ?String? code_comment) -> Fragment
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.6.12
4
+ version: 3.6.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Ulliott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-13 00:00:00.000000000 Z
11
+ date: 2023-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg