-
Notifications
You must be signed in to change notification settings - Fork 123
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #97 from matthuhiggins/create_table_definition
Add support for foreign_key during create_table
- Loading branch information
Showing
7 changed files
with
103 additions
and
54 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
module Foreigner | ||
module ConnectionAdapters | ||
module Table | ||
extend ActiveSupport::Concern | ||
|
||
included do | ||
alias_method_chain :references, :foreign_keys | ||
end | ||
|
||
# Adds a new foreign key to the table. +to_table+ can be a single Symbol, or | ||
# an Array of Symbols. See SchemaStatements#add_foreign_key | ||
# | ||
# ===== Examples | ||
# ====== Creating a simple foreign key | ||
# t.foreign_key(:people) | ||
# ====== Defining the column | ||
# t.foreign_key(:people, column: :sender_id) | ||
# ====== Creating a named foreign key | ||
# t.foreign_key(:people, column: :sender_id, name: 'sender_foreign_key') | ||
# ====== Defining the column of the +to_table+. | ||
# t.foreign_key(:people, column: :sender_id, primary_key: :person_id) | ||
def foreign_key(to_table, options = {}) | ||
@base.add_foreign_key(@table_name, to_table, options) | ||
end | ||
|
||
# Remove the given foreign key from the table. | ||
# | ||
# ===== Examples | ||
# ====== Remove the suppliers_company_id_fk in the suppliers table. | ||
# change_table :suppliers do |t| | ||
# t.remove_foreign_key :companies | ||
# end | ||
# ====== Remove the foreign key named accounts_branch_id_fk in the accounts table. | ||
# change_table :accounts do |t| | ||
# t.remove_foreign_key column: :branch_id | ||
# end | ||
# ====== Remove the foreign key named party_foreign_key in the accounts table. | ||
# change_table :accounts do |t| | ||
# t.remove_foreign_key name: :party_foreign_key | ||
# end | ||
def remove_foreign_key(options) | ||
@base.remove_foreign_key(@table_name, options) | ||
end | ||
|
||
# Deprecated | ||
def references_with_foreign_keys(*args) | ||
options = args.extract_options! | ||
|
||
if fk_options = options.delete(:foreign_key) | ||
p ActiveSupport::Deprecation.send(:deprecation_message, caller, | ||
":foreign_key in t.references is deprecated. " \ | ||
"Use t.foreign_key instead") | ||
end | ||
|
||
references_without_foreign_keys(*(args.dup << options)) | ||
end | ||
end | ||
end | ||
end |
13 changes: 13 additions & 0 deletions
13
lib/foreigner/connection_adapters/abstract/table_definition.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
module Foreigner | ||
module ConnectionAdapters | ||
module TableDefinition | ||
def foreign_key(to_table, options = {}) | ||
foreign_keys[to_table] = options | ||
end | ||
|
||
def foreign_keys | ||
@foreign_keys ||= {} | ||
end | ||
end | ||
end | ||
end |
5 changes: 5 additions & 0 deletions
5
test/foreigner/connection_adapters/abstract/schema_statements_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
require 'helper' | ||
|
||
class Foreigner::ConnectionAdapters::SchemaStatementsTest < ActiveSupport::TestCase | ||
|
||
end |
13 changes: 13 additions & 0 deletions
13
test/foreigner/connection_adapters/abstract/table_definition_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
require 'helper' | ||
|
||
class Foreigner::ConnectionAdapters::TableDefinitionsTest < ActiveSupport::TestCase | ||
class TestDefinition | ||
include Foreigner::ConnectionAdapters::TableDefinition | ||
end | ||
|
||
test "foreign_key" do | ||
definition = TestDefinition.new | ||
definition.foreign_key :poops, and: :one; | ||
assert_equal definition.foreign_keys[:poops], and: :one | ||
end | ||
end |