schema_plus 2.0.0.pre5 → 2.0.0.pre6

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -51
  3. data/lib/schema_plus.rb +10 -10
  4. data/lib/schema_plus/db_default.rb +7 -0
  5. data/lib/{schema_plus_db_default → schema_plus/db_default}/active_record/attribute.rb +1 -1
  6. data/lib/{schema_plus_db_default → schema_plus/db_default}/db_default.rb +2 -2
  7. data/lib/{schema_plus_db_default → schema_plus/db_default}/middleware.rb +1 -1
  8. data/lib/{schema_plus_default_expr.rb → schema_plus/default_expr.rb} +8 -8
  9. data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/column.rb +1 -1
  10. data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/mysql2_adapter.rb +1 -1
  11. data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/postgresql_adapter.rb +1 -1
  12. data/lib/{schema_plus_default_expr → schema_plus/default_expr}/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
  13. data/lib/{schema_plus_default_expr → schema_plus/default_expr}/middleware.rb +1 -1
  14. data/lib/schema_plus/enums.rb +6 -0
  15. data/lib/{schema_plus_enums → schema_plus/enums}/active_record.rb +1 -1
  16. data/lib/{schema_plus_enums → schema_plus/enums}/middleware.rb +1 -1
  17. data/lib/{schema_plus_foreign_keys.rb → schema_plus/foreign_keys.rb} +21 -21
  18. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/base.rb +2 -2
  19. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/abstract_adapter.rb +5 -5
  20. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/foreign_key_definition.rb +2 -2
  21. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/mysql2_adapter.rb +2 -2
  22. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/postgresql_adapter.rb +2 -2
  23. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/sqlite3_adapter.rb +2 -2
  24. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/connection_adapters/table_definition.rb +8 -8
  25. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/migration/command_recorder.rb +1 -1
  26. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/active_record/schema.rb +4 -4
  27. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/dumper.rb +2 -2
  28. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/migration.rb +2 -2
  29. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/model.rb +1 -1
  30. data/lib/{schema_plus_foreign_keys → schema_plus/foreign_keys}/middleware/sql.rb +1 -1
  31. data/lib/schema_plus/foreign_keys/version.rb +3 -0
  32. data/lib/schema_plus/tables.rb +15 -0
  33. data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/abstract_adapter.rb +2 -2
  34. data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/mysql2_adapter.rb +2 -2
  35. data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/postgresql_adapter.rb +2 -2
  36. data/lib/{schema_plus_tables → schema_plus/tables}/active_record/connection_adapters/sqlite3_adapter.rb +1 -1
  37. data/lib/schema_plus/version.rb +1 -1
  38. data/schema_plus.gemspec +2 -1
  39. data/spec/schema_plus_db_default/column_spec.rb +1 -1
  40. data/spec/schema_plus_default_expr/schema_dumper_spec.rb +1 -1
  41. data/spec/schema_plus_foreign_keys/migration_spec.rb +13 -13
  42. data/spec/schema_plus_foreign_keys/schema_dumper_spec.rb +78 -11
  43. data/spec/schema_plus_foreign_keys/schema_spec.rb +6 -6
  44. data/spec/spec_helper.rb +5 -5
  45. data/spec/support/helpers.rb +1 -1
  46. data/spec/support/matchers/have_index.rb +1 -1
  47. data/spec/support/matchers/reference.rb +1 -1
  48. metadata +51 -42
  49. data/lib/schema_plus_columns.rb +0 -7
  50. data/lib/schema_plus_columns/active_record/connection_adapters/column.rb +0 -65
  51. data/lib/schema_plus_columns/middleware/model.rb +0 -16
  52. data/lib/schema_plus_db_default.rb +0 -7
  53. data/lib/schema_plus_enums.rb +0 -6
  54. data/lib/schema_plus_foreign_keys/version.rb +0 -3
  55. data/lib/schema_plus_tables.rb +0 -15
  56. data/spec/schema_plus_columns/column_spec.rb +0 -156
@@ -1,7 +1,7 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
- # SchemaPlusForeignKeys includes a MySQL implementation of the AbstractAdapter
4
+ # SchemaPlus::ForeignKeys includes a MySQL implementation of the AbstractAdapter
5
5
  # extensions.
