foreigner 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +9 -1
- data/lib/foreigner.rb +2 -0
- data/lib/foreigner/connection_adapters/abstract/schema_definitions.rb +2 -54
- data/lib/foreigner/connection_adapters/abstract/schema_statements.rb +9 -0
- data/lib/foreigner/connection_adapters/abstract/table.rb +59 -0
- data/lib/foreigner/connection_adapters/abstract/table_definition.rb +13 -0
- data/test/foreigner/connection_adapters/abstract/schema_statements_test.rb +5 -0
- data/test/foreigner/connection_adapters/abstract/table_definition_test.rb +13 -0
- metadata +14 -10
data/README.rdoc
CHANGED
@@ -52,7 +52,15 @@ A name can be specified for the foreign key constraint:
|
|
52
52
|
|
53
53
|
== Change Table Methods
|
54
54
|
|
55
|
-
Foreigner adds extra methods to change_table.
|
55
|
+
Foreigner adds extra methods to create_table and change_table.
|
56
|
+
|
57
|
+
Create a new table with a foreign key:
|
58
|
+
|
59
|
+
create_table :products do |t|
|
60
|
+
t.string :name
|
61
|
+
t.integer :factory_id
|
62
|
+
t.foreign_key :factories
|
63
|
+
end
|
56
64
|
|
57
65
|
Add a missing foreign key to comments:
|
58
66
|
|
data/lib/foreigner.rb
CHANGED
@@ -5,62 +5,10 @@ module Foreigner
|
|
5
5
|
base::Table.class_eval do
|
6
6
|
include Foreigner::ConnectionAdapters::Table
|
7
7
|
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
module Table
|
12
|
-
extend ActiveSupport::Concern
|
13
|
-
|
14
|
-
included do
|
15
|
-
alias_method_chain :references, :foreign_keys
|
16
|
-
end
|
17
8
|
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
# ===== Examples
|
22
|
-
# ====== Creating a simple foreign key
|
23
|
-
# t.foreign_key(:people)
|
24
|
-
# ====== Defining the column
|
25
|
-
# t.foreign_key(:people, column: :sender_id)
|
26
|
-
# ====== Creating a named foreign key
|
27
|
-
# t.foreign_key(:people, column: :sender_id, name: 'sender_foreign_key')
|
28
|
-
# ====== Defining the column of the +to_table+.
|
29
|
-
# t.foreign_key(:people, column: :sender_id, primary_key: :person_id)
|
30
|
-
def foreign_key(to_table, options = {})
|
31
|
-
@base.add_foreign_key(@table_name, to_table, options)
|
32
|
-
end
|
33
|
-
|
34
|
-
# Remove the given foreign key from the table.
|
35
|
-
#
|
36
|
-
# ===== Examples
|
37
|
-
# ====== Remove the suppliers_company_id_fk in the suppliers table.
|
38
|
-
# change_table :suppliers do |t|
|
39
|
-
# t.remove_foreign_key :companies
|
40
|
-
# end
|
41
|
-
# ====== Remove the foreign key named accounts_branch_id_fk in the accounts table.
|
42
|
-
# change_table :accounts do |t|
|
43
|
-
# t.remove_foreign_key column: :branch_id
|
44
|
-
# end
|
45
|
-
# ====== Remove the foreign key named party_foreign_key in the accounts table.
|
46
|
-
# change_table :accounts do |t|
|
47
|
-
# t.remove_index name: :party_foreign_key
|
48
|
-
# end
|
49
|
-
def remove_foreign_key(options)
|
50
|
-
@base.remove_foreign_key(@table_name, options)
|
51
|
-
end
|
52
|
-
|
53
|
-
# Deprecated
|
54
|
-
def references_with_foreign_keys(*args)
|
55
|
-
options = args.extract_options!
|
56
|
-
|
57
|
-
if fk_options = options.delete(:foreign_key)
|
58
|
-
p ActiveSupport::Deprecation.send(:deprecation_message, caller,
|
59
|
-
":foreign_key in t.references is deprecated. " \
|
60
|
-
"Use t.foreign_key instead")
|
9
|
+
base::TableDefinition.class_eval do
|
10
|
+
include Foreigner::ConnectionAdapters::TableDefinition
|
61
11
|
end
|
62
|
-
|
63
|
-
references_without_foreign_keys(*(args.dup << options))
|
64
12
|
end
|
65
13
|
end
|
66
14
|
end
|
@@ -9,6 +9,15 @@ module Foreigner
|
|
9
9
|
end
|
10
10
|
|
11
11
|
module AbstractAdapter
|
12
|
+
def create_table(table_name, *args, &block)
|
13
|
+
definition = nil
|
14
|
+
super do |td|
|
15
|
+
definition = td # This is my trick to get the definition
|
16
|
+
block.call(td)
|
17
|
+
end
|
18
|
+
definition.foreign_keys.each { |c,o| add_foreign_key table_name, c, o }
|
19
|
+
end
|
20
|
+
|
12
21
|
def supports_foreign_keys?
|
13
22
|
false
|
14
23
|
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Foreigner
|
2
|
+
module ConnectionAdapters
|
3
|
+
module Table
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
alias_method_chain :references, :foreign_keys
|
8
|
+
end
|
9
|
+
|
10
|
+
# Adds a new foreign key to the table. +to_table+ can be a single Symbol, or
|
11
|
+
# an Array of Symbols. See SchemaStatements#add_foreign_key
|
12
|
+
#
|
13
|
+
# ===== Examples
|
14
|
+
# ====== Creating a simple foreign key
|
15
|
+
# t.foreign_key(:people)
|
16
|
+
# ====== Defining the column
|
17
|
+
# t.foreign_key(:people, column: :sender_id)
|
18
|
+
# ====== Creating a named foreign key
|
19
|
+
# t.foreign_key(:people, column: :sender_id, name: 'sender_foreign_key')
|
20
|
+
# ====== Defining the column of the +to_table+.
|
21
|
+
# t.foreign_key(:people, column: :sender_id, primary_key: :person_id)
|
22
|
+
def foreign_key(to_table, options = {})
|
23
|
+
@base.add_foreign_key(@table_name, to_table, options)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Remove the given foreign key from the table.
|
27
|
+
#
|
28
|
+
# ===== Examples
|
29
|
+
# ====== Remove the suppliers_company_id_fk in the suppliers table.
|
30
|
+
# change_table :suppliers do |t|
|
31
|
+
# t.remove_foreign_key :companies
|
32
|
+
# end
|
33
|
+
# ====== Remove the foreign key named accounts_branch_id_fk in the accounts table.
|
34
|
+
# change_table :accounts do |t|
|
35
|
+
# t.remove_foreign_key column: :branch_id
|
36
|
+
# end
|
37
|
+
# ====== Remove the foreign key named party_foreign_key in the accounts table.
|
38
|
+
# change_table :accounts do |t|
|
39
|
+
# t.remove_foreign_key name: :party_foreign_key
|
40
|
+
# end
|
41
|
+
def remove_foreign_key(options)
|
42
|
+
@base.remove_foreign_key(@table_name, options)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Deprecated
|
46
|
+
def references_with_foreign_keys(*args)
|
47
|
+
options = args.extract_options!
|
48
|
+
|
49
|
+
if fk_options = options.delete(:foreign_key)
|
50
|
+
p ActiveSupport::Deprecation.send(:deprecation_message, caller,
|
51
|
+
":foreign_key in t.references is deprecated. " \
|
52
|
+
"Use t.foreign_key instead")
|
53
|
+
end
|
54
|
+
|
55
|
+
references_without_foreign_keys(*(args.dup << options))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class Foreigner::ConnectionAdapters::TableDefinitionsTest < ActiveSupport::TestCase
|
4
|
+
class TestDefinition
|
5
|
+
include Foreigner::ConnectionAdapters::TableDefinition
|
6
|
+
end
|
7
|
+
|
8
|
+
test "foreign_key" do
|
9
|
+
definition = TestDefinition.new
|
10
|
+
definition.foreign_key :poops, and: :one;
|
11
|
+
assert_equal definition.foreign_keys[:poops], and: :one
|
12
|
+
end
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreigner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,40 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
+
prerelease: false
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 3.0.0
|
22
|
+
none: false
|
22
23
|
type: :runtime
|
23
|
-
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
25
|
requirements:
|
27
26
|
- - ! '>='
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: 3.0.0
|
29
|
+
none: false
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: activerecord
|
32
|
+
prerelease: false
|
32
33
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: 3.1.0
|
38
|
+
none: false
|
38
39
|
type: :development
|
39
|
-
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
41
|
requirements:
|
43
42
|
- - ! '>='
|
44
43
|
- !ruby/object:Gem::Version
|
45
44
|
version: 3.1.0
|
45
|
+
none: false
|
46
46
|
description: Adds helpers to migrations and dumps foreign keys to schema.rb
|
47
47
|
email: developer@matthewhiggins.com
|
48
48
|
executables: []
|
@@ -57,6 +57,8 @@ files:
|
|
57
57
|
- lib/foreigner/connection_adapters/abstract/foreign_key_definition.rb
|
58
58
|
- lib/foreigner/connection_adapters/abstract/schema_definitions.rb
|
59
59
|
- lib/foreigner/connection_adapters/abstract/schema_statements.rb
|
60
|
+
- lib/foreigner/connection_adapters/abstract/table.rb
|
61
|
+
- lib/foreigner/connection_adapters/abstract/table_definition.rb
|
60
62
|
- lib/foreigner/connection_adapters/mysql2_adapter.rb
|
61
63
|
- lib/foreigner/connection_adapters/mysql_adapter.rb
|
62
64
|
- lib/foreigner/connection_adapters/noop_adapter.rb
|
@@ -68,6 +70,8 @@ files:
|
|
68
70
|
- lib/foreigner/schema_dumper.rb
|
69
71
|
- lib/foreigner.rb
|
70
72
|
- test/foreigner/adapter_test.rb
|
73
|
+
- test/foreigner/connection_adapters/abstract/schema_statements_test.rb
|
74
|
+
- test/foreigner/connection_adapters/abstract/table_definition_test.rb
|
71
75
|
- test/foreigner/connection_adapters/mysql2_adapter_test.rb
|
72
76
|
- test/foreigner/connection_adapters/mysql_adapter_test.rb
|
73
77
|
- test/foreigner/connection_adapters/postgresql_adapter_test.rb
|
@@ -82,17 +86,17 @@ rdoc_options: []
|
|
82
86
|
require_paths:
|
83
87
|
- lib
|
84
88
|
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
89
|
requirements:
|
87
90
|
- - ! '>='
|
88
91
|
- !ruby/object:Gem::Version
|
89
92
|
version: 1.8.7
|
90
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
93
|
none: false
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
95
|
requirements:
|
93
96
|
- - ! '>='
|
94
97
|
- !ruby/object:Gem::Version
|
95
98
|
version: 1.3.5
|
99
|
+
none: false
|
96
100
|
requirements: []
|
97
101
|
rubyforge_project: foreigner
|
98
102
|
rubygems_version: 1.8.24
|