schema_plus_foreign_keys 0.1.7 → 0.1.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3c82c1e41e5b9f6ca1cfb1f5d4df97db636f573f
4
- data.tar.gz: ae9f1d6d16f4e77f36dd5b8246873b50da4d8ba8
2
+ SHA256:
3
+ metadata.gz: 237f5ea4424fd65009b719b0f147d91f0bf3ddecd81cfca4ec385b45cfbea3a4
4
+ data.tar.gz: 82818ed615ce5ded6b395a5f9cef23e77560e316fa00b88579d2791c7b7a9d19
5
5
  SHA512:
6
- metadata.gz: c88017019c8f44d10b3b833e8f19e1612f0311f5a07c0c05af87046c87e238081cfc0811af6e813a68365d523ec51c4343e7e6ebe30024cd3577c9f0aaef6e68
7
- data.tar.gz: 12e0728c42a03ba247ddd28e3885e1cfc1f3948ecbb46bb10baafb389db218952358d0762c4e79ef5ddff280457fd63ba289cd1fb81258ea8c67190a42a90a0f
6
+ metadata.gz: 5a46e7c27b80fa7877ec1c788e8566e574b724d53ad676e5ae443c79668a545e569bb0dbf9ec28fcc137e44fc64b67b455a721d0b9d76cdff8cd90e6862bd9fe
7
+ data.tar.gz: 250f274ce03d0ceea35dccc7e1c9b4cc3775a6802a2a83f64028abd3e38b59cbf17fc502c282c1923389c6ff885c284f33f77c5b99f42d5dbcdb63c79fc08483
@@ -19,6 +19,12 @@ gemfile:
19
19
  - gemfiles/activerecord-5.0/Gemfile.mysql2
20
20
  - gemfiles/activerecord-5.0/Gemfile.postgresql
21
21
  - gemfiles/activerecord-5.0/Gemfile.sqlite3
22
+ - gemfiles/activerecord-5.1/Gemfile.mysql2
23
+ - gemfiles/activerecord-5.1/Gemfile.postgresql
24
+ - gemfiles/activerecord-5.1/Gemfile.sqlite3
25
+ - gemfiles/activerecord-5.2/Gemfile.mysql2
26
+ - gemfiles/activerecord-5.2/Gemfile.postgresql
27
+ - gemfiles/activerecord-5.2/Gemfile.sqlite3
22
28
  env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis
23
29
  addons:
24
30
  postgresql: '9.4'
data/README.md CHANGED
@@ -31,41 +31,44 @@ gem.add_dependency "schema_plus_foreign_keys" # in a .gemspec
31
31
  To declare a foreign key constraint for a column, use the `:foreign_key`
32
32
  option. The same options can be used with `t.integer`, `t.references`, `t.belongs_to`, `t.foreign_key`, `change_column`, and `add_foreign_key`:
33
33
 
34
- t.integer :author_id, foreign_key: true # create a foreign_key to table "authors"
35
- t.integer :author_id, foreign_key: {} # create a foreign_key to table "authors"
36
- t.integer :author_id, foreign_key: false # don't create a constraint (this is the default)
34
+ t.references :author, foreign_key: true # create a foreign_key to table "authors"
35
+ t.references :author, foreign_key: {} # create a foreign_key to table "authors"
36
+ t.references :author, foreign_key: false # don't create a constraint (this is the default)
37
37
  t.integer :author, foreign_key: true # create a foreign_key to table "authors"
38
38
 
39
- t.integer :parent_id, foreign_key: true # special column parent_id defaults to referencing its own table
39
+ t.references :parent, foreign_key: true # special column parent_id defaults to referencing its own table
40
40
 
41
41
  Specify the target table and its primary key using the `:references` and `:primary_key`:
42
42
 
43
- t.integer :author_id, foreign_key: { references: :authors } # the default
43
+ t.references :author, foreign_key: { references: :authors } # the default
44
44
  t.integer :author, foreign_key: { references: :authors } # the default
45
- t.integer :author_id, foreign_key: { references: :people } # choose table name
46
- t.integer :author_id, foreign_key: { primary_key: :ssn] } # choose primary key
47
- t.integer :author_id, foreign_key: { references: :people, primary_key: :ssn] } # choose both
48
- t.integer :author_id, foreign_key: { references: [:people, :ssn] } # shortcut for both
49
- t.integer :author_id, foreign_key: { references: nil } # same as foreign_key: false
45
+ t.references :author, foreign_key: { references: :people } # choose table name
46
+ t.references :author, foreign_key: { primary_key: :ssn] } # choose primary key
47
+ t.references :author, foreign_key: { references: :people, primary_key: :ssn] } # choose both
48
+ t.references :author, foreign_key: { references: [:people, :ssn] } # shortcut for both
49
+ t.references :author, foreign_key: { references: nil } # same as foreign_key: false
50
50
 
51
- You can also specify other attributes:
51
+ You can also specify other attributes that are supported by Rails:
52
52
 
53
- t.integer :author_id, foreign_key: { name: "my_fk" } # override default auto-generated constraint name
54
- t.integer :author_id, foreign_key: { on_delete: :cascade }
55
- t.integer :author_id, foreign_key: { on_update: :set_null }
56
- t.integer :author_id, foreign_key: { deferrable: true }
57
- t.integer :author_id, foreign_key: { deferrable: :initially_deferred }
53
+ t.references :author, foreign_key: { name: "my_fk" } # override default auto-generated constraint name
54
+ t.references :author, foreign_key: { on_delete: :cascade }
55
+ t.references :author, foreign_key: { on_update: :set_null }
56
+
57
+ In addition, support for deferrable constraints is implemented:
58
+
59
+ t.references :author, foreign_key: { deferrable: true }
60
+ t.references :author, foreign_key: { deferrable: :initially_deferred }
58
61
 