6
6
  module Mysql2Adapter
7
7
 
@@ -1,8 +1,8 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
 
5
- # The Postgresql adapter implements the SchemaPlusForeignKeys extensions and
5
+ # The Postgresql adapter implements the SchemaPlus::ForeignKeys extensions and
6
6
  # enhancements
7
7
  module PostgresqlAdapter
8
8
 
@@ -1,8 +1,8 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
 
5
- # SchemaPlusForeignKeys includes an Sqlite3 implementation of the AbstractAdapter
5
+ # SchemaPlus::ForeignKeys includes an Sqlite3 implementation of the AbstractAdapter
6
6
  # extensions.
7
7
  module Sqlite3Adapter
8
8
 
@@ -1,19 +1,19 @@
1
- module SchemaPlusForeignKeys::ActiveRecord::ConnectionAdapters
1
+ module SchemaPlus::ForeignKeys::ActiveRecord::ConnectionAdapters
2
2
 
3
3
  #
4
- # SchemaPlusForeignKeys adds several methods to TableDefinition, allowing indexes
4
+ # SchemaPlus::ForeignKeys adds several methods to TableDefinition, allowing indexes
5
5
  # and foreign key constraints to be defined within a
6
6
  # <tt>create_table</tt> block of a migration, allowing for better
7
7
  # encapsulation and more DRY definitions.
8
8
  #
9
- # For example, without SchemaPlusForeignKeys you might define a table like this:
9
+ # For example, without SchemaPlus::ForeignKeys you might define a table like this:
10
10
  #
11
11
  # create_table :widgets do |t|
12
12
  # t.string :name
13
13
  # end
14
14
  # add_index :widgets, :name
15
15
  #
16
- # But with SchemaPlusForeignKeys, the index can be defined within the create_table
16
+ # But with SchemaPlus::ForeignKeys, the index can be defined within the create_table
17
17
  # block, so you don't need to repeat the table name:
18
18
  #
19
19
  # create_table :widgets do |t|
@@ -31,7 +31,7 @@ module SchemaPlusForeignKeys::ActiveRecord::ConnectionAdapters
31
31
  # For details about the :index option (including unique and multi-column indexes), see the
32
32
  # documentation for Migration::ClassMethods#add_column
33
33
  #
34
- # SchemaPlusForeignKeys 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:
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
37
  # t.integer :author_id
@@ -47,13 +47,13 @@ module SchemaPlusForeignKeys::ActiveRecord::ConnectionAdapters
47
47
  # t.integer :author_id, :foreign_key => true
48
48
  # end
49
49
  #
50
- # <b>NOTE:</b> In the standard configuration, SchemaPlusForeignKeys automatically
50
+ # <b>NOTE:</b> In the standard configuration, SchemaPlus::ForeignKeys automatically
51
51
  # creates foreign key constraints for columns whose names end in
52
52
  # <tt>_id</tt>. So the above examples are redundant, unless automatic
53
53
  # creation was disabled at initialization in the global Config.
54
54
  #
55
- # SchemaPlusForeignKeys likewise by default automatically creates foreign key constraints for
56
- # columns defined via <tt>t.references</tt>. However, SchemaPlusForeignKeys does not create
55
+ # SchemaPlus::ForeignKeys likewise by default automatically creates foreign key constraints for
56
+ # columns defined via <tt>t.references</tt>. However, SchemaPlus::ForeignKeys does not create
57
57
  # foreign key constraints if the <tt>:polymorphic</tt> option is true
58
58
  #
59
59
  # Finally, the configuration for foreign keys can be overriden on a per-table
@@ -1,4 +1,4 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module ActiveRecord
3
3
  module Migration
4
4
  module CommandRecorder
@@ -1,16 +1,16 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module ActiveRecord
3
3
  module Schema
4
4
  module ClassMethods
5
5
 
6
6
  def define(*args)
7
7
  fk_override = { :auto_create => false, :auto_index => false }
