aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute_methods.rb
diff options
context:
space:
mode:
authorCaleb Thompson <caleb@calebthompson.io>2014-07-25 13:30:23 -0500
committerCaleb Thompson <caleb@calebthompson.io>2014-07-25 15:11:45 -0500
commit75f3584d9b87097377b312d35bd124686723ce4a (patch)
tree49d0da96d1ea814f548e1e53f1a2b2186475c703 /activerecord/lib/active_record/attribute_methods.rb
parent48cd7d337d7b2848e16cd38cc50f04fc04d85ff4 (diff)
downloadrails-75f3584d9b87097377b312d35bd124686723ce4a.tar.gz
rails-75f3584d9b87097377b312d35bd124686723ce4a.tar.bz2
rails-75f3584d9b87097377b312d35bd124686723ce4a.zip
Extract iterator method in AR::SchemaDumper
Gems which wish to tie into ActiveRecord::SchemaDumper need to duplicate this logic currently. [Foreigner] is one such example, as is a library I'm currently working on but which hasn't been released yet: def tables_with_foreign_keys(stream) tables_without_foreign_keys(stream) @connection.tables.sort.each do |table| next if ['schema_migrations', ignore_tables].flatten.any? do |ignored| case ignored when String; table == ignored when Regexp; table =~ ignored else raise StandardError, 'ActiveRecord::SchemaDumper.ignore_tables accepts an array of String and / or Regexp values.' end end foreign_keys(table, stream) end end [Foreigner]: https://github.com/matthuhiggins/foreigner/blob/master/lib/foreigner/schema_dumper.rb#L36-L43 Extract the skip logic to a method, making it much simpler to follow this same behavior in gems that are tying into the migration flow and let them dump only tables that aren't skipped without copying this block of code. The above code could then be simplified to: def tables_with_foreign_keys(stream) tables_without_foreign_keys(stream) @connection.tables.sort.each do |table| foreign_keys(table, stream) unless ignored?(table) end end It also, in my opinion, simplifies the logic on ActiveRecord's side, and clarifies the intent of the skip logic.
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods.rb')
0 files changed, 0 insertions, 0 deletions