59
62
  Of course the options can be combined:
60
63
 
61
- t.integer :author_id, foreign_key: { references: :people, primary_key: :ssn, name: "my_fk", on_delet: :no_action }
64
+ t.references :author, foreign_key: { references: :people, primary_key: :ssn, name: "my_fk", on_delet: :no_action }
62
65
 
63
66
 
64
67
  As a shorthand, all options except `:name` can be specified without placing
65
68
  them in a `foreign_key` hash, e.g.
66
69
 
67
- t.integer :author_id, on_delete: :cascade # shorthand for foreign_key: { on_delete: :cascade }
68
- t.integer :author_id, references: :people # shorthand for foreign_key: { references: :people }
70
+ t.references :author, on_delete: :cascade # shorthand for foreign_key: { on_delete: :cascade }
71
+ t.references :author, references: :people # shorthand for foreign_key: { references: :people }
69
72
 
70
73
  To remove a foreign key constraint, you can either change the column, specifying `foreign_key: false`, or use `migration.remove_foreign_key(table, column)`
71
74
 
@@ -145,11 +148,14 @@ SchemaPlus::ForeignKeys is tested on:
145
148
  * ruby **2.3.1** with activerecord **4.2.1**, using **mysql2**, **sqlite3** or **postgresql**
146
149
  * ruby **2.3.1** with activerecord **4.2.6**, using **mysql2**, **sqlite3** or **postgresql**
147
150
  * ruby **2.3.1** with activerecord **5.0**, using **mysql2**, **sqlite3** or **postgresql**
151
+ * ruby **2.3.1** with activerecord **5.1**, using **mysql2**, **sqlite3** or **postgresql**
152
+ * ruby **2.3.1** with activerecord **5.2**, using **mysql2**, **sqlite3** or **postgresql**
148
153
 
149
154
  <!-- SCHEMA_DEV: MATRIX - end -->
150
155
 
151
156
  ## History
152
157
 
158
+ * 0.1.8 - Compatibility with ActiveRecord 5.1 and ActiveRecord 5.2.
153
159
  * 0.1.7 - Compatibility with ActiveRecord 5.0.
154
160
  * 0.1.6 - Missing require
155
161
  * 0.1.5 - Explicit gem dependencies
@@ -2,9 +2,9 @@ require "pathname"
2
2
  eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
3
 
4
4
  platform :ruby do
5
- gem "pg"
5
+ gem "pg", "< 1"
6
6
  end
7
7
 
8
8
  platform :jruby do
9
9
  gem 'activerecord-jdbcpostgresql-adapter'
10
- end
10
+ end
@@ -2,9 +2,9 @@ require "pathname"
2
2
  eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
3
 
4
4
  platform :ruby do
5
- gem "pg"
5
+ gem "pg", "< 1"
6
6
  end
7
7
 
8
8
  platform :jruby do
9
9
  gem 'activerecord-jdbcpostgresql-adapter'
10
- end
10
+ end
@@ -2,9 +2,9 @@ require "pathname"
2
2
  eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
3
 
4
4
  platform :ruby do
5
- gem "pg"
5
+ gem "pg", "< 1"
6
6
  end
7
7
 
8
8
  platform :jruby do
9
9
  gem 'activerecord-jdbcpostgresql-adapter'
10
- end
10
+ end
@@ -1,3 +1,3 @@
1
1
  eval File.read File.expand_path('../../Gemfile.base', __FILE__)
2
2
 
3
- gem "activerecord", "~> 5.0.0"
3
+ gem "activerecord", "~> 5.0.1"
@@ -2,9 +2,9 @@ require "pathname"
2
2
  eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
3
 
4
4
  platform :ruby do
5
- gem "pg"
5
+ gem "pg", "< 1"
6
6
  end
7
7
 
8
8
  platform :jruby do
9
9
  gem 'activerecord-jdbcpostgresql-adapter'
10
- end
10
+ end
@@ -0,0 +1,3 @@
1
+ eval File.read File.expand_path('../../Gemfile.base', __FILE__)
2
+
3
+ gem "activerecord", "~> 5.1.0"
@@ -0,0 +1,10 @@
1
+ require "pathname"
2
+ eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
+
4
+ platform :ruby do
5
+ gem "mysql2"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcmysql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ require "pathname"
2
+ eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
+
4
+ platform :ruby do
5
+ gem "pg", "< 1"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcpostgresql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ require "pathname"
2
+ eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
+
4
+ platform :ruby do
5
+ gem "sqlite3"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2'
10
+ end
@@ -0,0 +1,3 @@
1
+ eval File.read File.expand_path('../../Gemfile.base', __FILE__)
2
+
3
+ gem "activerecord", ">= 5.2.0.beta0", "< 5.3"
@@ -0,0 +1,10 @@
1
+ require "pathname"
2
+ eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
+
4
+ platform :ruby do
5
+ gem "mysql2"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcmysql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ require "pathname"
2
+ eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
+
4
+ platform :ruby do
5
+ gem "pg"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcpostgresql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ require "pathname"
2
+ eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)
3
+
4
+ platform :ruby do
5
+ gem "sqlite3"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2'
10
+ end
@@ -34,17 +34,17 @@ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
34
34
  # SchemaPlus::ForeignKeys also supports creation of foreign key constraints analogously, using Migration::ClassMethods#add_foreign_key or TableDefinition#foreign_key or as part of the column definition, for example:
35
35
  #
36
36
  # create_table :posts do |t| # not DRY
37
- # t.integer :author_id
37
+ # t.references :author
38
38
  # end
39
39
  # add_foreign_key :posts, :author_id, :references => :authors
40
40
  #
41
41
  # create_table :posts do |t| # DRYer
