@@ -15,21 +15,50 @@ class Engine < ::Rails::Engine
1515
1616 initializer "actual_db_schema.schema_dump_exclusions" do
1717 ActiveSupport . on_load ( :active_record ) do
18- table_name = ActualDbSchema ::Store ::DbAdapter ::TABLE_NAME
18+ apply_schema_dump_exclusions
19+ end
20+ end
21+
22+ def self . apply_schema_dump_exclusions
23+ table_name = ActualDbSchema ::Store ::DbAdapter ::TABLE_NAME
24+ ignore_schema_dump_table ( table_name )
25+ return unless schema_dump_flags_supported?
26+ return unless schema_dump_connection_available?
27+
28+ apply_structure_dump_flags ( table_name )
29+ end
30+
31+ class << self
32+ private
33+
34+ def ignore_schema_dump_table ( table_name )
35+ return unless defined? ( ActiveRecord ::SchemaDumper )
36+ return unless ActiveRecord ::SchemaDumper . respond_to? ( :ignore_tables )
37+
38+ ActiveRecord ::SchemaDumper . ignore_tables |= [ table_name ]
39+ end
40+
41+ def schema_dump_flags_supported?
42+ defined? ( ActiveRecord ::Tasks ::DatabaseTasks ) &&
43+ ActiveRecord ::Tasks ::DatabaseTasks . respond_to? ( :structure_dump_flags )
44+ end
1945
20- if defined? ( ActiveRecord ::SchemaDumper ) && ActiveRecord ::SchemaDumper . respond_to? ( :ignore_tables )
21- ActiveRecord ::SchemaDumper . ignore_tables |= [ table_name ]
46+ # Avoid touching db config unless we explicitly use DB storage
47+ # or a connection is already available.
48+ def schema_dump_connection_available?
49+ has_connection = begin
50+ ActiveRecord ::Base . connection_pool . connected?
51+ rescue ActiveRecord ::ConnectionNotDefined , ActiveRecord ::ConnectionNotEstablished
52+ false
2253 end
2354
24- next unless defined? ( ActiveRecord :: Tasks :: DatabaseTasks )
25- next unless ActiveRecord :: Tasks :: DatabaseTasks . respond_to? ( :structure_dump_flags )
55+ ActualDbSchema . config [ :migrations_storage ] == :db || has_connection
56+ end
2657
58+ def apply_structure_dump_flags ( table_name )
2759 flags = Array ( ActiveRecord ::Tasks ::DatabaseTasks . structure_dump_flags )
2860 adapter = ActualDbSchema . db_config [ :adapter ] . to_s
29- database = ActualDbSchema . db_config [ :database ]
30- if database . nil? && ActiveRecord ::Base . respond_to? ( :connection_db_config )
31- database = ActiveRecord ::Base . connection_db_config &.database
32- end
61+ database = database_name
3362
3463 if adapter . match? ( /postgres/i )
3564 flag = "--exclude-table=#{ table_name } *"
@@ -41,6 +70,14 @@ class Engine < ::Rails::Engine
4170
4271 ActiveRecord ::Tasks ::DatabaseTasks . structure_dump_flags = flags
4372 end
73+
74+ def database_name
75+ database = ActualDbSchema . db_config [ :database ]
76+ if database . nil? && ActiveRecord ::Base . respond_to? ( :connection_db_config )
77+ database = ActiveRecord ::Base . connection_db_config &.database
78+ end
79+ database
80+ end
4481 end
4582 end
4683end
0 commit comments