Module: Immigrant::ForeignKeyExtensions
- Includes:
- Foreigner::SchemaDumper::ClassMethods
- Defined in:
- lib/immigrant/compat/foreigner.rb,
lib/immigrant/compat/active_record.rb,
lib/immigrant/foreign_key_extensions.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#dump_foreign_key(foreign_key) ⇒ Object
DRY alert: copied from ActiveRecord::SchemaDumper#foreign_keys.
- #foreign_key_column_for(table_name) ⇒ Object
- #hash_key ⇒ Object
- #initialize(from_table, to_table, options, *args) ⇒ Object
- #normalize_dependent(value) ⇒ Object
- #remove_prefix_and_suffix(table) ⇒ Object
- #to_ruby(action = :add) ⇒ Object
Class Method Details
.included(klass) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/immigrant/compat/foreigner.rb', line 25 def self.included(klass) # ForeignKeyExtensions already overrides initialize; override it # some more klass.send(:include, Module.new{ def initialize(from_table, to_table, ) .delete(:on_update) [:dependent] ||= normalize_dependent(.delete(:on_delete)) super end }) end |
Instance Method Details
#dump_foreign_key(foreign_key) ⇒ Object
DRY alert: copied from ActiveRecord::SchemaDumper#foreign_keys
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/immigrant/compat/active_record.rb', line 11 def dump_foreign_key(foreign_key) parts = [ "add_foreign_key #{remove_prefix_and_suffix(foreign_key.from_table).inspect}", remove_prefix_and_suffix(foreign_key.to_table).inspect, ] if foreign_key.column != foreign_key_column_for(foreign_key.to_table) parts << "column: #{foreign_key.column.inspect}" end if foreign_key.custom_primary_key? parts << "primary_key: #{foreign_key.primary_key.inspect}" end if foreign_key.name !~ /^fk_rails_[0-9a-f]{10}$/ parts << "name: #{foreign_key.name.inspect}" end parts << "on_update: #{foreign_key.on_update.inspect}" if foreign_key.on_update parts << "on_delete: #{foreign_key.on_delete.inspect}" if foreign_key.on_delete parts.join(', ') end |
#foreign_key_column_for(table_name) ⇒ Object
40 41 42 |
# File 'lib/immigrant/compat/active_record.rb', line 40 def foreign_key_column_for(table_name) "#{table_name.to_s.singularize}_id" end |
#hash_key ⇒ Object
10 11 12 |
# File 'lib/immigrant/foreign_key_extensions.rb', line 10 def hash_key [from_table, [:column]] end |
#initialize(from_table, to_table, options, *args) ⇒ Object
4 5 6 7 8 |
# File 'lib/immigrant/foreign_key_extensions.rb', line 4 def initialize(from_table, to_table, , *args) ||= {} [:name] ||= "#{from_table}_#{[:column]}_fk" super(from_table, to_table, , *args) end |
#normalize_dependent(value) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/immigrant/compat/foreigner.rb', line 37 def normalize_dependent(value) case value when :cascade then :delete else value end end |
#remove_prefix_and_suffix(table) ⇒ Object
36 37 38 |
# File 'lib/immigrant/compat/active_record.rb', line 36 def remove_prefix_and_suffix(table) table.gsub(/^(#{ActiveRecord::Base.table_name_prefix})(.+)(#{ActiveRecord::Base.table_name_suffix})$/, "\\2") end |
#to_ruby(action = :add) ⇒ Object
14 15 16 17 18 19 20 21 |
# File 'lib/immigrant/foreign_key_extensions.rb', line 14 def to_ruby(action = :add) if action == :add dump_foreign_key(self) else "remove_foreign_key #{from_table.inspect}, " \ ":name => #{[:name].inspect}" end end |