8
- save = Hash[fk_override.keys.collect{|key| [key, SchemaPlusForeignKeys.config.send(key)]}]
8
+ save = Hash[fk_override.keys.collect{|key| [key, SchemaPlus::ForeignKeys.config.send(key)]}]
9
9
  begin
10
- SchemaPlusForeignKeys.config.update_attributes(fk_override)
10
+ SchemaPlus::ForeignKeys.config.update_attributes(fk_override)
11
11
  super
12
12
  ensure
13
- SchemaPlusForeignKeys.config.update_attributes(save)
13
+ SchemaPlus::ForeignKeys.config.update_attributes(save)
14
14
  end
15
15
  end
16
16
  end
@@ -1,4 +1,4 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module Middleware
3
3
  module Dumper
4
4
 
@@ -41,7 +41,7 @@ module SchemaPlusForeignKeys
41
41
 
42
42
  def break_fk_cycles(env) #:nodoc:
43
43
  env.dump.strongly_connected_components.select{|component| component.size > 1}.each do |tables|
44
- table = tables.sort.first
44
+ table = tables.sort.last
45
45
  backref_fks = @inline_fks[table].select{|fk| tables.include?(fk.to_table)}
46
46
  @inline_fks[table] -= backref_fks
47
47
  env.dump.dependencies[table] -= backref_fks.collect(&:to_table)
@@ -1,4 +1,4 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module Middleware
3
3
  module Migration
4
4
 
@@ -71,7 +71,7 @@ module SchemaPlusForeignKeys
71
71
  commands_length = env.caller.commands.length
72
72
  end
73
73
 
74
- config = (env.caller.try(:schema_plus_config) || SchemaPlusForeignKeys.config)
74
+ config = (env.caller.try(:schema_plus_config) || SchemaPlus::ForeignKeys.config)
75
75
  fk_args = get_fk_args(env, config)
76
76
 
77
77
  # remove existing fk and auto-generated index in case of change of fk on existing column
@@ -1,4 +1,4 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module Middleware
3
3
 
4
4
  module Model
@@ -1,4 +1,4 @@
1
- module SchemaPlusForeignKeys
1
+ module SchemaPlus::ForeignKeys
2
2
  module Middleware
3
3
  module Sql
4
4
  module Table
@@ -0,0 +1,3 @@
1
+ module SchemaPlus::ForeignKeys
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,15 @@
1
+ require 'schema_plus/core'
2
+
3
+ require_relative 'tables/active_record/connection_adapters/abstract_adapter'
4
+
5
+ module SchemaPlus::Tables
6
+ module ActiveRecord
7
+ module ConnectionAdapters
8
+ autoload :Mysql2Adapter, 'schema_plus/tables/active_record/connection_adapters/mysql2_adapter'
9
+ autoload :PostgresqlAdapter, 'schema_plus/tables/active_record/connection_adapters/postgresql_adapter'
10
+ autoload :Sqlite3Adapter, 'schema_plus/tables/active_record/connection_adapters/sqlite3_adapter'
11
+ end
12
+ end
13
+ end
14
+
15
+ SchemaMonkey.register SchemaPlus::Tables
@@ -1,8 +1,8 @@
1
- module SchemaPlusTables
1
+ module SchemaPlus::Tables
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
  module AbstractAdapter
5
-
5
+
6
6
  # Extends rails' drop_table to include these options:
7
7
  # :cascade
8
8
  # :if_exists
@@ -1,8 +1,8 @@
1
- module SchemaPlusTables
1
+ module SchemaPlus::Tables
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
  module Mysql2Adapter
5
-
5
+
6
6
  # implement cascade by removing foreign keys
7
7
  def drop_table(name, options={})
8
8
  if options[:cascade]
@@ -1,11 +1,11 @@
1
- module SchemaPlusTables
1
+ module SchemaPlus::Tables
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
  module PostgresqlAdapter
5
5
  # pg gem defines a drop_table with fewer options than our Abstract
6
6
  # one, so use the abstract one instead
7
7
  def drop_table(name, options={})