42
- # t.integer :author_id
42
+ # t.references :author
43
43
  # t.foreign_key :author_id, :references => :authors
44
44
  # end
45
45
  #
46
46
  # create_table :posts do |t| # Dryest
47
- # t.integer :author_id, :foreign_key => true
47
+ # t.references :author, :foreign_key => true
48
48
  # end
49
49
  #
50
50
  # <b>NOTE:</b> In the standard configuration, SchemaPlus::ForeignKeys automatically
@@ -60,7 +60,7 @@ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
60
60
  # basis by passing Config options to Migration::ClassMethods#create_table, such as
61
61
  #
62
62
  # create_table :students, :foreign_keys => {:auto_create => false} do
63
- # t.integer :student_id
63
+ # t.references :student
64
64
  # end
65
65
  #
66
66
  module TableDefinition
@@ -2,7 +2,7 @@ module SchemaPlus::ForeignKeys
2
2
  module Middleware
3
3
  module Sql
4
4
  module Table
5
- if Gem::Requirement.new('< 5.0.0.alpha.1').satisfied_by?(::ActiveRecord.version)
5
+ if Gem::Requirement.new('< 5.0').satisfied_by?(::ActiveRecord.version)
6
6
  def after(env)
7
7
  foreign_keys = if env.table_definition.foreign_keys.is_a? Array
8
8
  env.table_definition.foreign_keys
@@ -1,5 +1,5 @@
1
1
  module SchemaPlus
2
2
  module ForeignKeys
3
- VERSION = "0.1.7"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
@@ -5,6 +5,8 @@ activerecord:
5
5
  - 4.2.1
6
6
  - 4.2.6
7
7
  - 5.0
8
+ - 5.1
9
+ - 5.2
8
10
  db:
9
11
  - mysql2
10
12
  - sqlite3
@@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
18
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
19
  gem.require_paths = ["lib"]
20
20
 
21
- gem.add_dependency "activerecord", ">= 4.2", "< 5.1"
21
+ gem.add_dependency "activerecord", ">= 4.2", "< 5.3"
22
22
  gem.add_dependency "schema_plus_core"
23
23
  gem.add_dependency "schema_plus_compatibility", "~> 0.2"
24
24
  gem.add_dependency "valuable"
@@ -9,7 +9,7 @@ describe 'Deprecations' do
9
9
  define_schema do
10
10
  create_table :posts
11
11
  create_table :comments do |t|
12
- t.integer :post_id
12
+ t.references :post
13
13
  end
14
14
  end
15
15
  class Comment < ::ActiveRecord::Base ; end
@@ -28,7 +28,7 @@ describe 'Deprecations' do
28
28
  define_schema do
29
29
  create_table :posts
30
30
  create_table :comments do |t|
31
- t.integer :post_id, foreign_key: true
31
+ t.references :post, foreign_key: true
32
32
  end
33
33
  end
34
34
  class Comment < ::ActiveRecord::Base ; end
@@ -89,7 +89,7 @@ describe 'Deprecations' do
89
89
  define_schema do
90
90
  create_table :posts
91
91
  create_table :comments do |t|
92
- t.integer :post_id, foreign_key: true
92
+ t.references :post, foreign_key: true
93
93
  end
94
94
  end
95
95
  class Comment < ::ActiveRecord::Base ; end
@@ -126,7 +126,7 @@ describe 'Deprecations' do
126
126
  define_schema do
127
127
  create_table :posts
128
128
  create_table :comments do |t|
129
- t.integer :post_id, references: :posts, on_delete: :set_null
129
+ t.references :post, references: :posts, on_delete: :set_null
130
130
  end
131
131
  end
132
132
  expect(definition.on_delete).to eq(:nullify)
@@ -141,7 +141,7 @@ describe 'Deprecations' do
141
141
  define_schema do
142
142
  create_table :posts, primary_key: :funky
143
143
  create_table :comments do |t|
144
- t.integer :post_id
144
+ t.references :post
145
145
  t.foreign_key :post_id, :posts, :funky
146
146
  end
147
147
  end
@@ -153,7 +153,7 @@ describe 'Deprecations' do
153
153
  define_schema do
154
154
  create_table :posts, primary_key: :funky
155
155
  create_table :comments do |t|
156
- t.integer :post_id
156
+ t.references :post
157
157
  t.foreign_key :post_id, :posts, :funky, :town
158
158
  end
159
159
  end
@@ -11,7 +11,7 @@ describe "Foreign Key" do
11
11
  t.string :login
12
12
  end
13
13
  create_table :comments, :force => true do |t|
14
- t.integer :user_id
14
+ t.references :user
15
15
  t.foreign_key :user_id, :users
16
16
  end
17
17
  end
@@ -41,13 +41,13 @@ describe "Foreign Key" do
41
41
 
42
42
  create_table :posts, :force => true do |t|
43
43
  t.text :body
44
- t.integer :user_id
45
- t.integer :author_id
44
+ t.references :user
45
+ t.references :author
46
46
  end
47
47
 
48
48
  create_table :comments, :force => true do |t|
49
49
  t.text :body
50
- t.integer :post_id
50
+ t.references :post
51
51
  t.foreign_key :post_id, :posts
52
52
  end
53
53
  end
@@ -150,7 +150,7 @@ describe "Foreign Key" do
150
150
  before(:each) do
151
151
  migration.suppress_messages do
152
152
  migration.create_table :references, :force => true do |t|
153
- t.integer :post_id, :foreign_key => false
153
+ t.references :post, :foreign_key => false
154
154
  end
155
155
  end
156
156
  end
@@ -2,6 +2,9 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe ActiveRecord::Migration do
5
+ let(:column_type) {
6
+ Gem::Requirement.new('< 5.1').satisfied_by?(::ActiveRecord.version) ? :integer : :bigint
7
+ }
5
8
 
