schema_plus_foreign_keys 0.1.8 → 1.0.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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/prs.yml +134 -0
  3. data/.gitignore +1 -0
  4. data/.simplecov +20 -0
  5. data/Gemfile +4 -1
  6. data/README.md +25 -18
  7. data/Rakefile +3 -1
  8. data/gemfiles/Gemfile.base +1 -1
  9. data/gemfiles/activerecord-5.2/Gemfile.base +2 -1
  10. data/gemfiles/activerecord-5.2/Gemfile.mysql2 +2 -2
  11. data/gemfiles/activerecord-5.2/Gemfile.postgresql +2 -2
  12. data/gemfiles/activerecord-5.2/Gemfile.sqlite3 +3 -3
  13. data/gemfiles/activerecord-6.0/Gemfile.base +4 -0
  14. data/gemfiles/activerecord-6.0/Gemfile.mysql2 +10 -0
  15. data/gemfiles/activerecord-6.0/Gemfile.postgresql +10 -0
  16. data/gemfiles/{activerecord-4.2.0 → activerecord-6.0}/Gemfile.sqlite3 +3 -3
  17. data/lib/schema_plus/foreign_keys/active_record/base.rb +2 -0
  18. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/abstract/schema_creation.rb +2 -11
  19. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/abstract_adapter.rb +7 -47
  20. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/foreign_key_definition.rb +4 -35
  21. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/mysql2_adapter.rb +15 -16
  22. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/postgresql_adapter.rb +8 -6
  23. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/sqlite3_adapter.rb +8 -6
  24. data/lib/schema_plus/foreign_keys/active_record/connection_adapters/table_definition.rb +7 -46
  25. data/lib/schema_plus/foreign_keys/active_record/migration/command_recorder.rb +4 -2
  26. data/lib/schema_plus/foreign_keys/middleware/dumper.rb +4 -2
  27. data/lib/schema_plus/foreign_keys/middleware/migration.rb +13 -5
  28. data/lib/schema_plus/foreign_keys/middleware/model.rb +2 -0
  29. data/lib/schema_plus/foreign_keys/middleware/mysql.rb +3 -1
  30. data/lib/schema_plus/foreign_keys/middleware/sql.rb +2 -16
  31. data/lib/schema_plus/foreign_keys/version.rb +3 -1
  32. data/lib/schema_plus/foreign_keys.rb +2 -1
  33. data/lib/schema_plus_foreign_keys.rb +2 -0
  34. data/schema_dev.yml +4 -6
  35. data/schema_plus_foreign_keys.gemspec +10 -9
  36. data/spec/deprecation_spec.rb +11 -110
  37. data/spec/foreign_key_definition_spec.rb +5 -3
  38. data/spec/foreign_key_spec.rb +22 -20
  39. data/spec/migration_spec.rb +35 -59
  40. data/spec/named_schemas_spec.rb +16 -14
  41. data/spec/schema_dumper_spec.rb +13 -13
  42. data/spec/spec_helper.rb +4 -2
  43. data/spec/support/reference.rb +3 -2
  44. metadata +31 -89
  45. data/.travis.yml +0 -33
  46. data/gemfiles/activerecord-4.2.0/Gemfile.base +0 -3
  47. data/gemfiles/activerecord-4.2.0/Gemfile.mysql2 +0 -10
  48. data/gemfiles/activerecord-4.2.0/Gemfile.postgresql +0 -10
  49. data/gemfiles/activerecord-4.2.1/Gemfile.base +0 -3
  50. data/gemfiles/activerecord-4.2.1/Gemfile.mysql2 +0 -10
  51. data/gemfiles/activerecord-4.2.1/Gemfile.postgresql +0 -10
  52. data/gemfiles/activerecord-4.2.1/Gemfile.sqlite3 +0 -10
  53. data/gemfiles/activerecord-4.2.6/Gemfile.base +0 -3
  54. data/gemfiles/activerecord-4.2.6/Gemfile.mysql2 +0 -10
  55. data/gemfiles/activerecord-4.2.6/Gemfile.postgresql +0 -10
  56. data/gemfiles/activerecord-4.2.6/Gemfile.sqlite3 +0 -10
  57. data/gemfiles/activerecord-5.0/Gemfile.base +0 -3
  58. data/gemfiles/activerecord-5.0/Gemfile.mysql2 +0 -10
  59. data/gemfiles/activerecord-5.0/Gemfile.postgresql +0 -10
  60. data/gemfiles/activerecord-5.0/Gemfile.sqlite3 +0 -10
  61. data/gemfiles/activerecord-5.1/Gemfile.base +0 -3
  62. data/gemfiles/activerecord-5.1/Gemfile.mysql2 +0 -10
  63. data/gemfiles/activerecord-5.1/Gemfile.postgresql +0 -10
  64. data/gemfiles/activerecord-5.1/Gemfile.sqlite3 +0 -10
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module ActiveRecord
3
5
  module ConnectionAdapters