8
- SchemaPlusTables::ActiveRecord::ConnectionAdapters::AbstractAdapter.instance_method(:drop_table).bind(self).call(name, options)
8
+ SchemaPlus::Tables::ActiveRecord::ConnectionAdapters::AbstractAdapter.instance_method(:drop_table).bind(self).call(name, options)
9
9
  end
10
10
  end
11
11
  end
@@ -1,4 +1,4 @@
1
- module SchemaPlusTables
1
+ module SchemaPlus::Tables
2
2
  module ActiveRecord
3
3
  module ConnectionAdapters
4
4
  module Sqlite3Adapter
@@ -1,3 +1,3 @@
1
1
  module SchemaPlus
2
- VERSION = "2.0.0.pre5"
2
+ VERSION = "2.0.0.pre6"
3
3
  end
data/schema_plus.gemspec CHANGED
@@ -25,7 +25,8 @@ Gem::Specification.new do |gem|
25
25
  gem.add_dependency "valuable"
26
26
  gem.add_dependency "schema_plus_core", "~> 0.1"
27
27
  gem.add_dependency "schema_monkey_rails", "~> 0.1", ">= 0.1.2"
28
- gem.add_dependency "schema_plus_indexes", "~> 0.1", ">= 0.1.2"
28
+ gem.add_dependency "schema_plus_columns", "~> 0.1"
29
+ gem.add_dependency "schema_plus_indexes", "~> 0.1", ">= 0.1.3"
29
30
  gem.add_dependency "schema_plus_pg_indexes", "~> 0.1", ">= 0.1.3"
30
31
  gem.add_dependency "schema_plus_views", "~> 0.1"
31
32
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe SchemaPlusDbDefault do
3
+ describe SchemaPlus::DbDefault do
4
4
 
5
5
  let(:migration) { ::ActiveRecord::Migration }
6
6
 
@@ -4,7 +4,7 @@ require 'stringio'
4
4
  describe "Schema dump" do
5
5
 
6
6
  before(:all) do
7
- SchemaPlusForeignKeys.setup do |config|
7
+ SchemaPlus::ForeignKeys.setup do |config|
8
8
  config.auto_create = false
9
9
  end
10
10
  ActiveRecord::Migration.suppress_messages do
@@ -504,53 +504,53 @@ describe ActiveRecord::Migration do
504
504
  end
505
505
 
506
506
  it "should auto-index if specified in global options" do
507
- SchemaPlusForeignKeys.config.auto_index = true
507
+ SchemaPlus::ForeignKeys.config.auto_index = true
508
508
  add_column(:post_id, :integer) do
509
509
  expect(@model).to have_index.on(:post_id)
510
510
  end
511
- SchemaPlusForeignKeys.config.auto_index = false
511
+ SchemaPlus::ForeignKeys.config.auto_index = false
512
512
  end
513
513
 
514
514
  it "should auto-index foreign keys only" do
515
- SchemaPlusForeignKeys.config.auto_index = true
515
+ SchemaPlus::ForeignKeys.config.auto_index = true
516
516
  add_column(:state, :integer) do
517
517
  expect(@model).not_to have_index.on(:state)
518
518
  end
519
- SchemaPlusForeignKeys.config.auto_index = false
519
+ SchemaPlus::ForeignKeys.config.auto_index = false
520
520
  end
521
521
 
522
522
  # MySQL creates an index on foreign key and we can't override that
523
523
  it "should allow to overwrite auto_index options in column definition", :mysql => :skip do
524
- SchemaPlusForeignKeys.config.auto_index = true
524
+ SchemaPlus::ForeignKeys.config.auto_index = true
525
525
  add_column(:post_id, :integer, :index => false) do
526
526
  expect(@model).not_to have_index.on(:post_id)
527
527
  end
528
- SchemaPlusForeignKeys.config.auto_index = false
528
+ SchemaPlus::ForeignKeys.config.auto_index = false
529
529
  end
530
530
 
531
531
  it "should use default on_update action" do
532
- SchemaPlusForeignKeys.config.on_update = :cascade
532
+ SchemaPlus::ForeignKeys.config.on_update = :cascade
533
533
  add_column(:post_id, :integer) do
534
534
  expect(@model).to reference.on(:post_id).on_update(:cascade)