6
9
  before(:each) do
7
10
  define_schema do
@@ -17,7 +20,7 @@ describe ActiveRecord::Migration do
17
20
  create_table :comments, :force => true do |t|
18
21
  t.string :content
19
22
  t.integer :user
20
- t.integer :user_id
23
+ t.references :user
21
24
  t.foreign_key :user_id, :users, :primary_key => :id
22
25
  end
23
26
 
@@ -40,21 +43,21 @@ describe ActiveRecord::Migration do
40
43
  sql = []
41
44
  allow(@model.connection).to receive(:execute) { |str| sql << str }
42
45
  recreate_table(@model) do |t|
43
- t.integer :user, :foreign_key => true
46
+ t.send column_type, :user, :foreign_key => true
44
47
  end
45
48
  expect(sql.join('; ')).to match(/PRAGMA FOREIGN_KEYS = ON.*CREATE TABLE "posts"/)
46
49
  end
47
50
 
48
51
  it "should create foreign key with default reference" do
49
52
  recreate_table(@model) do |t|
50
- t.integer :user, :foreign_key => true
53
+ t.send column_type, :user, :foreign_key => true
51
54
  end
52
55
  expect(@model).to reference(:users, :id).on(:user)
53
56
  end
54
57
 
55
58
  it "should create foreign key with default column" do
56
59
  recreate_table(@model) do |t|
57
- t.integer :user_id
60
+ t.references :user
58
61
  t.foreign_key :users
59
62
  end
60
63
  expect(@model).to reference(:users, :id).on(:user_id)
@@ -62,7 +65,7 @@ describe ActiveRecord::Migration do
62
65
 
63
66
  it "should create foreign key with different reference" do
64
67
  recreate_table(@model) do |t|
65
- t.integer :author_id, :foreign_key => { :references => :users }
68
+ t.references :author, :foreign_key => { :references => :users }
66
69
  end
67
70
  expect(@model).to reference(:users, :id).on(:author_id)
68
71
  end
@@ -71,7 +74,7 @@ describe ActiveRecord::Migration do
71
74
  hash = { :references => :users }
72
75
  hash_original = hash.dup
73
76
  recreate_table(@model) do |t|
74
- t.integer :author_id, :foreign_key => hash
77
+ t.references :author, :foreign_key => hash
75
78
  end
76
79
  expect(hash).to eq(hash_original)
77
80
  end
@@ -87,40 +90,40 @@ describe ActiveRecord::Migration do
87
90
 
88
91
  it "should create foreign key with different reference using shortcut" do
89
92
  recreate_table(@model) do |t|
90
- t.integer :author_id, :references => :users
93
+ t.references :author, :references => :users
91
94
  end
92
95
  expect(@model).to reference(:users, :id).on(:author_id)
93
96
  end
94
97
 
95
98
  it "should create foreign key with default name" do
96
99
  recreate_table @model do |t|
97
- t.integer :user_id, :foreign_key => true
100
+ t.references :user, :foreign_key => true
98
101
  end
99
102
  expect(@model).to reference(:users, :id).with_name("fk_#{@model.table_name}_user_id")
100
103
  end
101
104
 
102
105
  it "should create foreign key with specified name" do
103
106
  recreate_table @model do |t|
104
- t.integer :user_id, :foreign_key => { :name => "wugga" }
107
+ t.references :user, :foreign_key => { :name => "wugga" }
105
108
  end
106
109
  expect(@model).to reference(:users, :id).with_name("wugga")
107
110
  end
108
111
 
109
112
  it "handles very long names" do
110
113
  table = ("ta"*15)
111
- column = ("co"*15 + "_id")
114
+ column = ("co"*15)
112
115
  expect {
113
116
  ActiveRecord::Migration.create_table table do |t|
114
- t.integer column, references: :members
117
+ t.references column, references: :members, index: false
115
118
  end
116
119
  }.not_to raise_error
117
- expect(ActiveRecord::Base.connection.foreign_keys(table).first.column).to eq(column)
120
+ expect(ActiveRecord::Base.connection.foreign_keys(table).first.column).to eq(column + "_id")
118
121
  end
119
122
 
120
123
  it "should allow multiple foreign keys to be made" do
121
124
  recreate_table(@model) do |t|
122
- t.integer :user_id, :references => :users
123
- t.integer :updater_id, :references => :users
125
+ t.references :user, :references => :users
126
+ t.references :updater, :references => :users
124
127
  end
125
128
  expect(@model).to reference(:users, :id).on(:user_id)
126
129
  expect(@model).to reference(:users, :id).on(:updater_id)
@@ -128,14 +131,14 @@ describe ActiveRecord::Migration do
128
131
 
129
132
  it "should suppress foreign key" do
130
133
  recreate_table(@model) do |t|
131
- t.integer :member_id, :foreign_key => false
134
+ t.references :member, :foreign_key => false
132
135
  end
133
136
  expect(@model).not_to reference.on(:member_id)
134
137
  end
135
138
 
136
139
  it "should suppress foreign key using shortcut" do
137
140
  recreate_table(@model) do |t|
138
- t.integer :member_id, :references => nil
141
+ t.references :member, :references => nil
139
142
  end
140
143
  expect(@model).not_to reference.on(:member_id)
141
144
  end
@@ -177,7 +180,7 @@ describe ActiveRecord::Migration do
177
180
 
178
181
  it "should create foreign key to the same table on parent_id" do
179
182
  recreate_table(@model) do |t|
180
- t.integer :parent_id, foreign_key: true
183
+ t.references :parent, foreign_key: true
181
184
  end
182
185
  expect(@model).to reference(@model.table_name, :id).on(:parent_id)
183
186
  end
@@ -195,14 +198,14 @@ describe ActiveRecord::Migration do
195
198
 