@@ -61,12 +63,12 @@ module SchemaPlus::ForeignKeys
61
63
  on_update = ForeignKeyDefinition::ACTION_LOOKUP[on_update] || :no_action
62
64
  on_delete = ForeignKeyDefinition::ACTION_LOOKUP[on_delete] || :no_action
63
65
 
64
- options = { :name => name,
65
- :on_delete => on_delete,
66
- :on_update => on_update,
67
- :column => columns,
68
- :primary_key => primary_keys,
69
- :deferrable => deferrable }
66
+ options = { name: name,
67
+ on_delete: on_delete,
68
+ on_update: on_update,
69
+ column: columns,
70
+ primary_key: primary_keys,
71
+ deferrable: deferrable }
70
72
 
71
73
  foreign_keys << ::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(
72
74
  from_table,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module ActiveRecord
3
5
  module ConnectionAdapters
@@ -59,12 +61,12 @@ module SchemaPlus::ForeignKeys
59
61
  on_delete = ForeignKeyDefinition::ACTION_LOOKUP[on_delete] || :no_action
60
62
  deferrable = deferrable ? (initially_deferred ? :initially_deferred : true) : false
61
63
 
62
- options = { :name => name,
63
- :on_update => on_update,
64
- :on_delete => on_delete,
65
- :column => columns,
66
- :primary_key => primary_keys,
67
- :deferrable => deferrable }
64
+ options = { name: name,
65
+ on_update: on_update,
66
+ on_delete: on_delete,
67
+ column: columns,
68
+ primary_key: primary_keys,
69
+ deferrable: deferrable }
68
70
 
69
71
  foreign_keys << ::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(
70
72
  from_table,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
2
4
 
3
5
  #
@@ -25,7 +27,7 @@ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
25
27
  # definition, via:
26
28
  #
27
29
  # create_table :widgets do |t|
28
- # t.string :name, :index => true
30
+ # t.string :name, index: true
29
31
  # end
30
32
  #
31
33
  # For details about the :index option (including unique and multi-column indexes), see the
@@ -36,15 +38,15 @@ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
36
38
  # create_table :posts do |t| # not DRY
37
39
  # t.references :author
38
40
  # end
39
- # add_foreign_key :posts, :author_id, :references => :authors
41
+ # add_foreign_key :posts, :author_id, references: :authors
40
42
  #
41
43
  # create_table :posts do |t| # DRYer
42
44
  # t.references :author
43
- # t.foreign_key :author_id, :references => :authors
45
+ # t.foreign_key :author_id, references: :authors
44
46
  # end
45
47
  #
46
48
  # create_table :posts do |t| # Dryest
47
- # t.references :author, :foreign_key => true
49
+ # t.references :author, foreign_key: true
48
50
  # end
49
51
  #
50
52
  # <b>NOTE:</b> In the standard configuration, SchemaPlus::ForeignKeys automatically
@@ -59,7 +61,7 @@ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
59
61
  # Finally, the configuration for foreign keys can be overriden on a per-table
60
62
  # basis by passing Config options to Migration::ClassMethods#create_table, such as
61
63
  #
62
- # create_table :students, :foreign_keys => {:auto_create => false} do
64
+ # create_table :students, foreign_keys: {auto_create: false} do
63
65
  # t.references :student
64
66
  # end
65
67
  #
@@ -67,46 +69,5 @@ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
67
69
 
68
70
  attr_accessor :schema_plus_foreign_keys_config #:nodoc:
69
71
 
70
- if Gem::Requirement.new('= 4.2.0').satisfied_by?(::ActiveRecord.version)
71
- def foreign_keys
72
- @foreign_keys ||= []
73
- end
74
-
75
- def foreign_keys_for_table(*)
76
- foreign_keys
77
- end
78
- elsif Gem::Requirement.new('< 4.2.6').satisfied_by?(::ActiveRecord.version)
79
- def foreign_keys_for_table(table)
80
- foreign_keys[table] ||= []
81
- end
82
- else
83
- def foreign_keys_for_table(*)
84
- foreign_keys
85
- end
86
- end
87
-
88
- def foreign_key(*args) # (column_names, to_table, primary_key=nil, options=nil)
89
- options = args.extract_options!
90
- case args.length
91
- when 1
92
- to_table = args[0]
93
- column_names = "#{to_table.to_s.singularize}_id"
94
- when 2
95
- column_names, to_table = args
96
- when 3
97
- ActiveSupport::Deprecation.warn "positional arg for foreign primary key is deprecated, use :primary_key option instead"
98
- column_names, to_table, primary_key = args
99
- options.merge!(:primary_key => primary_key)
100
- else
101
- raise ArgumentError, "wrong number of arguments (#{args.length}) for foreign_key(column_names, table_name, options)"
102
- end
103
-
104
- options.merge!(:column => column_names)
105
- options.reverse_merge!(:name => ForeignKeyDefinition.default_name(self.name, column_names))
106
- fk = ::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(self.name, AbstractAdapter.proper_table_name(to_table), options)
107
- foreign_keys_for_table(fk.to_table) << fk
108
- self
109
- end
110
-
111
72
  end
112
73
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module ActiveRecord
3
5
  module Migration
@@ -6,7 +8,7 @@ module SchemaPlus::ForeignKeys
6
8
  attr_accessor :schema_plus_foreign_keys_config #:nodoc:
7
9
 
8
10
  # seems like this is fixing a rails bug:
9
- # change_table foo, :bulk => true { |t| t.references :bar }
11
+ # change_table foo, bulk: true { |t| t.references :bar }
10
12
  # results in an 'unknown method :add_reference_sql' (with mysql2)
11
13
  #
12
14
  # should track it down separately and submit a patch/fix to rails
@@ -16,7 +18,7 @@ module SchemaPlus::ForeignKeys
16
18
  options[:references] = nil if polymorphic
17
19
  # ugh. copying and pasting code from ::ActiveRecord::ConnectionAdapters::SchemaStatements#add_reference
18
20
  index_options = options.delete(:index)
19
- add_column(table_name, "#{ref_name}_id", :integer, options)
21
+ add_column(table_name, "#{ref_name}_id", :integer, **options)
20
22
  add_column(table_name, "#{ref_name}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) if polymorphic
21
23
  add_index(table_name, polymorphic ? %w[id type].map{ |t| "#{ref_name}_#{t}" } : "#{ref_name}_id", index_options.is_a?(Hash) ? index_options : {}) if index_options
22
24
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module Middleware
3
5
  module Dumper
@@ -37,7 +39,7 @@ module SchemaPlus::ForeignKeys
37
39
 
38
40
  # Ignore the foreign key dumps at the end of the schema; we'll put them in/near their tables
39
41
  def after(env)
40
- env.dump.final.reject!(&it =~/foreign_key/)
42
+ env.dump.final.reject!{ |it| it =~/foreign_key/ }
41
43
  end
42
44
 
43
45
  private
@@ -66,7 +68,7 @@ module SchemaPlus::ForeignKeys
66
68
  def after(env)
67
69
  dumped = {}
68
70
  env.table.columns.each do |column|
69
- if (foreign_key = env.dump.data.inline_fks[env.table.name].find(&its.column.to_s == column.name))
71
+ if (foreign_key = env.dump.data.inline_fks[env.table.name].find { |it| it.column.to_s == column.name })
70
72
  column.options[:foreign_key] = {references: foreign_key.to_table}.merge foreign_key.options_for_dump
71
73
  dumped[foreign_key] = true
72
74
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module Middleware
3
5
  module Migration
@@ -22,7 +24,13 @@ module SchemaPlus::ForeignKeys
22
24
  env.connection.foreign_keys(newname).each do |fk|
23
25
  begin
24
26
  env.connection.remove_foreign_key(newname, name: fk.name)
25
- env.connection.add_foreign_key(newname, fk.to_table, :column => fk.column, :primary_key => fk.primary_key, :name => fk.name.sub(/#{oldname}/, newname), :on_update => fk.on_update, :on_delete => fk.on_delete, :deferrable => fk.deferrable)
27
+ env.connection.add_foreign_key(newname, fk.to_table,
28
+ column: fk.column,
29
+ primary_key: fk.primary_key,
30
+ name: fk.name.sub(/#{oldname}/, newname),
31
+ on_update: fk.on_update,
32
+ on_delete: fk.on_delete,
33
+ deferrable: fk.deferrable)
26
34
  rescue NotImplementedError
27
35
  # sqlite3 can't remote or add foreign keys, so just skip it
28
36
  end
@@ -123,9 +131,9 @@ module SchemaPlus::ForeignKeys
123
131
  references = fk_opts.delete(:references)
124
132
  case env.caller
125
133
  when ::ActiveRecord::ConnectionAdapters::TableDefinition
126
- env.caller.foreign_key(env.column_name, references, fk_opts)
134
+ env.caller.foreign_key(references, **fk_opts)
127
135
  else
128
- env.caller.add_foreign_key(env.table_name, references, fk_opts.merge(:column => env.column_name))
136
+ env.caller.add_foreign_key(env.table_name, references, **fk_opts)
129
137
  end
130
138
  end
131
139
 
@@ -134,6 +142,7 @@ module SchemaPlus::ForeignKeys
134
142
  return nil if opts.nil?
135
143
  return :none if opts == false
136
144
  opts = {} if opts == true
145
+ opts[:column] ||= env.column_name
137
146
  opts[:references] ||= default_table_name(env)
138
147
  opts[:on_update] ||= config.on_update
139
148
  opts[:on_delete] ||= config.on_delete
@@ -141,7 +150,7 @@ module SchemaPlus::ForeignKeys
141
150
  end
142
151
 
143
152
  def remove_foreign_key_if_exists(env)
144
- env.caller.remove_foreign_key(env.table_name.to_s, column: env.column_name.to_s, :if_exists => true)
153
+ env.caller.remove_foreign_key(env.table_name.to_s, column: env.column_name.to_s, if_exists: true)
145
154
  end
146
155
 
147
156
  def default_table_name(env)
@@ -159,4 +168,3 @@ module SchemaPlus::ForeignKeys
159
168
  end
160
169
  end
161
170
  end
162
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module Middleware
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module Middleware
3
5
 
@@ -6,7 +8,7 @@ module SchemaPlus::ForeignKeys
6
8
  module DropTable
7
9
 
8
10
  def around(env)
9
- if (env.options[:force] == :cascade)
11
+ if env.options[:force] == :cascade
10
12
  env.connection.reverse_foreign_keys(env.table_name).each do |foreign_key|
11
13
  env.connection.remove_foreign_key(foreign_key.from_table, name: foreign_key.name)
12
14
  end
@@ -1,23 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus::ForeignKeys
2
4
  module Middleware
3
5
  module Sql
4
6
  module Table
5
- if Gem::Requirement.new('< 5.0').satisfied_by?(::ActiveRecord.version)
6
- def after(env)
7
- foreign_keys = if env.table_definition.foreign_keys.is_a? Array
8
- env.table_definition.foreign_keys
9
- else
10
- env.table_definition.foreign_keys.values.tap { |v| v.flatten! }
11
- end
12
-
13
- # create foreign key constraints inline in table definition
14
- env.sql.body = ([env.sql.body] + foreign_keys.map(&:to_sql)).join(', ')
15
-
16
- # prevents AR >= 4.2.1 from emitting add_foreign_key after the table
17
- env.table_definition.foreign_keys.clear
18
- end
19
- end
20
-
21
7
  module SQLite3
22
8
  def before(env)
23
9
  env.connection.execute('PRAGMA FOREIGN_KEYS = ON') if env.table_definition.foreign_keys.any?
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaPlus
2
4
  module ForeignKeys
3
- VERSION = "0.1.8"
5
+ VERSION = "1.0.0"
4
6
  end
5
7
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'schema_plus/core'
2
4
  require 'schema_plus_compatibility'
3
- require 'its-it'
4
5
  require 'valuable'
5
6
 
6
7
  require_relative 'foreign_keys/version'
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'schema_plus/foreign_keys'
data/schema_dev.yml CHANGED
@@ -1,12 +1,10 @@
1
1
  ruby:
2
- - 2.3.1
2
+ - 2.5
3
+ - 2.7
4
+ - 3.0
3
5
  activerecord:
4
- - 4.2.0
5
- - 4.2.1
6
- - 4.2.6
7
- - 5.0
8
- - 5.1
9
6
  - 5.2
7
+ - 6.0
10
8
  db:
11
9
  - mysql2
12
10
  - sqlite3
@@ -1,4 +1,6 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  lib = File.expand_path('../lib', __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'schema_plus/foreign_keys/version'
@@ -18,16 +20,15 @@ Gem::Specification.new do |gem|
18
20
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
21
  gem.require_paths = ["lib"]
20
22
 
21
- gem.add_dependency "activerecord", ">= 4.2", "< 5.3"
22
- gem.add_dependency "schema_plus_core"
23
- gem.add_dependency "schema_plus_compatibility", "~> 0.2"
23
+ gem.required_ruby_version = ">= 2.5.0"
24
+
25
+ gem.add_dependency "activerecord", ">= 5.2", "< 6.1"
26
+ gem.add_dependency "schema_plus_core", "~> 3.0.0"
27
+ gem.add_dependency "schema_plus_compatibility", "~> 1.0.0"
24
28
  gem.add_dependency "valuable"
25
- gem.add_dependency "its-it", "~> 1.2"
26
29
 
27
- gem.add_development_dependency "bundler", "~> 1.7"
28
- gem.add_development_dependency "rake", "~> 10.0"
30
+ gem.add_development_dependency "bundler"
31
+ gem.add_development_dependency "rake", "~> 13.0"
29
32
  gem.add_development_dependency "rspec", "~> 3.0"
30
- gem.add_development_dependency "schema_dev", "~> 3.5"
31
- gem.add_development_dependency "simplecov"
32
- gem.add_development_dependency "simplecov-gem-profile"
33
+ gem.add_development_dependency "schema_dev", "~> 4.1"
33
34
  end
@@ -1,89 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'Deprecations' do
4
6
 
5
7
  let(:migration) { ActiveRecord::Migration }
6
8
 
7
- describe "on add_foreign_key", sqlite3: :skip do
8
- before(:each) do
9
- define_schema do
10
- create_table :posts
11
- create_table :comments do |t|
12
- t.references :post
13
- end
14
- end
15
- class Comment < ::ActiveRecord::Base ; end
16
- end
17
-
18
- it "deprecates 4-argument form" do
19
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/4-argument/)
20
- migration.add_foreign_key "comments", "post_id", "posts", "id"
21
- expect(Comment).to reference(:posts, :id).on(:post_id)
22
- end
23
-
24
- end
25
-
26
- describe "on remove_foreign_key", sqlite3: :skip do
27
- before(:each) do
28
- define_schema do
29
- create_table :posts
30
- create_table :comments do |t|
31
- t.references :post, foreign_key: true
32
- end
33
- end
34
- class Comment < ::ActiveRecord::Base ; end
35
- end
36
-
37
- it "deprecates :column_names option" do
38
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/column_names/)
39
- migration.remove_foreign_key "comments", "posts", column_names: "post_id"
40
- Comment.reset_column_information
41
- expect(Comment).to_not reference(:posts, :id).on(:post_id)
42
- end
43
-
44
- it "deprecates :references_column_names option" do
45
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/references_column_names.*primary_key/)
46
- migration.remove_foreign_key "comments", "posts", references_column_names: "id"
47
- Comment.reset_column_information
48
- expect(Comment).to_not reference(:posts, :id).on(:post_id)
49
- end
50
-
51
- it "deprecates :references_table_name option" do
52
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/references_table_name.*to_table/)
53
- migration.remove_foreign_key "comments", references_table_name: "posts"
54
- Comment.reset_column_information
55
- expect(Comment).to_not reference(:posts, :id).on(:post_id)
56
- end
57
-
58
- it "deprecates table-and-name form" do
59
- Comment.reset_column_information
60
- name = Comment.foreign_keys.first.name
61
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/name.*name: name/)
62
- migration.remove_foreign_key "comments", name
63
- Comment.reset_column_information
64
- expect(Comment).to_not reference(:posts, :id).on(:post_id)
65
- end
66
-
67
- it "deprecates 3-argument form" do
68
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/3.*-argument/)
69
- migration.remove_foreign_key "comments", "post_id", "posts"
70
- Comment.reset_column_information
71
- expect(Comment).to_not reference(:posts, :id).on(:post_id)
72
- end
73
-
74
- it "deprecates 4-argument form" do
75
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/4.*-argument/)
76
- migration.remove_foreign_key "comments", "post_id", "posts", "id"
77
- Comment.reset_column_information
78
- expect(Comment).to_not reference(:posts, :id).on(:post_id)
79
- end
80
-
81
- it "raises error for 5 arguments" do
82
- expect { migration.remove_foreign_key "zip", "a", "dee", "do", "da" }.to raise_error /Wrong number of arguments.*5/
83
- end
84
-
85
- end
86
-
87
9
  describe "on foreign key definition" do
