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.
@@ -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