196
199
  it "should create and detect on_update #{action.inspect}", if_action_supported do
197
200
  recreate_table @model do |t|
198
- t.integer :user_id, :foreign_key => { :on_update => action }
201
+ t.references :user, :foreign_key => { :on_update => action }
199
202
  end
200
203
  expect(@model).to reference.on(:user_id).on_update(action)
201
204
  end
202
205
 
203
206
  it "should create and detect on_update #{action.inspect} using shortcut", if_action_supported do
204
207
  recreate_table @model do |t|
205
- t.integer :user_id, :on_update => action
208
+ t.references :user, :on_update => action
206
209
  end
207
210
  expect(@model).to reference.on(:user_id).on_update(action)
208
211
  end
@@ -210,21 +213,21 @@ describe ActiveRecord::Migration do
210
213
  it "should raise a not-implemented error for on_update => #{action}", if_action_unsupported do
211
214
  expect {
212
215
  recreate_table @model do |t|
213
- t.integer :user_id, :foreign_key => { :on_update => action }
216
+ t.references :user, :foreign_key => { :on_update => action }
214
217
  end
215
218
  }.to raise_error(NotImplementedError)
216
219
  end
217
220
 
218
221
  it "should create and detect on_delete #{action.inspect}", if_action_supported do
219
222
  recreate_table @model do |t|
220
- t.integer :user_id, :foreign_key => { :on_delete => action }
223
+ t.references :user, :foreign_key => { :on_delete => action }
221
224
  end
222
225
  expect(@model).to reference.on(:user_id).on_delete(action)
223
226
  end
224
227
 
225
228
  it "should create and detect on_delete #{action.inspect} using shortcut", if_action_supported do
226
229
  recreate_table @model do |t|
227
- t.integer :user_id, :on_delete => action
230
+ t.references :user, :on_delete => action
228
231
  end
229
232
  expect(@model).to reference.on(:user_id).on_delete(action)
230
233
  end
@@ -232,7 +235,7 @@ describe ActiveRecord::Migration do
232
235
  it "should raise a not-implemented error for on_delete => #{action}", if_action_unsupported do
233
236
  expect {
234
237
  recreate_table @model do |t|
235
- t.integer :user_id, :foreign_key => { :on_delete => action }
238
+ t.references :user, :foreign_key => { :on_delete => action }
236
239
  end
237
240
  }.to raise_error(NotImplementedError)
238
241
  end
@@ -242,7 +245,7 @@ describe ActiveRecord::Migration do
242
245
  [false, true, :initially_deferred].each do |status|
243
246
  it "should create and detect deferrable #{status.inspect}", :mysql => :skip do
244
247
  recreate_table @model do |t|
245
- t.integer :user_id, :on_delete => :cascade, :deferrable => status
248
+ t.references :user, :on_delete => :cascade, :deferrable => status
246
249
  end
247
250
  expect(@model).to reference.on(:user_id).deferrable(status)
248
251
  end
@@ -251,7 +254,7 @@ describe ActiveRecord::Migration do
251
254
  it "should use default on_delete action" do
252
255
  with_fk_config(:on_delete => :cascade) do
253
256
  recreate_table @model do |t|
254
- t.integer :user_id, foreign_key: true
257
+ t.references :user, foreign_key: true
255
258
  end
256
259
  expect(@model).to reference.on(:user_id).on_delete(:cascade)
257
260
  end
@@ -260,7 +263,7 @@ describe ActiveRecord::Migration do
260
263
  it "should override on_update action per table" do
261
264
  with_fk_config(:on_update => :cascade) do
262
265
  recreate_table @model, :foreign_keys => {:on_update => :restrict} do |t|
263
- t.integer :user_id, foreign_key: true
266
+ t.references :user, foreign_key: true
264
267
  end
265
268
  expect(@model).to reference.on(:user_id).on_update(:restrict)
266
269
  end
@@ -269,7 +272,7 @@ describe ActiveRecord::Migration do
269
272
  it "should override on_delete action per table" do
270
273
  with_fk_config(:on_delete => :cascade) do
271
274
  recreate_table @model, :foreign_keys => {:on_delete => :restrict} do |t|
272
- t.integer :user_id, foreign_key: true
275
+ t.references :user, foreign_key: true
273
276
  end
274
277
  expect(@model).to reference.on(:user_id).on_delete(:restrict)
275
278
  end
@@ -278,7 +281,7 @@ describe ActiveRecord::Migration do
278
281
  it "should override on_update action per column" do
279
282
  with_fk_config(:on_update => :cascade) do
280
283
  recreate_table @model, :foreign_keys => {:on_update => :restrict} do |t|
281
- t.integer :user_id, :foreign_key => { :on_update => :nullify }
284
+ t.references :user, :foreign_key => { :on_update => :nullify }
282
285
  end
283
286
  expect(@model).to reference.on(:user_id).on_update(:nullify)
284
287
  end
@@ -287,7 +290,7 @@ describe ActiveRecord::Migration do
287
290
  it "should override on_delete action per column" do
288
291
  with_fk_config(:on_delete => :cascade) do
289
292
  recreate_table @model, :foreign_keys => {:on_delete => :restrict} do |t|
290
- t.integer :user_id, :foreign_key => { :on_delete => :nullify }
293
+ t.references :user, :foreign_key => { :on_delete => :nullify }
291
294
  end
292
295
  expect(@model).to reference.on(:user_id).on_delete(:nullify)
293
296
  end
@@ -296,7 +299,7 @@ describe ActiveRecord::Migration do
296
299
  it "should raise an error for an invalid on_update action" do
297
300
  expect {
298
301
  recreate_table @model do |t|
299
- t.integer :user_id, :foreign_key => { :on_update => :invalid }
302
+ t.references :user, :foreign_key => { :on_update => :invalid }
300
303
  end
301
304
  }.to raise_error(ArgumentError)
