Skip to content

Commit

Permalink
Merge 5945ef7 into affa91c
Browse files Browse the repository at this point in the history
  • Loading branch information
lowjoel committed Aug 21, 2017
2 parents affa91c + 5945ef7 commit ec50e51
Show file tree
Hide file tree
Showing 24 changed files with 123 additions and 198 deletions.
17 changes: 6 additions & 11 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,16 @@
---
sudo: false
rvm:
- 2.3.1
- 2.3.4
- 2.4.1
gemfile:
- gemfiles/activerecord-4.2.0/Gemfile.mysql2
- gemfiles/activerecord-4.2.0/Gemfile.postgresql
- gemfiles/activerecord-4.2.0/Gemfile.sqlite3
- gemfiles/activerecord-4.2.1/Gemfile.mysql2
- gemfiles/activerecord-4.2.1/Gemfile.postgresql
- gemfiles/activerecord-4.2.1/Gemfile.sqlite3
- gemfiles/activerecord-4.2.6/Gemfile.mysql2
- gemfiles/activerecord-4.2.6/Gemfile.postgresql
- gemfiles/activerecord-4.2.6/Gemfile.sqlite3
- gemfiles/activerecord-5.0/Gemfile.mysql2
- gemfiles/activerecord-5.0/Gemfile.postgresql
- gemfiles/activerecord-5.0/Gemfile.sqlite3
env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=travis
- gemfiles/activerecord-5.1/Gemfile.mysql2
- gemfiles/activerecord-5.1/Gemfile.postgresql
- gemfiles/activerecord-5.1/Gemfile.sqlite3
env: POSTGRESQL_DB_USER=postgres MYSQL_DB_USER=root
addons:
postgresql: '9.4'
before_script: bundle exec rake create_databases
Expand Down
13 changes: 8 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,14 @@ Specify the target table and its primary key using the `:references` and `:prima
t.integer :author_id, foreign_key: { references: [:people, :ssn] } # shortcut for both
t.integer :author_id, foreign_key: { references: nil } # same as foreign_key: false

You can also specify other attributes:
You can also specify other attributes that is supposed by Rails' `add_foreign_key`:

t.integer :author_id, foreign_key: { name: "my_fk" } # override default auto-generated constraint name
t.integer :author_id, foreign_key: { on_delete: :cascade }
t.integer :author_id, foreign_key: { on_update: :set_null }

In addition, support for deferrable constraints is implemented:

t.integer :author_id, foreign_key: { deferrable: true }
t.integer :author_id, foreign_key: { deferrable: :initially_deferred }

Expand Down Expand Up @@ -141,10 +144,10 @@ SchemaPlus::ForeignKeys is tested on:

<!-- SCHEMA_DEV: MATRIX - begin -->
<!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
* ruby **2.3.1** with activerecord **4.2.0**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.3.1** with activerecord **4.2.1**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.3.1** with activerecord **4.2.6**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.3.1** with activerecord **5.0**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.3.4** with activerecord **5.0**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.3.4** with activerecord **5.1**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.4.1** with activerecord **5.0**, using **mysql2**, **sqlite3** or **postgresql**
* ruby **2.4.1** with activerecord **5.1**, using **mysql2**, **sqlite3** or **postgresql**

<!-- SCHEMA_DEV: MATRIX - end -->

Expand Down
3 changes: 0 additions & 3 deletions gemfiles/activerecord-4.2.1/Gemfile.base

This file was deleted.

10 changes: 0 additions & 10 deletions gemfiles/activerecord-4.2.1/Gemfile.mysql2

This file was deleted.

10 changes: 0 additions & 10 deletions gemfiles/activerecord-4.2.1/Gemfile.postgresql

This file was deleted.

10 changes: 0 additions & 10 deletions gemfiles/activerecord-4.2.1/Gemfile.sqlite3

This file was deleted.

3 changes: 0 additions & 3 deletions gemfiles/activerecord-4.2.6/Gemfile.base

This file was deleted.

10 changes: 0 additions & 10 deletions gemfiles/activerecord-4.2.6/Gemfile.mysql2

This file was deleted.

10 changes: 0 additions & 10 deletions gemfiles/activerecord-4.2.6/Gemfile.postgresql

This file was deleted.

10 changes: 0 additions & 10 deletions gemfiles/activerecord-4.2.6/Gemfile.sqlite3

This file was deleted.

2 changes: 1 addition & 1 deletion gemfiles/activerecord-5.0/Gemfile.base
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
eval File.read File.expand_path('../../Gemfile.base', __FILE__)

gem "activerecord", "~> 5.0.0"
gem "activerecord", "~> 5.0.1"
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
eval File.read File.expand_path('../../Gemfile.base', __FILE__)

gem "activerecord", "4.2.0"
gem "activerecord", "~> 5.1.0"
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ require "pathname"
eval(Pathname.new(__FILE__).dirname.join("Gemfile.base").read, binding)

platform :ruby do
gem 'mysql2', '~> 0.3.13'
gem "mysql2"
end

platform :jruby do
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -67,22 +67,8 @@ module TableDefinition

attr_accessor :schema_plus_foreign_keys_config #:nodoc:

if Gem::Requirement.new('= 4.2.0').satisfied_by?(::ActiveRecord.version)
def foreign_keys
@foreign_keys ||= []
end

def foreign_keys_for_table(*)
foreign_keys
end
elsif Gem::Requirement.new('< 4.2.6').satisfied_by?(::ActiveRecord.version)
def foreign_keys_for_table(table)
foreign_keys[table] ||= []
end
else
def foreign_keys_for_table(*)
foreign_keys
end
def foreign_keys_for_table(*)
foreign_keys
end

def foreign_key(*args) # (column_names, to_table, primary_key=nil, options=nil)
Expand Down
16 changes: 0 additions & 16 deletions lib/schema_plus/foreign_keys/middleware/sql.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,6 @@ module SchemaPlus::ForeignKeys
module Middleware
module Sql
module Table
if Gem::Requirement.new('< 5.0.0.alpha.1').satisfied_by?(::ActiveRecord.version)
def after(env)
foreign_keys = if env.table_definition.foreign_keys.is_a? Array
env.table_definition.foreign_keys
else
env.table_definition.foreign_keys.values.tap { |v| v.flatten! }
end

# create foreign key constraints inline in table definition
env.sql.body = ([env.sql.body] + foreign_keys.map(&:to_sql)).join(', ')

# prevents AR >= 4.2.1 from emitting add_foreign_key after the table
env.table_definition.foreign_keys.clear
end
end

module SQLite3
def before(env)
env.connection.execute('PRAGMA FOREIGN_KEYS = ON') if env.table_definition.foreign_keys.any?
Expand Down
7 changes: 3 additions & 4 deletions schema_dev.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
ruby:
- 2.3.1
- 2.3.4
- 2.4.1
activerecord:
- 4.2.0
- 4.2.1
- 4.2.6
- 5.0
- 5.1
db:
- mysql2
- sqlite3
Expand Down
2 changes: 1 addition & 1 deletion schema_plus_foreign_keys.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Gem::Specification.new do |gem|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
gem.require_paths = ["lib"]

gem.add_dependency "activerecord", ">= 4.2", "< 5.1"
gem.add_dependency "activerecord", ">= 5.0", "< 5.2"
gem.add_dependency "schema_plus_core"
gem.add_dependency "schema_plus_compatibility", "~> 0.2"
gem.add_dependency "valuable"
Expand Down
12 changes: 6 additions & 6 deletions spec/deprecation_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
define_schema do
create_table :posts
create_table :comments do |t|
t.integer :post_id
t.references :post
end
end
class Comment < ::ActiveRecord::Base ; end
Expand All @@ -28,7 +28,7 @@ class Comment < ::ActiveRecord::Base ; end
define_schema do
create_table :posts
create_table :comments do |t|
t.integer :post_id, foreign_key: true
t.references :post, foreign_key: true
end
end
class Comment < ::ActiveRecord::Base ; end
Expand Down Expand Up @@ -89,7 +89,7 @@ class Comment < ::ActiveRecord::Base ; end
define_schema do
create_table :posts
create_table :comments do |t|
t.integer :post_id, foreign_key: true
t.references :post, foreign_key: true
end
end
class Comment < ::ActiveRecord::Base ; end
Expand Down Expand Up @@ -126,7 +126,7 @@ class Comment < ::ActiveRecord::Base ; end
define_schema do
create_table :posts
create_table :comments do |t|
t.integer :post_id, references: :posts, on_delete: :set_null
t.references :post, references: :posts, on_delete: :set_null
end
end
expect(definition.on_delete).to eq(:nullify)
Expand All @@ -141,7 +141,7 @@ class Comment < ::ActiveRecord::Base ; end
define_schema do
create_table :posts, primary_key: :funky
create_table :comments do |t|
t.integer :post_id
t.references :post
t.foreign_key :post_id, :posts, :funky
end
end
Expand All @@ -153,7 +153,7 @@ class Comment < ::ActiveRecord::Base ; end
define_schema do
create_table :posts, primary_key: :funky
create_table :comments do |t|
t.integer :post_id
t.references :post
t.foreign_key :post_id, :posts, :funky, :town
end
end
Expand Down
35 changes: 30 additions & 5 deletions spec/foreign_key_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
t.string :login
end
create_table :comments, :force => true do |t|
t.integer :user_id
t.references :user
t.foreign_key :user_id, :users
end
end
Expand All @@ -30,6 +30,31 @@ class Comment < ::ActiveRecord::Base ; end

end

context "explicit foreign key type" do
[:integer, :bigint].each do |primary_key_type|
before(:each) do
define_schema do
create_table :users, :id => primary_key_type, :force => true do |t|
t.string :login
end

create_table :comments, :id => primary_key_type, :force => true do |t|
t.send primary_key_type, :user_id
t.foreign_key :user_id, :users
end
end
end

it "should report foreign key constraints" do
expect(Comment.foreign_keys.collect(&:column).flatten).to eq([ "user_id" ])
end

it "should report reverse foreign key constraints" do
expect(User.reverse_foreign_keys.collect(&:column).flatten).to eq([ "user_id" ])
end
end
end

context "modification" do

before(:each) do
Expand All @@ -41,13 +66,13 @@ class Comment < ::ActiveRecord::Base ; end

create_table :posts, :force => true do |t|
t.text :body
t.integer :user_id
t.integer :author_id
t.references :user
t.references :author
end

create_table :comments, :force => true do |t|
t.text :body
t.integer :post_id
t.references :post
t.foreign_key :post_id, :posts
end
end
Expand Down Expand Up @@ -150,7 +175,7 @@ class Comment < ::ActiveRecord::Base ; end
before(:each) do
migration.suppress_messages do
migration.create_table :references, :force => true do |t|
t.integer :post_id, :foreign_key => false
t.references :post, :foreign_key => false
end
end
end
Expand Down

0 comments on commit ec50e51

Please sign in to comment.