foreigner 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
 
@@ -13,6 +13,8 @@ module Foreigner
13
13
  autoload :ForeignKeyDefinition
14
14
  autoload :SchemaDefinitions
15
15
  autoload :SchemaStatements
16
+ autoload :Table
17
+ autoload :TableDefinition
16
18
  end
17
19
  end
18
20
 
@@ -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
- # Adds a new foreign key to the table. +to_table+ can be a single Symbol, or
19
- # an Array of Symbols. See SchemaStatements#add_foreign_key
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
+ module Foreigner
2
+ module ConnectionAdapters
3
+ module TableDefinition
4
+ def foreign_key(to_table, options = {})
5
+ foreign_keys[to_table] = options
6
+ end
7
+
8
+ def foreign_keys
9
+ @foreign_keys ||= {}
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ require 'helper'
2
+
3
+ class Foreigner::ConnectionAdapters::SchemaStatementsTest < ActiveSupport::TestCase
4
+
5
+ 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.2.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: 2012-08-09 00:00:00.000000000 Z
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