302
305
  end
@@ -304,7 +307,7 @@ describe ActiveRecord::Migration do
304
307
  it "should raise an error for an invalid on_delete action" do
305
308
  expect {
306
309
  recreate_table @model do |t|
307
- t.integer :user_id, :foreign_key => { :on_delete => :invalid }
310
+ t.references :user, :foreign_key => { :on_delete => :invalid }
308
311
  end
309
312
  }.to raise_error(ArgumentError)
310
313
  end
@@ -315,12 +318,15 @@ describe ActiveRecord::Migration do
315
318
  before(:each) do
316
319
  @model = Post
317
320
  end
318
- [false, true].each do |bulk|
321
+ # Disabling bulk tests on mysql since the mysql adapter does not implement it for add_foreign_key in rails 5.1+
322
+ bulk_tests = RSpec.configuration.exclusion_filter[:mysql] == :skip ? [false] : [true, false]
323
+
324
+ bulk_tests.each do |bulk|
319
325
  suffix = bulk ? ' with :bulk option' : ""
320
326
 
321
327
  it "should create a foreign key constraint"+suffix, :sqlite3 => :skip do
322
328
  change_table(@model, :bulk => bulk) do |t|
323
- t.integer :user_id, foreign_key: true
329
+ t.references :user, foreign_key: true
324
330
  end
325
331
  expect(@model).to reference(:users, :id).on(:user_id)
326
332
  end
@@ -332,7 +338,7 @@ describe ActiveRecord::Migration do
332
338
  migration = Class.new ::ActiveRecord::Migration.latest_version do
333
339
  define_method(:change) {
334
340
  change_table("comments", :bulk => bulk) do |t|
335
- t.integer :user_id, foreign_key: true
341
+ t.references :user, foreign_key: true
336
342
  end
337
343
  }
338
344
  end
@@ -346,7 +352,7 @@ describe ActiveRecord::Migration do
346
352
 
347
353
  it "should create a foreign key constraint using :references"+suffix, :sqlite3 => :skip do
348
354
  change_table(@model, :bulk => bulk) do |t|
349
- t.references :user, foreign_key: true
355
+ t.send column_type, :user_id, foreign_key: true
350
356
  end
351
357
  expect(@model).to reference(:users, :id).on(:user_id)
352
358
  end
@@ -367,19 +373,19 @@ describe ActiveRecord::Migration do
367
373
  end
368
374
 
369
375
  it "should create foreign key" do
370
- add_column(:post_id, :integer, foreign_key: true) do
376
+ add_column(:post_id, column_type, foreign_key: true) do
371
377
  expect(@model).to reference(:posts, :id).on(:post_id)
372
378
  end
373
379
  end
374
380
 
375
381
  it "should create foreign key to explicitly given table" do
376
- add_column(:author_id, :integer, :foreign_key => { :references => :users }) do
382
+ add_column(:author_id, column_type, :foreign_key => { :references => :users }) do
377
383
  expect(@model).to reference(:users, :id).on(:author_id)
378
384
  end
379
385
  end
380
386
 
381
387
  it "should create foreign key to explicitly given table using shortcut" do
382
- add_column(:author_id, :integer, :references => :users) do
388
+ add_column(:author_id, column_type, :references => :users) do
383
389
  expect(@model).to reference(:users, :id).on(:author_id)
384
390
  end
385
391
  end
@@ -391,14 +397,14 @@ describe ActiveRecord::Migration do
391
397
  end
392
398
 
393
399
  it "should create foreign key to the same table on parent_id" do
394
- add_column(:parent_id, :integer, foreign_key: true) do
400
+ add_column(:parent_id, column_type, foreign_key: true) do
395
401
  expect(@model).to reference(@model.table_name, :id).on(:parent_id)
396
402
  end
397
403
  end
398
404
 
399
405
  it "should use default on_update action" do
400
406
  SchemaPlus::ForeignKeys.config.on_update = :cascade
401
- add_column(:post_id, :integer, foreign_key: true) do
407
+ add_column(:post_id, column_type, foreign_key: true) do
402
408
  expect(@model).to reference.on(:post_id).on_update(:cascade)
403
409
  end
404
410
  SchemaPlus::ForeignKeys.config.on_update = nil
@@ -406,7 +412,7 @@ describe ActiveRecord::Migration do
406
412
 
407
413
  it "should use default on_delete action" do
408
414
  SchemaPlus::ForeignKeys.config.on_delete = :cascade
409
- add_column(:post_id, :integer, foreign_key: true) do
415
+ add_column(:post_id, column_type, foreign_key: true) do
410
416
  expect(@model).to reference.on(:post_id).on_delete(:cascade)
411
417
  end
412
418
  SchemaPlus::ForeignKeys.config.on_delete = nil
@@ -415,14 +421,14 @@ describe ActiveRecord::Migration do
415
421
  it "should allow to overwrite default actions" do
416
422
  SchemaPlus::ForeignKeys.config.on_delete = :cascade
417
423
  SchemaPlus::ForeignKeys.config.on_update = :restrict
418
- add_column(:post_id, :integer, :foreign_key => { :on_update => :nullify, :on_delete => :nullify}) do
424
+ add_column(:post_id, column_type, :foreign_key => { :on_update => :nullify, :on_delete => :nullify}) do
419
425
  expect(@model).to reference.on(:post_id).on_delete(:nullify).on_update(:nullify)
420
426
  end
421
427
  SchemaPlus::ForeignKeys.config.on_delete = nil
422
428
  end
423
429
 
424
430
  it "should create foreign key with default name" do
425
- add_column(:post_id, :integer, foreign_key: true) do
431
+ add_column(:post_id, column_type, foreign_key: true) do
426
432
  expect(@model).to reference(:posts, :id).with_name("fk_#{@model.table_name}_post_id")