535
535
  end
536
- SchemaPlusForeignKeys.config.on_update = nil
536
+ SchemaPlus::ForeignKeys.config.on_update = nil
537
537
  end
538
538
 
539
539
  it "should use default on_delete action" do
540
- SchemaPlusForeignKeys.config.on_delete = :cascade
540
+ SchemaPlus::ForeignKeys.config.on_delete = :cascade
541
541
  add_column(:post_id, :integer) do
542
542
  expect(@model).to reference.on(:post_id).on_delete(:cascade)
543
543
  end
544
- SchemaPlusForeignKeys.config.on_delete = nil
544
+ SchemaPlus::ForeignKeys.config.on_delete = nil
545
545
  end
546
546
 
547
547
  it "should allow to overwrite default actions" do
548
- SchemaPlusForeignKeys.config.on_delete = :cascade
549
- SchemaPlusForeignKeys.config.on_update = :restrict
548
+ SchemaPlus::ForeignKeys.config.on_delete = :cascade
549
+ SchemaPlus::ForeignKeys.config.on_update = :restrict
550
550
  add_column(:post_id, :integer, :foreign_key => { :on_update => :nullify, :on_delete => :nullify}) do
551
551
  expect(@model).to reference.on(:post_id).on_delete(:nullify).on_update(:nullify)
552
552
  end
553
- SchemaPlusForeignKeys.config.on_delete = nil
553
+ SchemaPlus::ForeignKeys.config.on_delete = nil
554
554
  end
555
555
 
556
556
  protected
@@ -4,7 +4,7 @@ require 'stringio'
4
4
  describe "Schema dump" do
5
5
 
6
6
  before(:all) do
7
- SchemaPlusForeignKeys.setup do |config|
7
+ SchemaPlus::ForeignKeys.setup do |config|
8
8
  config.auto_create = false
9
9
  end
10
10
  ActiveRecord::Migration.suppress_messages do
@@ -113,18 +113,85 @@ describe "Schema dump" do
113
113
  expect { dump_schema }.to_not raise_error
114
114
  end
115
115
 
