dynamic_migrations 3.1.0 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/lib/dynamic_migrations/postgres/generator/column.rb +44 -19
- data/lib/dynamic_migrations/postgres/generator/foreign_key_constraint.rb +35 -14
- data/lib/dynamic_migrations/postgres/generator/fragment.rb +37 -2
- data/lib/dynamic_migrations/postgres/generator/function.rb +50 -25
- data/lib/dynamic_migrations/postgres/generator/index.rb +34 -14
- data/lib/dynamic_migrations/postgres/generator/migration.rb +175 -0
- data/lib/dynamic_migrations/postgres/generator/migration_dependency_sorter.rb +21 -0
- data/lib/dynamic_migrations/postgres/generator/primary_key.rb +16 -6
- data/lib/dynamic_migrations/postgres/generator/schema.rb +14 -6
- data/lib/dynamic_migrations/postgres/generator/schema_migration.rb +17 -0
- data/lib/dynamic_migrations/postgres/generator/table.rb +39 -19
- data/lib/dynamic_migrations/postgres/generator/table_migration.rb +51 -0
- data/lib/dynamic_migrations/postgres/generator/trigger.rb +34 -14
- data/lib/dynamic_migrations/postgres/generator/unique_constraint.rb +34 -14
- data/lib/dynamic_migrations/postgres/generator/validation.rb +38 -18
- data/lib/dynamic_migrations/postgres/generator.rb +163 -294
- data/lib/dynamic_migrations/postgres/server/database/connection.rb +15 -0
- data/lib/dynamic_migrations/version.rb +1 -1
- data/lib/dynamic_migrations.rb +4 -2
- metadata +6 -4
- data/lib/dynamic_migrations/postgres/generator/schema_migrations/section.rb +0 -37
- data/lib/dynamic_migrations/postgres/generator/schema_migrations.rb +0 -92
@@ -7,255 +7,14 @@ module DynamicMigrations
|
|
7
7
|
class DeferrableOptionsError < StandardError
|
8
8
|
end
|
9
9
|
|
10
|
-
class UnexpectedMigrationMethodNameError < StandardError
|
11
|
-
end
|
12
|
-
|
13
10
|
class MissingDescriptionError < StandardError
|
14
11
|
end
|
15
12
|
|
16
13
|
class NoDifferenceError < StandardError
|
17
14
|
end
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
# for dependencies (i.e. columns have to be created before indexes are added and
|
22
|
-
# triggers are removed before functions are dropped)
|
23
|
-
STRUCTURE = [
|
24
|
-
{
|
25
|
-
header_comment: <<~COMMENT,
|
26
|
-
#
|
27
|
-
# Remove Functions
|
28
|
-
#
|
29
|
-
COMMENT
|
30
|
-
methods: [
|
31
|
-
:remove_function_comment,
|
32
|
-
:drop_function
|
33
|
-
]
|
34
|
-
},
|
35
|
-
{
|
36
|
-
header_comment: <<~COMMENT,
|
37
|
-
#
|
38
|
-
# Remove Triggers
|
39
|
-
#
|
40
|
-
COMMENT
|
41
|
-
methods: [
|
42
|
-
:remove_trigger_comment,
|
43
|
-
:remove_trigger
|
44
|
-
]
|
45
|
-
},
|
46
|
-
{
|
47
|
-
header_comment: <<~COMMENT,
|
48
|
-
#
|
49
|
-
# Remove Validations
|
50
|
-
#
|
51
|
-
COMMENT
|
52
|
-
methods: [
|
53
|
-
:remove_validation,
|
54
|
-
:remove_unique_constraint
|
55
|
-
]
|
56
|
-
},
|
57
|
-
{
|
58
|
-
header_comment: <<~COMMENT,
|
59
|
-
#
|
60
|
-
# Remove Foreign Keys
|
61
|
-
#
|
62
|
-
COMMENT
|
63
|
-
methods: [
|
64
|
-
:remove_foreign_key
|
65
|
-
]
|
66
|
-
},
|
67
|
-
{
|
68
|
-
header_comment: <<~COMMENT,
|
69
|
-
#
|
70
|
-
# Remove Primary Keys
|
71
|
-
#
|
72
|
-
COMMENT
|
73
|
-
methods: [
|
74
|
-
:remove_primary_key
|
75
|
-
]
|
76
|
-
},
|
77
|
-
{
|
78
|
-
header_comment: <<~COMMENT,
|
79
|
-
#
|
80
|
-
# Remove Indexes
|
81
|
-
#
|
82
|
-
COMMENT
|
83
|
-
methods: [
|
84
|
-
:remove_index,
|
85
|
-
:remove_index_comment
|
86
|
-
]
|
87
|
-
},
|
88
|
-
{
|
89
|
-
header_comment: <<~COMMENT,
|
90
|
-
#
|
91
|
-
# Remove Columns
|
92
|
-
#
|
93
|
-
COMMENT
|
94
|
-
methods: [
|
95
|
-
:remove_column
|
96
|
-
]
|
97
|
-
},
|
98
|
-
{
|
99
|
-
header_comment: <<~COMMENT,
|
100
|
-
#
|
101
|
-
# Remove Tables
|
102
|
-
#
|
103
|
-
COMMENT
|
104
|
-
break_after: true,
|
105
|
-
methods: [
|
106
|
-
:drop_table
|
107
|
-
]
|
108
|
-
},
|
109
|
-
{
|
110
|
-
# this is important enough to get it's own migration
|
111
|
-
break_before: true,
|
112
|
-
break_after: true,
|
113
|
-
header_comment: <<~COMMENT,
|
114
|
-
#
|
115
|
-
# Drop this schema
|
116
|
-
#
|
117
|
-
COMMENT
|
118
|
-
methods: [
|
119
|
-
:drop_schema
|
120
|
-
]
|
121
|
-
},
|
122
|
-
{
|
123
|
-
# this is important enough to get it's own migration
|
124
|
-
break_before: true,
|
125
|
-
break_after: true,
|
126
|
-
header_comment: <<~COMMENT,
|
127
|
-
#
|
128
|
-
# Create this schema
|
129
|
-
#
|
130
|
-
COMMENT
|
131
|
-
methods: [
|
132
|
-
:create_schema
|
133
|
-
]
|
134
|
-
},
|
135
|
-
{
|
136
|
-
header_comment: <<~COMMENT,
|
137
|
-
#
|
138
|
-
# Create Table
|
139
|
-
#
|
140
|
-
COMMENT
|
141
|
-
methods: [
|
142
|
-
:create_table
|
143
|
-
]
|
144
|
-
},
|
145
|
-
{
|
146
|
-
header_comment: <<~COMMENT,
|
147
|
-
#
|
148
|
-
# Tables
|
149
|
-
#
|
150
|
-
COMMENT
|
151
|
-
methods: [
|
152
|
-
:remove_table_comment,
|
153
|
-
:set_table_comment
|
154
|
-
]
|
155
|
-
},
|
156
|
-
{
|
157
|
-
header_comment: <<~COMMENT,
|
158
|
-
#
|
159
|
-
# Additional Columns
|
160
|
-
#
|
161
|
-
COMMENT
|
162
|
-
methods: [
|
163
|
-
:add_column
|
164
|
-
]
|
165
|
-
},
|
166
|
-
{
|
167
|
-
header_comment: <<~COMMENT,
|
168
|
-
#
|
169
|
-
# Update Columns
|
170
|
-
#
|
171
|
-
COMMENT
|
172
|
-
methods: [
|
173
|
-
:change_column,
|
174
|
-
:remove_column_comment,
|
175
|
-
:set_column_comment
|
176
|
-
]
|
177
|
-
},
|
178
|
-
{
|
179
|
-
header_comment: <<~COMMENT,
|
180
|
-
#
|
181
|
-
# Primary Key
|
182
|
-
#
|
183
|
-
COMMENT
|
184
|
-
methods: [
|
185
|
-
:add_primary_key
|
186
|
-
]
|
187
|
-
},
|
188
|
-
{
|
189
|
-
header_comment: <<~COMMENT,
|
190
|
-
#
|
191
|
-
# Indexes
|
192
|
-
#
|
193
|
-
COMMENT
|
194
|
-
methods: [
|
195
|
-
:add_index,
|
196
|
-
:set_index_comment
|
197
|
-
]
|
198
|
-
},
|
199
|
-
{
|
200
|
-
header_comment: <<~COMMENT,
|
201
|
-
#
|
202
|
-
# Foreign Keys
|
203
|
-
#
|
204
|
-
COMMENT
|
205
|
-
methods: [
|
206
|
-
:add_foreign_key,
|
207
|
-
:set_foreign_key_constraint_comment,
|
208
|
-
:remove_foreign_key_constraint_comment
|
209
|
-
]
|
210
|
-
},
|
211
|
-
{
|
212
|
-
header_comment: <<~COMMENT,
|
213
|
-
#
|
214
|
-
# Validations
|
215
|
-
#
|
216
|
-
COMMENT
|
217
|
-
methods: [
|
218
|
-
:add_validation,
|
219
|
-
:add_unique_constraint,
|
220
|
-
:set_validation_comment,
|
221
|
-
:remove_validation_comment,
|
222
|
-
:set_unique_constraint_comment,
|
223
|
-
:remove_unique_constraint_comment
|
224
|
-
]
|
225
|
-
},
|
226
|
-
{
|
227
|
-
header_comment: <<~COMMENT,
|
228
|
-
#
|
229
|
-
# Functions
|
230
|
-
#
|
231
|
-
COMMENT
|
232
|
-
methods: [
|
233
|
-
:create_function
|
234
|
-
]
|
235
|
-
},
|
236
|
-
{
|
237
|
-
header_comment: <<~COMMENT,
|
238
|
-
#
|
239
|
-
# Triggers
|
240
|
-
#
|
241
|
-
COMMENT
|
242
|
-
methods: [
|
243
|
-
:add_trigger,
|
244
|
-
:set_trigger_comment
|
245
|
-
]
|
246
|
-
},
|
247
|
-
{
|
248
|
-
header_comment: <<~COMMENT,
|
249
|
-
#
|
250
|
-
# Update Functions
|
251
|
-
#
|
252
|
-
COMMENT
|
253
|
-
methods: [
|
254
|
-
:update_function,
|
255
|
-
:set_function_comment
|
256
|
-
]
|
257
|
-
}
|
258
|
-
]
|
16
|
+
class TableMigrationNotFound < StandardError
|
17
|
+
end
|
259
18
|
|
260
19
|
include Schema
|
261
20
|
include Table
|
@@ -269,79 +28,189 @@ module DynamicMigrations
|
|
269
28
|
include Trigger
|
270
29
|
|
271
30
|
def initialize
|
272
|
-
@
|
31
|
+
@fragments = []
|
273
32
|
end
|
274
33
|
|
275
|
-
# builds
|
34
|
+
# builds the final migrations
|
276
35
|
def migrations
|
277
|
-
|
278
|
-
#
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
36
|
+
# a hash to hold the generated migrations orgnized by their schema and table
|
37
|
+
# this makes it easier and faster to work with them within this method
|
38
|
+
database_migrations = {}
|
39
|
+
|
40
|
+
# Process each fragment, and organize them into migrations. We create a shared
|
41
|
+
# Migration for each table, and a single shared migration for any schema migrations
|
42
|
+
# which do not relate to a table.
|
43
|
+
@fragments.each do |fragment|
|
44
|
+
# The first time this schema is encountered we create an object to hold the migrations
|
45
|
+
# and organize the different migrations.
|
46
|
+
schema_migrations = database_migrations[fragment.schema_name] ||= {
|
47
|
+
schema_migration: nil,
|
48
|
+
table_migrations: {},
|
49
|
+
# this array will hold any migrations which were created by splitting apart table
|
50
|
+
# migrations to resolve circular dependencies
|
51
|
+
additional_migrations: []
|
52
|
+
}
|
53
|
+
schema_name = fragment.schema_name
|
54
|
+
table_name = fragment.table_name
|
55
|
+
# If we have a table name, then add the migration fragment to a
|
56
|
+
# TableMigration which holds all of the migrations for this table
|
57
|
+
if table_name
|
58
|
+
table_migration = schema_migrations[:table_migrations][table_name] ||= TableMigration.new(schema_name, table_name)
|
59
|
+
table_migration.add_fragment fragment
|
60
|
+
|
61
|
+
# migration fragments which do not belong to a specific table are added
|
62
|
+
# to a dedicated SchemaMigration object
|
63
|
+
else
|
64
|
+
schema_migration = schema_migrations[:schema_migration] ||= SchemaMigration.new(schema_name)
|
65
|
+
schema_migration.add_fragment fragment
|
66
|
+
end
|
67
|
+
end
|
296
68
|
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
69
|
+
# Convert the hash of migrations into an array of migrations, this is
|
70
|
+
# passed to the `circular_dependency?` method below, and any new migrations
|
71
|
+
# requred to resolve circular dependencies will be added to this array
|
72
|
+
all_table_migrations = database_migrations.values.map { |m| m[:table_migrations].values }.flatten
|
73
|
+
|
74
|
+
# iterate through all of the table migrations, and fix any circular dependencies caused
|
75
|
+
# by foreign key constraints
|
76
|
+
database_migrations.each do |schema_name, schema_migrations|
|
77
|
+
# we only need to process the TableMigrations, as the SchemaMigration
|
78
|
+
# never have dependencies
|
79
|
+
schema_migrations[:table_migrations].values.each do |table_migration|
|
80
|
+
# recursively test each table migration for circular dependencies
|
81
|
+
table_migration.dependencies.each do |dependency|
|
82
|
+
if circular_dependency? table_migration.schema_name, table_migration.table_name, dependency, all_table_migrations
|
83
|
+
# remove the fragment which is causing the circular dependency
|
84
|
+
removed_fragments = table_migration.extract_fragments_with_dependency dependency[:schema_name], dependency[:table_name]
|
85
|
+
# create a new table migration for these fragments (there should only
|
86
|
+
# be one, but we treat them as an array to futiure proof this)
|
87
|
+
new_migration = TableMigration.new(schema_name, table_migration.table_name)
|
88
|
+
# place these fragments in their own migration
|
89
|
+
removed_fragments.each do |removed_fragment|
|
90
|
+
new_migration.add_fragment removed_fragment
|
303
91
|
end
|
92
|
+
# add the new migration to the list of migrations
|
93
|
+
schema_migrations[:additional_migrations] << new_migration
|
304
94
|
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
305
98
|
|
306
|
-
|
307
|
-
|
308
|
-
|
99
|
+
# Prepare a dependency sorter, this is used to sort the migrations via rubys included Tsort module
|
100
|
+
# The object used to sort the migrations is extended from a hash, and takes the form:
|
101
|
+
# {
|
102
|
+
# # every migration exists as a key, and its corresponding array is all the
|
103
|
+
# # migrations which it depends on
|
104
|
+
# migration1 => [migration2, migration3],
|
105
|
+
# migration3 => [migration2]
|
106
|
+
# }
|
107
|
+
dependency_sorter = MigrationDependencySorter.new
|
108
|
+
database_migrations.each do |schema_name, schema_migrations|
|
109
|
+
if schema_migrations[:schema_migration]
|
110
|
+
# the schema migration never has any dependencies
|
111
|
+
dependency_sorter[schema_migrations[:schema_migration]] = []
|
112
|
+
end
|
113
|
+
# add each table migration, and its dependencies
|
114
|
+
schema_migrations[:table_migrations].values.each do |table_migration|
|
115
|
+
deps = dependency_sorter[table_migration] = []
|
116
|
+
# if there is a schema migration, then it should always come first
|
117
|
+
# so make the table migration depend on it
|
118
|
+
deps << schema_migrations[:schema_migration] if schema_migrations[:schema_migration]
|
119
|
+
# if the table migration has any dependencies, then add them
|
120
|
+
table_migration.dependencies.each do |dependency|
|
121
|
+
# find the migration which matches the dependency
|
122
|
+
dependent_migration = schema_migrations[:table_migrations][dependency[:table_name]]
|
123
|
+
# if the table migration is not found, then it's safe to assume the table was created
|
124
|
+
# by an earlier set of migrations
|
125
|
+
unless dependent_migration.nil?
|
126
|
+
# add the dependent migration to the list of dependencies
|
127
|
+
deps << dependent_migration
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
# add each additional migration, and its dependencies
|
132
|
+
schema_migrations[:additional_migrations].each do |additional_migration|
|
133
|
+
deps = dependency_sorter[additional_migration] = []
|
134
|
+
# if there is a schema migration, then it should always come first
|
135
|
+
# so make the table migration depend on it
|
136
|
+
deps << schema_migrations[:schema_migration] if schema_migrations[:schema_migration]
|
137
|
+
# additional migrations are always dependent on the table migration which they came from
|
138
|
+
table_migration = schema_migrations[:table_migrations][additional_migration.table_name]
|
139
|
+
# if the table migration is not found, then it's safe to assume the table was created
|
140
|
+
# by an earlier set of migrations
|
141
|
+
unless table_migration.nil?
|
142
|
+
deps << table_migration
|
143
|
+
end
|
144
|
+
# if the additional_migration has any dependencies, then add them too
|
145
|
+
additional_migration.dependencies.each do |dependency|
|
146
|
+
# find the table migration which matches the dependency
|
147
|
+
dependent_migration = schema_migrations[:table_migrations][dependency[:table_name]]
|
148
|
+
# if the table migration is not found, then it's safe to assume the table was created
|
149
|
+
# by an earlier set of migrations
|
150
|
+
unless dependent_migration.nil?
|
151
|
+
deps << dependent_migration
|
309
152
|
end
|
310
153
|
end
|
311
|
-
schema_migrations.finalize
|
312
154
|
end
|
313
|
-
final_migrations[schema_name] = schema_migrations.to_a
|
314
155
|
end
|
315
|
-
|
156
|
+
|
157
|
+
# sort the migrations so that they are executed in the correct order
|
158
|
+
# the order is determined by their dependencies
|
159
|
+
final_migrations = dependency_sorter.tsort
|
160
|
+
|
161
|
+
# return the final migrations in the expected format
|
162
|
+
final_migrations.map do |migration|
|
163
|
+
{
|
164
|
+
schema_name: migration.schema_name,
|
165
|
+
name: migration.name,
|
166
|
+
content: migration.content
|
167
|
+
}
|
168
|
+
end
|
316
169
|
end
|
317
170
|
|
318
171
|
private
|
319
172
|
|
320
|
-
def
|
321
|
-
|
173
|
+
def circular_dependency? schema_name, table_name, dependency, all_table_migrations
|
174
|
+
# if the current dependency (schema_name and table_name) matches the original migration then we have a circular dependency
|
175
|
+
if dependency[:schema_name] == schema_name && dependency[:table_name] == table_name
|
176
|
+
true
|
177
|
+
else
|
178
|
+
# get all mirations which are for the same schema and table as the dependency
|
179
|
+
dependent_migrations = all_table_migrations.filter { |m| m.schema_name == dependency[:schema_name] && m.table_name == dependency[:table_name] }
|
180
|
+
# recursively call this method for all the dependencies for these migrations
|
181
|
+
dependent_migrations.each do |dependent_migration|
|
182
|
+
dependent_migration.dependencies.each do |next_dependency|
|
183
|
+
# if we find a dependency which matches the original schema and table name then we have a circular dependency
|
184
|
+
if circular_dependency?(schema_name, table_name, next_dependency, all_table_migrations)
|
185
|
+
return true
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
false
|
190
|
+
end
|
322
191
|
end
|
323
192
|
|
324
|
-
|
325
|
-
|
193
|
+
# tsort_each_node is used to iterate for all nodes over a graph.
|
194
|
+
def tsort_each_node(&block)
|
195
|
+
@fragments.each(&block)
|
326
196
|
end
|
327
197
|
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
unless supported_migration_method? migration_method
|
333
|
-
raise UnexpectedMigrationMethodNameError, "Expected migration_method to be a valid migrator method, got `#{migration_method}`"
|
334
|
-
end
|
198
|
+
# tsort_each_child is used to iterate for child nodes of a given node.
|
199
|
+
def tsort_each_child(node, &block)
|
200
|
+
@dep[node].each(&block)
|
201
|
+
end
|
335
202
|
|
203
|
+
def add_fragment schema:, migration_method:, object:, migration:, table: nil, code_comment: nil, dependent_table: nil
|
204
|
+
# Remove any empty lines and whitespace from the beginning or the end of the migration and then
|
205
|
+
# strip any empty lines witin the migration (remove the whitespace from them, not delete them).
|
336
206
|
final_migration = strip_empty_lines(migration).strip
|
337
|
-
fragment = Fragment.new(
|
207
|
+
fragment = Fragment.new(schema.name, table&.name, migration_method, object.name, code_comment, final_migration)
|
208
|
+
if dependent_table
|
209
|
+
fragment.set_dependent_table dependent_table.schema.name, dependent_table.name
|
210
|
+
end
|
338
211
|
|
339
|
-
#
|
340
|
-
|
341
|
-
@migrations[schema_name] ||= {}
|
342
|
-
@migrations[schema_name][table_name] ||= {}
|
343
|
-
@migrations[schema_name][table_name][migration_method] ||= []
|
344
|
-
@migrations[schema_name][table_name][migration_method] << fragment
|
212
|
+
# add this fragment to the list
|
213
|
+
@fragments << fragment
|
345
214
|
|
346
215
|
# return the newly created migration fragment
|
347
216
|
fragment
|
@@ -32,6 +32,21 @@ module DynamicMigrations
|
|
32
32
|
raise NotConnectedError
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
# Opens a connection to the database server, and yields the provided block
|
37
|
+
# before automatically closing the connection again. This is useful for
|
38
|
+
# executing one time queries against the database server.
|
39
|
+
def with_connection &block
|
40
|
+
# create a temporary connection to the server
|
41
|
+
connect
|
42
|
+
# perform work with the connection
|
43
|
+
# todo: `yield connection` would have been preferred, but rbs/steep doesnt understand that syntax
|
44
|
+
if block.is_a? Proc
|
45
|
+
block.call connection
|
46
|
+
end
|
47
|
+
# close the connection
|
48
|
+
disconnect
|
49
|
+
end
|
35
50
|
end
|
36
51
|
end
|
37
52
|
end
|
data/lib/dynamic_migrations.rb
CHANGED
@@ -69,8 +69,10 @@ require "dynamic_migrations/postgres/generator/unique_constraint"
|
|
69
69
|
require "dynamic_migrations/postgres/generator/validation"
|
70
70
|
require "dynamic_migrations/postgres/generator"
|
71
71
|
require "dynamic_migrations/postgres/generator/fragment"
|
72
|
-
require "dynamic_migrations/postgres/generator/
|
73
|
-
require "dynamic_migrations/postgres/generator/
|
72
|
+
require "dynamic_migrations/postgres/generator/migration"
|
73
|
+
require "dynamic_migrations/postgres/generator/schema_migration"
|
74
|
+
require "dynamic_migrations/postgres/generator/table_migration"
|
75
|
+
require "dynamic_migrations/postgres/generator/migration_dependency_sorter"
|
74
76
|
|
75
77
|
require "dynamic_migrations/active_record/migrators/schema"
|
76
78
|
require "dynamic_migrations/active_record/migrators/validation"
|
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.
|
4
|
+
version: 3.2.0
|
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-08-
|
11
|
+
date: 2023-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|
@@ -90,11 +90,13 @@ files:
|
|
90
90
|
- lib/dynamic_migrations/postgres/generator/fragment.rb
|
91
91
|
- lib/dynamic_migrations/postgres/generator/function.rb
|
92
92
|
- lib/dynamic_migrations/postgres/generator/index.rb
|
93
|
+
- lib/dynamic_migrations/postgres/generator/migration.rb
|
94
|
+
- lib/dynamic_migrations/postgres/generator/migration_dependency_sorter.rb
|
93
95
|
- lib/dynamic_migrations/postgres/generator/primary_key.rb
|
94
96
|
- lib/dynamic_migrations/postgres/generator/schema.rb
|
95
|
-
- lib/dynamic_migrations/postgres/generator/
|
96
|
-
- lib/dynamic_migrations/postgres/generator/schema_migrations/section.rb
|
97
|
+
- lib/dynamic_migrations/postgres/generator/schema_migration.rb
|
97
98
|
- lib/dynamic_migrations/postgres/generator/table.rb
|
99
|
+
- lib/dynamic_migrations/postgres/generator/table_migration.rb
|
98
100
|
- lib/dynamic_migrations/postgres/generator/trigger.rb
|
99
101
|
- lib/dynamic_migrations/postgres/generator/unique_constraint.rb
|
100
102
|
- lib/dynamic_migrations/postgres/generator/validation.rb
|
@@ -1,37 +0,0 @@
|
|
1
|
-
module DynamicMigrations
|
2
|
-
module Postgres
|
3
|
-
class Generator
|
4
|
-
class SchemaMigrations
|
5
|
-
class Section
|
6
|
-
attr_reader :schema_name
|
7
|
-
attr_reader :table_name
|
8
|
-
attr_reader :content_type
|
9
|
-
attr_reader :fragment
|
10
|
-
|
11
|
-
def initialize schema_name, table_name, content_type, fragment
|
12
|
-
@schema_name = schema_name
|
13
|
-
@table_name = table_name
|
14
|
-
@content_type = content_type
|
15
|
-
@fragment = fragment
|
16
|
-
end
|
17
|
-
|
18
|
-
def object_name
|
19
|
-
@fragment.object_name
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_s
|
23
|
-
@fragment.to_s
|
24
|
-
end
|
25
|
-
|
26
|
-
def is_comment?
|
27
|
-
content_type? :comment
|
28
|
-
end
|
29
|
-
|
30
|
-
def content_type? content_type
|
31
|
-
@content_type == content_type
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|