427
433
  end
428
434
  end
@@ -456,7 +462,7 @@ describe ActiveRecord::Migration do
456
462
 
457
463
  before(:each) do
458
464
  recreate_table @model do |t|
459
- t.integer :user_id, foreign_key: true
465
+ t.references :user, foreign_key: true
460
466
  end
461
467
  end
462
468
 
@@ -465,22 +471,22 @@ describe ActiveRecord::Migration do
465
471
  end
466
472
 
467
473
  it "should drop foreign key if it is no longer valid" do
468
- change_column :user_id, :integer, :foreign_key => { :references => :members }
474
+ change_column :user_id, column_type, :foreign_key => { :references => :members }
469
475
  expect(@model).not_to reference(:users)
470
476
  end
471
477
 
472
478
  it "should drop foreign key if requested to do so" do
473
- change_column :user_id, :integer, :foreign_key => { :references => nil }
479
+ change_column :user_id, column_type, :foreign_key => { :references => nil }
474
480
  expect(@model).not_to reference(:users)
475
481
  end
476
482
 
477
483
  it "should reference pointed table afterwards if new one is created" do
478
- change_column :user_id, :integer, :foreign_key => { :references => :members }
484
+ change_column :user_id, column_type, :foreign_key => { :references => :members }
479
485
  expect(@model).to reference(:members)
480
486
  end
481
487
 
482
488
  it "should maintain foreign key if it's unaffected by change" do
483
- change_column :user_id, :integer, :default => 0
489
+ change_column :user_id, column_type, :default => 0
484
490
  expect(@model).to reference(:users)
485
491
  end
486
492
 
@@ -503,7 +509,7 @@ describe ActiveRecord::Migration do
503
509
  before(:each) do
504
510
  @model = Comment
505
511
  recreate_table @model do |t|
506
- t.integer :post_id, foreign_key: true
512
+ t.references :post, foreign_key: true
507
513
  end
508
514
  end
509
515
 
@@ -529,7 +535,7 @@ describe ActiveRecord::Migration do
529
535
  before(:each) do
530
536
  @model = Comment
531
537
  recreate_table @model do |t|
532
- t.integer :user_id, foreign_key: true
538
+ t.references :user, foreign_key: true
533
539
  t.integer :xyz, :index => true
534
540
  end
535
541
  ActiveRecord::Migration.suppress_messages do
@@ -549,8 +555,8 @@ describe ActiveRecord::Migration do
549
555
  before(:each) do
550
556
  @model = Comment
551
557
  recreate_table @model do |t|
552
- t.integer :user_id
553
- t.integer :member_id
558
+ t.references :user
559
+ t.references :member
554
560
  end
555
561
  ActiveRecord::Migration.suppress_messages do
556
562
  ActiveRecord::Migration.rename_table @model.table_name, :newname
@@ -57,7 +57,7 @@ describe "with multiple schemas" do
57
57
 
58
58
  it "should not find foreign keys in other schema" do
59
59
  connection.create_table :comments, :force => true do |t|
60
- t.integer :user_id, :foreign_key => false
60
+ t.references :user, :foreign_key => false
61
61
  end
62
62
  Comment.reset_column_information
63
63
  expect(Comment.foreign_keys.length).to eq(0)
@@ -67,7 +67,7 @@ describe "with multiple schemas" do
67
67
 
68
68
  it "should find foreign keys in this schema" do
69
69
  connection.create_table :comments, :force => true do |t|
70
- t.integer :user_id, :foreign_key => true
70
+ t.references :user, :foreign_key => true
71
71
  end
72
72
  Comment.reset_column_information
73
73
  expect(Comment.foreign_keys.map(&:column).flatten).to eq(["user_id"])
@@ -85,8 +85,8 @@ describe "with multiple schemas" do
85
85
  create_table "schema_plus_test2.groups", :force => true do |t|
86
86
  end
87
87
  create_table "schema_plus_test2.members", :force => true do |t|
88
- t.integer :item_id, :foreign_key => true unless SchemaDev::Rspec::Helpers.mysql?
89
- t.integer :group_id, :foreign_key => { references: "schema_plus_test2.groups" }
88
+ t.references :item, :foreign_key => true unless SchemaDev::Rspec::Helpers.mysql?
89
+ t.references :group, :foreign_key => { references: "schema_plus_test2.groups" }
90
90
  end
91
91
  end
92
92
  class Group < ::ActiveRecord::Base
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
  require 'stringio'
3
3
 
4
4
  describe "Schema dump" do
5
+ let(:column_type) { Gem::Requirement.new('< 5.1').satisfied_by?(::ActiveRecord.version) ? :integer : :bigint }
5
6
 
6
7
  before(:each) do
7
8
  ActiveRecord::Migration.suppress_messages do
@@ -11,13 +12,13 @@ describe "Schema dump" do
11
12
  create_table :users, :force => true do |t|
12
13
  t.string :login
13
14
  t.datetime :deleted_at
14
- t.integer :first_post_id, index: { unique: true }
15
+ t.references :first_post, index: { unique: true }
15
16
  end
16
17
 
17
18
  create_table :posts, :force => true do |t|
18
19
  t.text :body
19
- t.integer :user_id
20
- t.integer :first_comment_id
20
+ t.references :user
21
+ t.references :first_comment
21
22
  t.string :string_no_default
22
23
  t.integer :short_id
23
24
  t.string :str_short
@@ -34,8 +35,8 @@ describe "Schema dump" do
34
35
 
35
36
  create_table :comments, :force => true do |t|
36
37
  t.text :body
37
- t.integer :post_id
38
- t.integer :commenter_id
38
+ t.references :post
39
+ t.references :commenter
39
40
  end