116
- it "should dump constraints after the tables they reference" do
117
- expect(dump_schema).to match(%r{create_table "comments"(.|\n)*first_comment_id.*foreign_key.*comments})
118
- expect(dump_schema).to match(%r{create_table "posts"(.|\n)*first_post_id.*foreign_key.*posts})
119
- expect(dump_schema).to match(%r{create_table "posts"(.|\n)*add_foreign_key.*posts.*post_id})
120
- expect(dump_schema).to match(%r{create_table "users"(.|\n)*add_foreign_key.*users.*commenter_id})
121
- expect(dump_schema).to match(%r{create_table "users"(.|\n)*foreign_key.*users.*user_id})
116
+ ["comments", "posts", "users"].each do |table|
117
+ it "should dump constraints for table #{table.inspect} after the table definition" do
118
+ dump = dump_schema.gsub(/#[^\n*]/m, '')
119
+ expect(dump =~ %r{create_table "#{table}"}).to be < (dump =~ %r{foreign_key.*"#{table}"})
120
+ end
121
+ end
122
+
123
+ ["comments", "posts"].each do |table|
124
+ qtable = table.inspect
125
+ it "should dump comments for delayed constraint definition referencing table #{qtable}" do
126
+ expect(dump_schema).to match(%r{# foreign key references #{qtable}.*create_table #{qtable}.*add_foreign_key \S+, #{qtable}}m)
127
+ end
122
128
  end
123
129
 
124
- it "should dump comments for delayed constraint definitions" do
125
- expect(dump_schema).to match(%r{"post_id".*# foreign key references "posts"})
126
- expect(dump_schema).to match(%r{"commenter_id".*# foreign key references "users"})
127
- expect(dump_schema).to match(%r{"user_id".*# foreign key references "users"})
130
+ context 'with complicated schemas' do
131
+ before(:all) do
132
+
133
+ SchemaPlus::ForeignKeys.setup do |config|
134
+ config.auto_create = false
135
+ end
136
+ ActiveRecord::Migration.suppress_messages do
137
+ ActiveRecord::Schema.define do
138
+ connection.tables.each do |table| drop_table table, :cascade => true end
139
+
140
+ create_table :grade_systems, force: true do |t|
141
+ t.string :name
142
+ t.integer :school_id
143
+ t.integer :parent_id
144
+ t.integer :profile_id
145
+ end
146
+
147
+ create_table :schools, force: true do |t|
148
+ t.string :name
149
+ t.integer :default_grade_system_id
150
+ end
151
+
152
+ create_table :academic_years, force: true do |t|
153
+ t.string :name
154
+ t.integer :school_id
155
+ end
156
+
157
+ create_table :buildings, force: true do |t|
158
+ t.string :name
159
+ t.integer :school_id
160
+ end
161
+
162
+ create_table :profiles, force: true do |t|
163
+ t.integer :school_id
164
+ t.integer :building_id
165
+ end
166
+
167
+ end
168
+ end
169
+
170
+ class ::AcademicYear < ActiveRecord::Base ; end
171
+ class ::Building < ActiveRecord::Base ; end
172
+ class ::GradeSystem < ActiveRecord::Base ; end
173
+ class ::Profile < ActiveRecord::Base ; end
174
+ class ::School < ActiveRecord::Base ; end
175
+
176
+ ActiveRecord::Base.connection.add_foreign_key(School.table_name, GradeSystem.table_name, column: :default_grade_system_id)
177
+ ActiveRecord::Base.connection.add_foreign_key(GradeSystem.table_name, School.table_name, column: :school_id)
178
+ ActiveRecord::Base.connection.add_foreign_key(GradeSystem.table_name, GradeSystem.table_name, column: :parent_id)
179
+ ActiveRecord::Base.connection.add_foreign_key(GradeSystem.table_name, Profile.table_name, column: :profile_id)
180
+ ActiveRecord::Base.connection.add_foreign_key(Profile.table_name, Building.table_name, column: :building_id)
181
+ ActiveRecord::Base.connection.add_foreign_key(Profile.table_name, School.table_name, column: :school_id)
182
+ ActiveRecord::Base.connection.add_foreign_key(Building.table_name, School.table_name, column: :school_id)
183
+ ActiveRecord::Base.connection.add_foreign_key(AcademicYear.table_name, School.table_name, column: :school_id)
184
+ end
185
+
186
+ it "should not raise an error" do
187
+ expect { dump_schema }.to_not raise_error
188
+ end
189
+
190
+ ["buildings", "grade_systems", "profiles", "schools"].each do |table|
191
+ it "should dump constraints for table #{table.inspect} after the table definition" do
192
+ expect(dump_schema =~ %r{create_table "#{table}"}).to be < (dump_schema =~ %r{foreign_key.*"#{table}"})
193
+ end
194
+ end
128
195
  end
129
196
  end
130
197
 
@@ -77,22 +77,22 @@ describe ActiveRecord::Schema do
77
77
 
78
78
 
79
79
  def with_auto_index(value = true)
80
- old_value = SchemaPlusForeignKeys.config.auto_index
81
- SchemaPlusForeignKeys.config.auto_index = value
80
+ old_value = SchemaPlus::ForeignKeys.config.auto_index
81
+ SchemaPlus::ForeignKeys.config.auto_index = value
82
82
  begin
83
83
  yield
84
84
  ensure
85
- SchemaPlusForeignKeys.config.auto_index = old_value
85
+ SchemaPlus::ForeignKeys.config.auto_index = old_value
86
86
  end
87
87
  end
88
88
 
89
89
  def with_auto_create(value = true)
90
- old_value = SchemaPlusForeignKeys.config.auto_create
91
- SchemaPlusForeignKeys.config.auto_create = value
90
+ old_value = SchemaPlus::ForeignKeys.config.auto_create
91
+ SchemaPlus::ForeignKeys.config.auto_create = value
92
92
  begin
93
93
  yield
94
94
  ensure
95
- SchemaPlusForeignKeys.config.auto_create = old_value
95
+ SchemaPlus::ForeignKeys.config.auto_create = old_value
96
96
  end
97
97
  end
98
98