88
10
  before(:each) do
89
11
  define_schema do
@@ -100,26 +22,6 @@ describe 'Deprecations' do
100
22
  Comment.foreign_keys.first
101
23
  }
102
24
 
103
- it "deprecates column_names" do
104
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/column_names/)
105
- expect(definition.column_names).to eq(["post_id"])
106
- end
107
-
108
- it "deprecates references_column_names" do
109
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/references_column_names.*primary_key/)
110
- expect(definition.references_column_names).to eq(["id"])
111
- end
112
-
113
- it "deprecates references_table_name" do
114
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/references_table_name.*to_table/)
115
- expect(definition.references_table_name).to eq("posts")
116
- end
117
-
118
- it "deprecates table_name" do
119
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/table_name.*from_table/)
120
- expect(definition.table_name).to eq("comments")
121
- end
122
-
123
25
  it "deprecates :set_null" do
124
26
  expect(ActiveSupport::Deprecation).to receive(:warn).with(/set_null.*nullify/)
125
27
  allow(ActiveSupport::Deprecation).to receive(:warn).with(/table_exists\? currently checks/)
@@ -135,17 +37,16 @@ describe 'Deprecations' do
135
37
  end
136
38
 
137
39
  describe "in table definition" do
138
- it "deprecates 3-column form" do
139
- expect(ActiveSupport::Deprecation).to receive(:warn).with(/positional arg.*primary_key/)
140
- allow(ActiveSupport::Deprecation).to receive(:warn).with(/table_exists\? currently checks/)
141
- define_schema do
142
- create_table :posts, primary_key: :funky
143
- create_table :comments do |t|
144
- t.references :post
145
- t.foreign_key :post_id, :posts, :funky
40
+ it "raises error for 3 arguments" do
41
+ expect {
42
+ define_schema do
43
+ create_table :posts, primary_key: :funky
44
+ create_table :comments do |t|
45
+ t.references :post
46
+ t.foreign_key :post_id, :posts, :funky
47
+ end
146
48
  end
147
- end
148
- expect(migration.foreign_keys("comments").first.primary_key).to eq("funky")
49
+ }.to raise_error /wrong number of arguments/i
149
50
  end