40
41
  end
41
42
  end
@@ -53,7 +54,7 @@ describe "Schema dump" do
53
54
 
54
55
  it "should include foreign_key definition" do
55
56
  with_foreign_key Post, :user_id, :users, :id do
56
- expect(dump_posts).to match(%r{t.integer\s+"user_id".*foreign_key.*users})
57
+ expect(dump_posts).to match(%r{t.(integer|bigint)\s+"user_id".*foreign_key.*users})
57
58
  end
58
59
  end
59
60
 
@@ -65,7 +66,7 @@ describe "Schema dump" do
65
66
 
66
67
  it "should respect foreign key's primary key" do
67
68
  with_foreign_key Post, :user_id, :users, :first_post_id do
68
- expect(dump_posts).to match(%r{t.integer\s+"user_id".*foreign_key.*:primary_key=>"first_post_id"})
69
+ expect(dump_posts).to match(%r{t.(integer|bigint)\s+"user_id".*foreign_key.*:primary_key=>"first_post_id"})
69
70
  end
70
71
  end
71
72
 
@@ -107,7 +108,7 @@ describe "Schema dump" do
107
108
 
108
109
  it "should include foreign_key options" do
109
110
  with_foreign_key Post, :user_id, :users, :id, :on_update => :cascade, :on_delete => :nullify do
110
- expect(dump_posts).to match(%q[t.integer\s*"user_id",.*:foreign_key=>{:references=>"users", :name=>"fk_posts_user_id", :on_update=>:cascade, :on_delete=>:nullify}])
111
+ expect(dump_posts).to match(%q[t.(integer|bigint)\s*"user_id",.*:foreign_key=>{:references=>"users", :name=>"fk_posts_user_id", :on_update=>:cascade, :on_delete=>:nullify}])
111
112
  end
112
113
  end
113
114
 
@@ -146,30 +147,30 @@ describe "Schema dump" do
146
147
  connection.tables_only.each do |table| drop_table table, force: :cascade end
147
148
 
148
149
  create_table :grade_systems, force: true do |t|
149
- t.string :name
150
- t.integer :school_id
151
- t.integer :parent_id
152
- t.integer :profile_id
150
+ t.string :name
151
+ t.references :school
152
+ t.references :parent
153
+ t.references :profile
153
154
  end
154
155
 
155
156
  create_table :schools, force: true do |t|
156
- t.string :name
157
- t.integer :default_grade_system_id
157
+ t.string :name
158
+ t.references :default_grade_system
158
159
  end
159
160
 
160
161
  create_table :academic_years, force: true do |t|
161
- t.string :name
162
- t.integer :school_id
162
+ t.string :name
163
+ t.references :school
163
164
  end
164
165
 
165
166
  create_table :buildings, force: true do |t|
166
- t.string :name
167
- t.integer :school_id
167
+ t.string :name
168
+ t.references :school
168
169
  end
169
170
 
170
171
  create_table :profiles, force: true do |t|
171
- t.integer :school_id
172
- t.integer :building_id
172
+ t.references :school
173
+ t.references :building
173
174
  end
174
175
 
175
176
  end
@@ -217,7 +218,7 @@ describe "Schema dump" do
217
218
  ActiveRecord::Migration.suppress_messages do
218
219
  ActiveRecord::Migration.create_table model.table_name, :force => true do |t|
219
220
  table_columns.each do |column|
220
- t.column column.name, column.type
221
+ t.column column.name, column.type, limit: column.limit
221
222
  end
222
223
  columnsets.each do |columns, referenced_table_name, referenced_columns, options|
223
224
  t.foreign_key columns, referenced_table_name, (options||{}).merge(primary_key: referenced_columns)
@@ -231,7 +232,7 @@ describe "Schema dump" do
231
232
  ActiveRecord::Migration.suppress_messages do
232
233
  ActiveRecord::Migration.create_table model.table_name, :force => true do |t|
233
234
  table_columns.each do |column|
234
- t.column column.name, column.type
235
+ t.column column.name, column.type, limit: column.limit
235
236
  end
236
237
  end
237
238
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_plus_foreign_keys
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-11 00:00:00.000000000 Z
11
+ date: 2018-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '4.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.1'
22
+ version: '5.3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '4.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.1'
32
+ version: '5.3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: schema_plus_core
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -202,6 +202,14 @@ files:
202
202
  - gemfiles/activerecord-5.0/Gemfile.mysql2
203
203
  - gemfiles/activerecord-5.0/Gemfile.postgresql
204
204
  - gemfiles/activerecord-5.0/Gemfile.sqlite3
205
+ - gemfiles/activerecord-5.1/Gemfile.base
206
+ - gemfiles/activerecord-5.1/Gemfile.mysql2
207
+ - gemfiles/activerecord-5.1/Gemfile.postgresql
208
+ - gemfiles/activerecord-5.1/Gemfile.sqlite3
209
+ - gemfiles/activerecord-5.2/Gemfile.base
210
+ - gemfiles/activerecord-5.2/Gemfile.mysql2
211
+ - gemfiles/activerecord-5.2/Gemfile.postgresql
212
+ - gemfiles/activerecord-5.2/Gemfile.sqlite3
205
213
  - lib/schema_plus/foreign_keys.rb
206
214
  - lib/schema_plus/foreign_keys/active_record/base.rb
207
215
  - lib/schema_plus/foreign_keys/active_record/connection_adapters/abstract/schema_creation.rb
@@ -249,7 +257,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
249
257
  version: '0'
250
258
  requirements: []
251
259
  rubyforge_project:
252
- rubygems_version: 2.5.1
260
+ rubygems_version: 2.7.8
253
261
  signing_key:
254
262
  specification_version: 4
255
263
  summary: Extended support for foreign key constraints in ActiveRecord