schema_plus_foreign_keys 0.1.8 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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