150
51
 
151
52
  it "raises error for 4 arguments" do
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe "Foreign Key definition" do
4
6
 
5
7
  let(:definition) {
6
- options = {:name => "posts_user_fkey", :column => :user, :primary_key => :id}
8
+ options = {name: "posts_user_fkey", column: :user, primary_key: :id}
7
9
  ::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(:posts, :users, options)
8
10
  }
9
11
 
@@ -12,13 +14,13 @@ describe "Foreign Key definition" do
12
14
  end
13
15
 
14
16
  it "dumps to sql with deferrable values" do
15
- options = {:name => "posts_user_fkey", :column => :user, :primary_key => :id, :deferrable => true}
17
+ options = {name: "posts_user_fkey", column: :user, primary_key: :id, deferrable: true}
16
18
  deferred_definition = ::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(:posts, :users, options)
17
19
  expect(deferred_definition.to_sql).to eq(%Q{CONSTRAINT posts_user_fkey FOREIGN KEY (#{quote_column_name('user')}) REFERENCES #{quote_table_name('users')} (#{quote_column_name('id')}) DEFERRABLE})
18
20
  end
19
21
 
20
22
  it "dumps to sql with initially deferrable values" do
21
- options = {:name => "posts_user_fkey", :column => :user, :primary_key => :id, :deferrable => :initially_deferred}
23
+ options = {name: "posts_user_fkey", column: :user, primary_key: :id, deferrable: :initially_deferred}
22
24
  initially_deferred_definition = ::ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(:posts, :users, options)
23
25
  expect(initially_deferred_definition.to_sql).to eq(%Q{CONSTRAINT posts_user_fkey FOREIGN KEY (#{quote_column_name('user')}) REFERENCES #{quote_table_name('users')} (#{quote_column_name('id')}) DEFERRABLE INITIALLY DEFERRED})
24
26
  end