schema_plus 1.5.2 → 1.5.3
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 +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +1 -1
- data/gemfiles/rails-4.1/Gemfile.base +1 -1
- data/lib/schema_plus/active_record/column_options_handler.rb +1 -0
- data/lib/schema_plus/active_record/connection_adapters/column.rb +1 -1
- data/lib/schema_plus/active_record/connection_adapters/schema_statements.rb +1 -0
- data/lib/schema_plus/active_record/connection_adapters/table_definition.rb +2 -0
- data/lib/schema_plus/version.rb +1 -1
- data/runspecs +2 -2
- data/schema_plus.gemspec +3 -3
- data/spec/column_default_spec.rb +156 -0
- data/spec/column_spec.rb +20 -20
- data/spec/connection_spec.rb +1 -1
- data/spec/foreign_key_definition_spec.rb +3 -3
- data/spec/foreign_key_spec.rb +14 -12
- data/spec/index_definition_spec.rb +23 -23
- data/spec/index_spec.rb +34 -34
- data/spec/migration_spec.rb +132 -120
- data/spec/named_schemas_spec.rb +15 -15
- data/spec/schema_dumper_spec.rb +36 -36
- data/spec/schema_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/support/matchers/have_index.rb +20 -13
- data/spec/support/matchers/reference.rb +3 -3
- data/spec/views_spec.rb +17 -17
- metadata +9 -15
- data/spec/column_definition_spec.rb +0 -212
@@ -47,7 +47,7 @@ describe "Index definition" do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "is included in User.indexes" do
|
50
|
-
@index.
|
50
|
+
expect(@index).not_to be_nil
|
51
51
|
end
|
52
52
|
|
53
53
|
end
|
@@ -55,16 +55,16 @@ describe "Index definition" do
|
|
55
55
|
it "should correctly report supports_partial_indexes?" do
|
56
56
|
query = lambda { migration.execute "CREATE INDEX users_login_index ON users(login) WHERE deleted_at IS NULL" }
|
57
57
|
if migration.supports_partial_indexes?
|
58
|
-
query.
|
58
|
+
expect(query).not_to raise_error
|
59
59
|
else
|
60
|
-
query.
|
60
|
+
expect(query).to raise_error
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should not crash on equality test with nil" do
|
65
65
|
index = ActiveRecord::ConnectionAdapters::IndexDefinition.new(:table, :column)
|
66
66
|
expect{index == nil}.to_not raise_error
|
67
|
-
(index == nil).
|
67
|
+
expect(index == nil).to be false
|
68
68
|
end
|
69
69
|
|
70
70
|
|
@@ -85,7 +85,7 @@ describe "Index definition" do
|
|
85
85
|
migration.execute "CREATE INDEX users_login_index ON users (#{quote}login#{quote} DESC, #{quote}deleted_at#{quote} ASC)"
|
86
86
|
User.reset_column_information
|
87
87
|
index = index_definition(%w[login deleted_at])
|
88
|
-
index.orders.
|
88
|
+
expect(index.orders).to eq({"login" => :desc, "deleted_at" => :asc})
|
89
89
|
end
|
90
90
|
|
91
91
|
end
|
@@ -104,23 +104,23 @@ describe "Index definition" do
|
|
104
104
|
end
|
105
105
|
|
106
106
|
it "is included in User.indexes" do
|
107
|
-
@index.
|
107
|
+
expect(@index).not_to be_nil
|
108
108
|
end
|
109
109
|
|
110
110
|
it "is not case_sensitive" do
|
111
|
-
@index.
|
111
|
+
expect(@index).not_to be_case_sensitive
|
112
112
|
end
|
113
113
|
|
114
114
|
it "its column should not be case sensitive" do
|
115
|
-
User.columns.find{|column| column.name == "login"}.
|
115
|
+
expect(User.columns.find{|column| column.name == "login"}).not_to be_case_sensitive
|
116
116
|
end
|
117
117
|
|
118
118
|
it "defines expression" do
|
119
|
-
@index.expression.
|
119
|
+
expect(@index.expression).to eq("lower((login)::text)")
|
120
120
|
end
|
121
121
|
|
122
122
|
it "doesn't define conditions" do
|
123
|
-
@index.conditions.
|
123
|
+
expect(@index.conditions).to be_nil
|
124
124
|
end
|
125
125
|
|
126
126
|
end
|
@@ -134,19 +134,19 @@ describe "Index definition" do
|
|
134
134
|
end
|
135
135
|
|
136
136
|
it "is included in User.indexes" do
|
137
|
-
User.indexes.select { |index| index.columns == ["login"] }.
|
137
|
+
expect(User.indexes.select { |index| index.columns == ["login"] }.size).to eq(1)
|
138
138
|
end
|
139
139
|
|
140
140
|
it "is case_sensitive" do
|
141
|
-
@index.
|
141
|
+
expect(@index).to be_case_sensitive
|
142
142
|
end
|
143
143
|
|
144
144
|
it "doesn't define expression" do
|
145
|
-
@index.expression.
|
145
|
+
expect(@index.expression).to be_nil
|
146
146
|
end
|
147
147
|
|
148
148
|
it "defines conditions" do
|
149
|
-
@index.conditions.
|
149
|
+
expect(@index.conditions).to eq("(deleted_at IS NULL)")
|
150
150
|
end
|
151
151
|
|
152
152
|
end
|
@@ -159,23 +159,23 @@ describe "Index definition" do
|
|
159
159
|
end
|
160
160
|
|
161
161
|
it "exists" do
|
162
|
-
@index.
|
162
|
+
expect(@index).not_to be_nil
|
163
163
|
end
|
164
164
|
|
165
165
|
it "doesnt have columns defined" do
|
166
|
-
@index.columns.
|
166
|
+
expect(@index.columns).to be_empty
|
167
167
|
end
|
168
168
|
|
169
169
|
it "is case_sensitive" do
|
170
|
-
@index.
|
170
|
+
expect(@index).to be_case_sensitive
|
171
171
|
end
|
172
172
|
|
173
173
|
it "defines expression" do
|
174
|
-
@index.expression.
|
174
|
+
expect(@index.expression).to eq("date_part('epoch'::text, deleted_at)")
|
175
175
|
end
|
176
176
|
|
177
177
|
it "defines conditions" do
|
178
|
-
@index.conditions.
|
178
|
+
expect(@index.conditions).to eq("(deleted_at IS NULL)")
|
179
179
|
end
|
180
180
|
|
181
181
|
end
|
@@ -188,19 +188,19 @@ describe "Index definition" do
|
|
188
188
|
end
|
189
189
|
|
190
190
|
it "exists" do
|
191
|
-
@index.
|
191
|
+
expect(@index).not_to be_nil
|
192
192
|
end
|
193
193
|
|
194
194
|
it "defines kind" do
|
195
|
-
@index.kind.
|
195
|
+
expect(@index.kind).to eq("hash")
|
196
196
|
end
|
197
197
|
|
198
198
|
it "does not define expression" do
|
199
|
-
@index.expression.
|
199
|
+
expect(@index.expression).to be_nil
|
200
200
|
end
|
201
201
|
|
202
202
|
it "does not define order" do
|
203
|
-
@index.orders.
|
203
|
+
expect(@index.orders).to be_blank
|
204
204
|
end
|
205
205
|
end
|
206
206
|
|
data/spec/index_spec.rb
CHANGED
@@ -42,39 +42,39 @@ describe "index" do
|
|
42
42
|
|
43
43
|
it "should create index when called without additional options" do
|
44
44
|
add_index(:users, :login)
|
45
|
-
index_for(:login).
|
45
|
+
expect(index_for(:login)).not_to be_nil
|
46
46
|
end
|
47
47
|
|
48
48
|
it "should create unique index" do
|
49
49
|
add_index(:users, :login, :unique => true)
|
50
|
-
index_for(:login).unique.
|
50
|
+
expect(index_for(:login).unique).to eq(true)
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should assign given name" do
|
54
54
|
add_index(:users, :login, :name => 'users_login_index')
|
55
|
-
index_for(:login).name.
|
55
|
+
expect(index_for(:login).name).to eq('users_login_index')
|
56
56
|
end
|
57
57
|
|
58
58
|
unless SchemaPlusHelpers.mysql?
|
59
59
|
it "should assign order" do
|
60
60
|
add_index(:users, [:login, :deleted_at], :order => {:login => :desc, :deleted_at => :asc})
|
61
|
-
index_for([:login, :deleted_at]).orders.
|
61
|
+
expect(index_for([:login, :deleted_at]).orders).to eq({"login" => :desc, "deleted_at" => :asc})
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
context "for duplicate index" do
|
66
66
|
it "should not complain if the index is the same" do
|
67
67
|
add_index(:users, :login)
|
68
|
-
index_for(:login).
|
69
|
-
ActiveRecord::Base.logger.
|
68
|
+
expect(index_for(:login)).not_to be_nil
|
69
|
+
expect(ActiveRecord::Base.logger).to receive(:warn).with(/login.*Skipping/)
|
70
70
|
expect { add_index(:users, :login) }.to_not raise_error
|
71
|
-
index_for(:login).
|
71
|
+
expect(index_for(:login)).not_to be_nil
|
72
72
|
end
|
73
73
|
it "should complain if the index is different" do
|
74
74
|
add_index(:users, :login, :unique => true)
|
75
|
-
index_for(:login).
|
75
|
+
expect(index_for(:login)).not_to be_nil
|
76
76
|
expect { add_index(:users, :login) }.to raise_error
|
77
|
-
index_for(:login).
|
77
|
+
expect(index_for(:login)).not_to be_nil
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -82,34 +82,34 @@ describe "index" do
|
|
82
82
|
|
83
83
|
it "should assign conditions" do
|
84
84
|
add_index(:users, :login, :conditions => 'deleted_at IS NULL')
|
85
|
-
index_for(:login).conditions.
|
85
|
+
expect(index_for(:login).conditions).to eq('(deleted_at IS NULL)')
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should assign expression, conditions and kind" do
|
89
89
|
add_index(:users, :expression => "USING hash (upper(login)) WHERE deleted_at IS NULL", :name => 'users_login_index')
|
90
90
|
@index = User.indexes.detect { |i| i.expression.present? }
|
91
|
-
@index.expression.
|
92
|
-
@index.conditions.
|
93
|
-
@index.kind.
|
91
|
+
expect(@index.expression).to eq("upper((login)::text)")
|
92
|
+
expect(@index.conditions).to eq("(deleted_at IS NULL)")
|
93
|
+
expect(@index.kind).to eq("hash")
|
94
94
|
end
|
95
95
|
|
96
96
|
it "should allow to specify expression, conditions and kind separately" do
|
97
97
|
add_index(:users, :kind => "hash", :expression => "upper(login)", :conditions => "deleted_at IS NULL", :name => 'users_login_index')
|
98
98
|
@index = User.indexes.detect { |i| i.expression.present? }
|
99
|
-
@index.expression.
|
100
|
-
@index.conditions.
|
101
|
-
@index.kind.
|
99
|
+
expect(@index.expression).to eq("upper((login)::text)")
|
100
|
+
expect(@index.conditions).to eq("(deleted_at IS NULL)")
|
101
|
+
expect(@index.kind).to eq("hash")
|
102
102
|
end
|
103
103
|
|
104
104
|
it "should allow to specify kind" do
|
105
105
|
add_index(:users, :login, :kind => "hash")
|
106
|
-
index_for(:login).kind.
|
106
|
+
expect(index_for(:login).kind).to eq('hash')
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should allow to specify actual expression only" do
|
110
110
|
add_index(:users, :expression => "upper(login)", :name => 'users_login_index')
|
111
111
|
@index = User.indexes.detect { |i| i.name == 'users_login_index' }
|
112
|
-
@index.expression.
|
112
|
+
expect(@index.expression).to eq("upper((login)::text)")
|
113
113
|
end
|
114
114
|
|
115
115
|
it "should raise if no column given and expression is missing" do
|
@@ -151,58 +151,58 @@ describe "index" do
|
|
151
151
|
|
152
152
|
it "removes index by column name (symbols)" do
|
153
153
|
add_index :users, :login
|
154
|
-
User.indexes.length.
|
154
|
+
expect(User.indexes.length).to eq(1)
|
155
155
|
remove_index :users, :login
|
156
|
-
User.indexes.length.
|
156
|
+
expect(User.indexes.length).to eq(0)
|
157
157
|
end
|
158
158
|
|
159
159
|
it "removes index by column name (symbols)" do
|
160
160
|
add_index :users, :login
|
161
|
-
User.indexes.length.
|
161
|
+
expect(User.indexes.length).to eq(1)
|
162
162
|
remove_index 'users', 'login'
|
163
|
-
User.indexes.length.
|
163
|
+
expect(User.indexes.length).to eq(0)
|
164
164
|
end
|
165
165
|
|
166
166
|
it "removes multi-column index by column names (symbols)" do
|
167
167
|
add_index :users, [:login, :deleted_at]
|
168
|
-
User.indexes.length.
|
168
|
+
expect(User.indexes.length).to eq(1)
|
169
169
|
remove_index :users, [:login, :deleted_at]
|
170
|
-
User.indexes.length.
|
170
|
+
expect(User.indexes.length).to eq(0)
|
171
171
|
end
|
172
172
|
|
173
173
|
it "removes multi-column index by column names (strings)" do
|
174
174
|
add_index 'users', [:login, :deleted_at]
|
175
|
-
User.indexes.length.
|
175
|
+
expect(User.indexes.length).to eq(1)
|
176
176
|
remove_index 'users', ['login', 'deleted_at']
|
177
|
-
User.indexes.length.
|
177
|
+
expect(User.indexes.length).to eq(0)
|
178
178
|
end
|
179
179
|
|
180
180
|
it "removes index using column option" do
|
181
181
|
add_index :users, :login
|
182
|
-
User.indexes.length.
|
182
|
+
expect(User.indexes.length).to eq(1)
|
183
183
|
remove_index :users, column: :login
|
184
|
-
User.indexes.length.
|
184
|
+
expect(User.indexes.length).to eq(0)
|
185
185
|
end
|
186
186
|
|
187
187
|
it "removes index if_exists" do
|
188
188
|
add_index :users, :login
|
189
|
-
User.indexes.length.
|
189
|
+
expect(User.indexes.length).to eq(1)
|
190
190
|
remove_index :users, :login, :if_exists => true
|
191
|
-
User.indexes.length.
|
191
|
+
expect(User.indexes.length).to eq(0)
|
192
192
|
end
|
193
193
|
|
194
194
|
it "removes multi-column index if exists" do
|
195
195
|
add_index :users, [:login, :deleted_at]
|
196
|
-
User.indexes.length.
|
196
|
+
expect(User.indexes.length).to eq(1)
|
197
197
|
remove_index :users, [:login, :deleted_at], :if_exists => true
|
198
|
-
User.indexes.length.
|
198
|
+
expect(User.indexes.length).to eq(0)
|
199
199
|
end
|
200
200
|
|
201
201
|
it "removes index if_exists using column option" do
|
202
202
|
add_index :users, :login
|
203
|
-
User.indexes.length.
|
203
|
+
expect(User.indexes.length).to eq(1)
|
204
204
|
remove_index :users, column: :login, :if_exists => true
|
205
|
-
User.indexes.length.
|
205
|
+
expect(User.indexes.length).to eq(0)
|
206
206
|
end
|
207
207
|
|
208
208
|
it "raises exception if doesn't exist" do
|
data/spec/migration_spec.rb
CHANGED
@@ -47,126 +47,175 @@ describe ActiveRecord::Migration do
|
|
47
47
|
t.boolean :bool, :default => true
|
48
48
|
end
|
49
49
|
}.to_not raise_error
|
50
|
-
@model.create.reload.bool.
|
50
|
+
expect(@model.create.reload.bool).to be true
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should create auto foreign keys" do
|
54
54
|
recreate_table(@model) do |t|
|
55
55
|
t.integer :user_id
|
56
56
|
end
|
57
|
-
@model.
|
57
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
58
58
|
end
|
59
59
|
|
60
60
|
it "should create explicit foreign key with default reference" do
|
61
61
|
recreate_table(@model) do |t|
|
62
62
|
t.integer :user, :foreign_key => true
|
63
63
|
end
|
64
|
-
@model.
|
64
|
+
expect(@model).to reference(:users, :id).on(:user)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "should create foreign key with different reference" do
|
68
68
|
recreate_table(@model) do |t|
|
69
69
|
t.integer :author_id, :foreign_key => { :references => :users }
|
70
70
|
end
|
71
|
-
@model.
|
71
|
+
expect(@model).to reference(:users, :id).on(:author_id)
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should create foreign key with different reference using shortcut" do
|
75
75
|
recreate_table(@model) do |t|
|
76
76
|
t.integer :author_id, :references => :users
|
77
77
|
end
|
78
|
-
@model.
|
78
|
+
expect(@model).to reference(:users, :id).on(:author_id)
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should create foreign key with default name" do
|
82
82
|
recreate_table @model do |t|
|
83
83
|
t.integer :user_id, :foreign_key => true
|
84
84
|
end
|
85
|
-
@model.
|
85
|
+
expect(@model).to reference(:users, :id).with_name("fk_#{@model.table_name}_user_id")
|
86
86
|
end
|
87
87
|
|
88
88
|
it "should create foreign key with specified name" do
|
89
89
|
recreate_table @model do |t|
|
90
90
|
t.integer :user_id, :foreign_key => { :name => "wugga" }
|
91
91
|
end
|
92
|
-
@model.
|
92
|
+
expect(@model).to reference(:users, :id).with_name("wugga")
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should suppress foreign key" do
|
96
96
|
recreate_table(@model) do |t|
|
97
97
|
t.integer :member_id, :foreign_key => false
|
98
98
|
end
|
99
|
-
@model.
|
99
|
+
expect(@model).not_to reference.on(:member_id)
|
100
100
|
end
|
101
101
|
|
102
102
|
it "should suppress foreign key using shortcut" do
|
103
103
|
recreate_table(@model) do |t|
|
104
104
|
t.integer :member_id, :references => nil
|
105
105
|
end
|
106
|
-
@model.
|
106
|
+
expect(@model).not_to reference.on(:member_id)
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should create foreign key using t.belongs_to" do
|
110
110
|
recreate_table(@model) do |t|
|
111
111
|
t.belongs_to :user
|
112
112
|
end
|
113
|
-
@model.
|
113
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
114
114
|
end
|
115
115
|
|
116
116
|
it "should not create foreign key using t.belongs_to with :polymorphic => true" do
|
117
117
|
recreate_table(@model) do |t|
|
118
118
|
t.belongs_to :user, :polymorphic => true
|
119
119
|
end
|
120
|
-
@model.
|
120
|
+
expect(@model).not_to reference(:users, :id).on(:user_id)
|
121
121
|
end
|
122
122
|
|
123
123
|
it "should create foreign key using t.references" do
|
124
124
|
recreate_table(@model) do |t|
|
125
125
|
t.references :user
|
126
126
|
end
|
127
|
-
@model.
|
127
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
128
128
|
end
|
129
129
|
|
130
130
|
it "should not create foreign key using t.references with :foreign_key => false" do
|
131
131
|
recreate_table(@model) do |t|
|
132
132
|
t.references :user, :foreign_key => false
|
133
133
|
end
|
134
|
-
@model.
|
134
|
+
expect(@model).not_to reference(:users, :id).on(:user_id)
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should not create foreign key using t.references with :polymorphic => true" do
|
138
138
|
recreate_table(@model) do |t|
|
139
139
|
t.references :user, :polymorphic => true
|
140
140
|
end
|
141
|
-
@model.
|
141
|
+
expect(@model).not_to reference(:users, :id).on(:user_id)
|
142
142
|
end
|
143
143
|
|
144
144
|
it "should create foreign key to the same table on parent_id" do
|
145
145
|
recreate_table(@model) do |t|
|
146
146
|
t.integer :parent_id
|
147
147
|
end
|
148
|
-
@model.
|
148
|
+
expect(@model).to reference(@model.table_name, :id).on(:parent_id)
|
149
149
|
end
|
150
150
|
|
151
151
|
it "should create an index if specified on column" do
|
152
152
|
recreate_table(@model) do |t|
|
153
153
|
t.integer :state, :index => true
|
154
154
|
end
|
155
|
-
@model.
|
155
|
+
expect(@model).to have_index.on(:state)
|
156
156
|
end
|
157
157
|
|
158
158
|
it "should create a unique index if specified on column" do
|
159
159
|
recreate_table(@model) do |t|
|
160
160
|
t.integer :state, :index => { :unique => true }
|
161
161
|
end
|
162
|
-
@model.
|
162
|
+
expect(@model).to have_unique_index.on(:state)
|
163
163
|
end
|
164
164
|
|
165
165
|
it "should create a unique index if specified on column using shorthand" do
|
166
166
|
recreate_table(@model) do |t|
|
167
167
|
t.integer :state, :index => :unique
|
168
168
|
end
|
169
|
-
@model.
|
169
|
+
expect(@model).to have_unique_index.on(:state)
|
170
|
+
end
|
171
|
+
|
172
|
+
[:references, :belongs_to].each do |reftype|
|
173
|
+
|
174
|
+
context "when define #{reftype}" do
|
175
|
+
|
176
|
+
before(:each) do
|
177
|
+
@model = Comment
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should create foreign key" do
|
181
|
+
create_reference(reftype, :post)
|
182
|
+
expect(@model).to reference(:posts, :id).on(:post_id)
|
183
|
+
end
|
184
|
+
|
185
|
+
it "should not create a foreign_key if polymorphic" do
|
186
|
+
create_reference(reftype, :post, :polymorphic => true)
|
187
|
+
expect(@model).not_to reference(:posts, :id).on(:post_id)
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should create an index implicitly" do
|
191
|
+
create_reference(reftype, :post)
|
192
|
+
expect(@model).to have_index.on(:post_id)
|
193
|
+
end
|
194
|
+
|
195
|
+
it "should create exactly one index explicitly (#157)" do
|
196
|
+
create_reference(reftype, :post, :index => true)
|
197
|
+
expect(@model).to have_index.on(:post_id)
|
198
|
+
end
|
199
|
+
|
200
|
+
it "should respect :unique (#157)" do
|
201
|
+
create_reference(reftype, :post, :index => :unique)
|
202
|
+
expect(@model).to have_unique_index.on(:post_id)
|
203
|
+
end
|
204
|
+
|
205
|
+
it "should create a two-column index if polymophic and index requested" do
|
206
|
+
create_reference(reftype, :post, :polymorphic => true, :index => true)
|
207
|
+
expect(@model).to have_index.on([:post_id, :post_type])
|
208
|
+
end unless ::ActiveRecord::VERSION::MAJOR.to_i < 4
|
209
|
+
|
210
|
+
protected
|
211
|
+
|
212
|
+
def create_reference(reftype, column_name, *args)
|
213
|
+
recreate_table(@model) do |t|
|
214
|
+
t.send reftype, column_name, *args
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
170
219
|
end
|
171
220
|
|
172
221
|
if SchemaPlusHelpers.mysql?
|
@@ -176,7 +225,7 @@ describe ActiveRecord::Migration do
|
|
176
225
|
t.string :bar, :index => { :with => :foo, :length => { :foo => 8, :bar => 12 }}
|
177
226
|
end
|
178
227
|
index = @model.indexes.first
|
179
|
-
Hash[index.columns.zip(index.lengths.map(&:to_i))].
|
228
|
+
expect(Hash[index.columns.zip(index.lengths.map(&:to_i))]).to eq({ "foo" => 8, "bar" => 12})
|
180
229
|
end
|
181
230
|
end
|
182
231
|
|
@@ -185,7 +234,7 @@ describe ActiveRecord::Migration do
|
|
185
234
|
t.integer :state
|
186
235
|
t.index :state
|
187
236
|
end
|
188
|
-
@model.
|
237
|
+
expect(@model).to have_index.on(:state)
|
189
238
|
end
|
190
239
|
|
191
240
|
it "should create a unique index if specified explicitly" do
|
@@ -193,7 +242,7 @@ describe ActiveRecord::Migration do
|
|
193
242
|
t.integer :state
|
194
243
|
t.index :state, :unique => true
|
195
244
|
end
|
196
|
-
@model.
|
245
|
+
expect(@model).to have_unique_index.on(:state)
|
197
246
|
end
|
198
247
|
|
199
248
|
it "should create a multiple-column index if specified" do
|
@@ -201,7 +250,7 @@ describe ActiveRecord::Migration do
|
|
201
250
|
t.integer :city
|
202
251
|
t.integer :state, :index => { :with => :city }
|
203
252
|
end
|
204
|
-
@model.
|
253
|
+
expect(@model).to have_index.on([:state, :city])
|
205
254
|
end
|
206
255
|
|
207
256
|
it "should auto-index foreign keys only" do
|
@@ -210,9 +259,9 @@ describe ActiveRecord::Migration do
|
|
210
259
|
t.integer :application_id, :references => nil
|
211
260
|
t.integer :state
|
212
261
|
end
|
213
|
-
@model.
|
214
|
-
@model.
|
215
|
-
@model.
|
262
|
+
expect(@model).to have_index.on(:user_id)
|
263
|
+
expect(@model).not_to have_index.on(:application_id)
|
264
|
+
expect(@model).not_to have_index.on(:state)
|
216
265
|
end
|
217
266
|
|
218
267
|
it "should override foreign key auto_create positively" do
|
@@ -220,7 +269,7 @@ describe ActiveRecord::Migration do
|
|
220
269
|
recreate_table @model, :foreign_keys => {:auto_create => true} do |t|
|
221
270
|
t.integer :user_id
|
222
271
|
end
|
223
|
-
@model.
|
272
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
224
273
|
end
|
225
274
|
end
|
226
275
|
|
@@ -229,7 +278,7 @@ describe ActiveRecord::Migration do
|
|
229
278
|
recreate_table @model, :foreign_keys => {:auto_create => false} do |t|
|
230
279
|
t.integer :user_id
|
231
280
|
end
|
232
|
-
@model.
|
281
|
+
expect(@model).not_to reference.on(:user_id)
|
233
282
|
end
|
234
283
|
end
|
235
284
|
|
@@ -238,7 +287,7 @@ describe ActiveRecord::Migration do
|
|
238
287
|
recreate_table @model, :foreign_keys => {:auto_index => true} do |t|
|
239
288
|
t.integer :user_id
|
240
289
|
end
|
241
|
-
@model.
|
290
|
+
expect(@model).to have_index.on(:user_id)
|
242
291
|
end
|
243
292
|
end
|
244
293
|
|
@@ -268,28 +317,28 @@ describe ActiveRecord::Migration do
|
|
268
317
|
recreate_table @model do |t|
|
269
318
|
t.integer :user_id, :foreign_key => { :on_update => action }
|
270
319
|
end
|
271
|
-
@model.
|
320
|
+
expect(@model).to reference.on(:user_id).on_update(action)
|
272
321
|
end
|
273
322
|
|
274
323
|
it "should create and detect on_update #{action.inspect} using shortcut" do
|
275
324
|
recreate_table @model do |t|
|
276
325
|
t.integer :user_id, :on_update => action
|
277
326
|
end
|
278
|
-
@model.
|
327
|
+
expect(@model).to reference.on(:user_id).on_update(action)
|
279
328
|
end
|
280
329
|
|
281
330
|
it "should create and detect on_delete #{action.inspect}" do
|
282
331
|
recreate_table @model do |t|
|
283
332
|
t.integer :user_id, :foreign_key => { :on_delete => action }
|
284
333
|
end
|
285
|
-
@model.
|
334
|
+
expect(@model).to reference.on(:user_id).on_delete(action)
|
286
335
|
end
|
287
336
|
|
288
337
|
it "should create and detect on_delete #{action.inspect} using shortcut" do
|
289
338
|
recreate_table @model do |t|
|
290
339
|
t.integer :user_id, :on_delete => action
|
291
340
|
end
|
292
|
-
@model.
|
341
|
+
expect(@model).to reference.on(:user_id).on_delete(action)
|
293
342
|
end
|
294
343
|
end
|
295
344
|
|
@@ -298,7 +347,7 @@ describe ActiveRecord::Migration do
|
|
298
347
|
recreate_table @model do |t|
|
299
348
|
t.integer :user_id, :on_delete => :cascade, :deferrable => status
|
300
349
|
end
|
301
|
-
@model.
|
350
|
+
expect(@model).to reference.on(:user_id).deferrable(status)
|
302
351
|
end
|
303
352
|
end unless SchemaPlusHelpers.mysql?
|
304
353
|
|
@@ -307,7 +356,7 @@ describe ActiveRecord::Migration do
|
|
307
356
|
recreate_table @model do |t|
|
308
357
|
t.integer :user_id
|
309
358
|
end
|
310
|
-
@model.
|
359
|
+
expect(@model).to reference.on(:user_id).on_delete(:cascade)
|
311
360
|
end
|
312
361
|
end
|
313
362
|
|
@@ -316,7 +365,7 @@ describe ActiveRecord::Migration do
|
|
316
365
|
recreate_table @model, :foreign_keys => {:on_update => :restrict} do |t|
|
317
366
|
t.integer :user_id
|
318
367
|
end
|
319
|
-
@model.
|
368
|
+
expect(@model).to reference.on(:user_id).on_update(:restrict)
|
320
369
|
end
|
321
370
|
end
|
322
371
|
|
@@ -325,7 +374,7 @@ describe ActiveRecord::Migration do
|
|
325
374
|
recreate_table @model, :foreign_keys => {:on_delete => :restrict} do |t|
|
326
375
|
t.integer :user_id
|
327
376
|
end
|
328
|
-
@model.
|
377
|
+
expect(@model).to reference.on(:user_id).on_delete(:restrict)
|
329
378
|
end
|
330
379
|
end
|
331
380
|
|
@@ -334,7 +383,7 @@ describe ActiveRecord::Migration do
|
|
334
383
|
recreate_table @model, :foreign_keys => {:on_update => :restrict} do |t|
|
335
384
|
t.integer :user_id, :foreign_key => { :on_update => :set_null }
|
336
385
|
end
|
337
|
-
@model.
|
386
|
+
expect(@model).to reference.on(:user_id).on_update(:set_null)
|
338
387
|
end
|
339
388
|
end
|
340
389
|
|
@@ -343,7 +392,7 @@ describe ActiveRecord::Migration do
|
|
343
392
|
recreate_table @model, :foreign_keys => {:on_delete => :restrict} do |t|
|
344
393
|
t.integer :user_id, :foreign_key => { :on_delete => :set_null }
|
345
394
|
end
|
346
|
-
@model.
|
395
|
+
expect(@model).to reference.on(:user_id).on_delete(:set_null)
|
347
396
|
end
|
348
397
|
end
|
349
398
|
|
@@ -369,7 +418,7 @@ describe ActiveRecord::Migration do
|
|
369
418
|
recreate_table @model, :foreign_keys => {:auto_index => false} do |t|
|
370
419
|
t.integer :user_id
|
371
420
|
end
|
372
|
-
@model.
|
421
|
+
expect(@model).not_to have_index.on(:user_id)
|
373
422
|
end
|
374
423
|
end
|
375
424
|
|
@@ -378,7 +427,7 @@ describe ActiveRecord::Migration do
|
|
378
427
|
recreate_table @model do |t|
|
379
428
|
t.integer :user_id, :index => false
|
380
429
|
end
|
381
|
-
@model.
|
430
|
+
expect(@model).not_to have_index.on(:user_id)
|
382
431
|
end
|
383
432
|
end
|
384
433
|
|
@@ -397,7 +446,7 @@ describe ActiveRecord::Migration do
|
|
397
446
|
change_table(@model, :bulk => bulk) do |t|
|
398
447
|
t.integer :state, :index => true
|
399
448
|
end
|
400
|
-
@model.
|
449
|
+
expect(@model).to have_index.on(:state)
|
401
450
|
end
|
402
451
|
|
403
452
|
unless SchemaPlusHelpers.sqlite3?
|
@@ -406,13 +455,13 @@ describe ActiveRecord::Migration do
|
|
406
455
|
change_table(@model, :bulk => bulk) do |t|
|
407
456
|
t.integer :user_id
|
408
457
|
end
|
409
|
-
@model.
|
458
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
410
459
|
end
|
411
460
|
|
412
461
|
context "migrate down" do
|
413
462
|
it "should remove a foreign key constraint"+suffix do
|
414
463
|
Comment.reset_column_information
|
415
|
-
Comment.
|
464
|
+
expect(Comment).to reference(:users, :id).on(:user_id)
|
416
465
|
migration = Class.new ::ActiveRecord::Migration do
|
417
466
|
define_method(:change) {
|
418
467
|
change_table("comments", :bulk => bulk) do |t|
|
@@ -424,7 +473,7 @@ describe ActiveRecord::Migration do
|
|
424
473
|
migration.migrate(:down)
|
425
474
|
end
|
426
475
|
Comment.reset_column_information
|
427
|
-
Comment.
|
476
|
+
expect(Comment).not_to reference(:users, :id).on(:user_id)
|
428
477
|
end
|
429
478
|
end if ActiveRecord::VERSION::MAJOR >= 4
|
430
479
|
|
@@ -432,14 +481,14 @@ describe ActiveRecord::Migration do
|
|
432
481
|
change_table(@model, :bulk => bulk) do |t|
|
433
482
|
t.references :user
|
434
483
|
end
|
435
|
-
@model.
|
484
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
436
485
|
end
|
437
486
|
|
438
487
|
it "should create a foreign key constraint using :belongs_to"+suffix do
|
439
488
|
change_table(@model, :bulk => bulk) do |t|
|
440
489
|
t.belongs_to :user
|
441
490
|
end
|
442
|
-
@model.
|
491
|
+
expect(@model).to reference(:users, :id).on(:user_id)
|
443
492
|
end
|
444
493
|
end
|
445
494
|
end
|
@@ -456,87 +505,87 @@ describe ActiveRecord::Migration do
|
|
456
505
|
|
457
506
|
it "should create an index" do
|
458
507
|
add_column(:slug, :string, :index => true) do
|
459
|
-
@model.
|
508
|
+
expect(@model).to have_index.on(:slug)
|
460
509
|
end
|
461
510
|
end
|
462
511
|
|
463
512
|
it "should create foreign key" do
|
464
513
|
add_column(:post_id, :integer) do
|
465
|
-
@model.
|
514
|
+
expect(@model).to reference(:posts, :id).on(:post_id)
|
466
515
|
end
|
467
516
|
end
|
468
517
|
|
469
518
|
it "should create foreign key to explicitly given table" do
|
470
519
|
add_column(:author_id, :integer, :foreign_key => { :references => :users }) do
|
471
|
-
@model.
|
520
|
+
expect(@model).to reference(:users, :id).on(:author_id)
|
472
521
|
end
|
473
522
|
end
|
474
523
|
|
475
524
|
it "should create foreign key to explicitly given table using shortcut" do
|
476
525
|
add_column(:author_id, :integer, :references => :users) do
|
477
|
-
@model.
|
526
|
+
expect(@model).to reference(:users, :id).on(:author_id)
|
478
527
|
end
|
479
528
|
end
|
480
529
|
|
481
530
|
it "should create foreign key to explicitly given table and column name" do
|
482
531
|
add_column(:author_login, :string, :foreign_key => { :references => [:users, :login]}) do
|
483
|
-
@model.
|
532
|
+
expect(@model).to reference(:users, :login).on(:author_login)
|
484
533
|
end
|
485
534
|
end
|
486
535
|
|
487
536
|
it "should create foreign key to the same table on parent_id" do
|
488
537
|
add_column(:parent_id, :integer) do
|
489
|
-
@model.
|
538
|
+
expect(@model).to reference(@model.table_name, :id).on(:parent_id)
|
490
539
|
end
|
491
540
|
end
|
492
541
|
|
493
542
|
it "shouldn't create foreign key if column doesn't look like foreign key" do
|
494
543
|
add_column(:views_count, :integer) do
|
495
|
-
@model.
|
544
|
+
expect(@model).not_to reference.on(:views_count)
|
496
545
|
end
|
497
546
|
end
|
498
547
|
|
499
548
|
it "shouldn't create foreign key if specified explicitly" do
|
500
549
|
add_column(:post_id, :integer, :foreign_key => false) do
|
501
|
-
@model.
|
550
|
+
expect(@model).not_to reference.on(:post_id)
|
502
551
|
end
|
503
552
|
end
|
504
553
|
|
505
554
|
it "shouldn't create foreign key if specified explicitly by shorthand" do
|
506
555
|
add_column(:post_id, :integer, :references => nil) do
|
507
|
-
@model.
|
556
|
+
expect(@model).not_to reference.on(:post_id)
|
508
557
|
end
|
509
558
|
end
|
510
559
|
|
511
560
|
it "should create an index if specified" do
|
512
561
|
add_column(:post_id, :integer, :index => true) do
|
513
|
-
@model.
|
562
|
+
expect(@model).to have_index.on(:post_id)
|
514
563
|
end
|
515
564
|
end
|
516
565
|
|
517
566
|
it "should create a unique index if specified" do
|
518
567
|
add_column(:post_id, :integer, :index => { :unique => true }) do
|
519
|
-
@model.
|
568
|
+
expect(@model).to have_unique_index.on(:post_id)
|
520
569
|
end
|
521
570
|
end
|
522
571
|
|
523
572
|
it "should create a unique index if specified by shorthand" do
|
524
573
|
add_column(:post_id, :integer, :index => :unique) do
|
525
|
-
@model.
|
574
|
+
expect(@model).to have_unique_index.on(:post_id)
|
526
575
|
end
|
527
576
|
end
|
528
577
|
|
529
578
|
it "should allow custom name for index" do
|
530
579
|
index_name = 'comments_post_id_unique_index'
|
531
580
|
add_column(:post_id, :integer, :index => { :unique => true, :name => index_name }) do
|
532
|
-
@model.
|
581
|
+
expect(@model).to have_unique_index(:name => index_name).on(:post_id)
|
533
582
|
end
|
534
583
|
end
|
535
584
|
|
536
585
|
it "should auto-index if specified in global options" do
|
537
586
|
SchemaPlus.config.foreign_keys.auto_index = true
|
538
587
|
add_column(:post_id, :integer) do
|
539
|
-
@model.
|
588
|
+
expect(@model).to have_index.on(:post_id)
|
540
589
|
end
|
541
590
|
SchemaPlus.config.foreign_keys.auto_index = false
|
542
591
|
end
|
@@ -544,7 +593,7 @@ describe ActiveRecord::Migration do
|
|
544
593
|
it "should auto-index foreign keys only" do
|
545
594
|
SchemaPlus.config.foreign_keys.auto_index = true
|
546
595
|
add_column(:state, :integer) do
|
547
|
-
@model.
|
596
|
+
expect(@model).not_to have_index.on(:state)
|
548
597
|
end
|
549
598
|
SchemaPlus.config.foreign_keys.auto_index = false
|
550
599
|
end
|
@@ -555,7 +604,7 @@ describe ActiveRecord::Migration do
|
|
555
604
|
# MySQL creates an index on foreign by default
|
556
605
|
# and we can do nothing with that
|
557
606
|
unless SchemaPlusHelpers.mysql?
|
558
|
-
@model.
|
607
|
+
expect(@model).not_to have_index.on(:post_id)
|
559
608
|
end
|
560
609
|
end
|
561
610
|
SchemaPlus.config.foreign_keys.auto_index = false
|
@@ -564,7 +613,7 @@ describe ActiveRecord::Migration do
|
|
564
613
|
it "should use default on_update action" do
|
565
614
|
SchemaPlus.config.foreign_keys.on_update = :cascade
|
566
615
|
add_column(:post_id, :integer) do
|
567
|
-
@model.
|
616
|
+
expect(@model).to reference.on(:post_id).on_update(:cascade)
|
568
617
|
end
|
569
618
|
SchemaPlus.config.foreign_keys.on_update = nil
|
570
619
|
end
|
@@ -572,7 +621,7 @@ describe ActiveRecord::Migration do
|
|
572
621
|
it "should use default on_delete action" do
|
573
622
|
SchemaPlus.config.foreign_keys.on_delete = :cascade
|
574
623
|
add_column(:post_id, :integer) do
|
575
|
-
@model.
|
624
|
+
expect(@model).to reference.on(:post_id).on_delete(:cascade)
|
576
625
|
end
|
577
626
|
SchemaPlus.config.foreign_keys.on_delete = nil
|
578
627
|
end
|
@@ -581,7 +630,7 @@ describe ActiveRecord::Migration do
|
|
581
630
|
SchemaPlus.config.foreign_keys.on_delete = :cascade
|
582
631
|
SchemaPlus.config.foreign_keys.on_update = :restrict
|
583
632
|
add_column(:post_id, :integer, :foreign_key => { :on_update => :set_null, :on_delete => :set_null}) do
|
584
|
-
@model.
|
633
|
+
expect(@model).to reference.on(:post_id).on_delete(:set_null).on_update(:set_null)
|
585
634
|
end
|
586
635
|
SchemaPlus.config.foreign_keys.on_delete = nil
|
587
636
|
end
|
@@ -599,43 +648,6 @@ describe ActiveRecord::Migration do
|
|
599
648
|
|
600
649
|
end
|
601
650
|
|
602
|
-
context "when add reference" do
|
603
|
-
|
604
|
-
before(:each) do
|
605
|
-
@model = Comment
|
606
|
-
end
|
607
|
-
|
608
|
-
it "should create foreign key" do
|
609
|
-
add_reference(:post) do
|
610
|
-
@model.should reference(:posts, :id).on(:post_id)
|
611
|
-
end
|
612
|
-
end
|
613
|
-
|
614
|
-
it "should not create a foreign_key if polymorphic" do
|
615
|
-
add_reference(:post, :polymorphic => true) do
|
616
|
-
@model.should_not reference(:posts, :id).on(:post_id)
|
617
|
-
end
|
618
|
-
end
|
619
|
-
|
620
|
-
it "should create a two-column index if polymophic and index requested" do
|
621
|
-
add_reference(:post, :polymorphic => true, :index => true) do
|
622
|
-
@model.should have_index.on([:post_id, :post_type])
|
623
|
-
end
|
624
|
-
end
|
625
|
-
|
626
|
-
|
627
|
-
protected
|
628
|
-
def add_reference(column_name, *args)
|
629
|
-
table = @model.table_name
|
630
|
-
ActiveRecord::Migration.suppress_messages do
|
631
|
-
ActiveRecord::Migration.add_reference(table, column_name, *args)
|
632
|
-
@model.reset_column_information
|
633
|
-
yield if block_given?
|
634
|
-
ActiveRecord::Migration.remove_column(table, "#{column_name}_id")
|
635
|
-
end
|
636
|
-
end
|
637
|
-
|
638
|
-
end unless ::ActiveRecord::VERSION::MAJOR.to_i < 4
|
639
651
|
|
640
652
|
context "when column is changed" do
|
641
653
|
|
@@ -645,7 +657,7 @@ describe ActiveRecord::Migration do
|
|
645
657
|
|
646
658
|
it "should create foreign key" do
|
647
659
|
change_column :user, :string, :foreign_key => { :references => [:users, :login] }
|
648
|
-
@model.
|
660
|
+
expect(@model).to reference(:users, :login).on(:user)
|
649
661
|
end
|
650
662
|
|
651
663
|
context "and initially references to users table" do
|
@@ -657,39 +669,39 @@ describe ActiveRecord::Migration do
|
|
657
669
|
end
|
658
670
|
|
659
671
|
it "should have foreign key" do
|
660
|
-
@model.
|
672
|
+
expect(@model).to reference(:users)
|
661
673
|
end
|
662
674
|
|
663
675
|
it "should drop foreign key if it is no longer valid" do
|
664
676
|
change_column :user_id, :integer, :foreign_key => { :references => :members }
|
665
|
-
@model.
|
677
|
+
expect(@model).not_to reference(:users)
|
666
678
|
end
|
667
679
|
|
668
680
|
it "should drop foreign key if requested to do so" do
|
669
681
|
change_column :user_id, :integer, :foreign_key => { :references => nil }
|
670
|
-
@model.
|
682
|
+
expect(@model).not_to reference(:users)
|
671
683
|
end
|
672
684
|
|
673
685
|
it "should remove auto-created index if foreign key is removed" do
|
674
|
-
@model.
|
686
|
+
expect(@model).to have_index.on(:user_id) # sanity check that index was auto-created
|
675
687
|
change_column :user_id, :integer, :foreign_key => { :references => nil }
|
676
|
-
@model.
|
688
|
+
expect(@model).not_to have_index.on(:user_id)
|
677
689
|
end
|
678
690
|
|
679
691
|
it "should reference pointed table afterwards if new one is created" do
|
680
692
|
change_column :user_id, :integer, :foreign_key => { :references => :members }
|
681
|
-
@model.
|
693
|
+
expect(@model).to reference(:members)
|
682
694
|
end
|
683
695
|
|
684
696
|
it "should maintain foreign key if it's unaffected by change" do
|
685
697
|
change_column :user_id, :integer, :default => 0
|
686
|
-
@model.
|
698
|
+
expect(@model).to reference(:users)
|
687
699
|
end
|
688
700
|
|
689
701
|
it "should maintain foreign key if it's unaffected by change, even if auto_index is off" do
|
690
702
|
with_fk_config(:auto_create => false) do
|
691
703
|
change_column :user_id, :integer, :default => 0
|
692
|
-
@model.
|
704
|
+
expect(@model).to reference(:users)
|
693
705
|
end
|
694
706
|
end
|
695
707
|
|
@@ -703,7 +715,7 @@ describe ActiveRecord::Migration do
|
|
703
715
|
end
|
704
716
|
|
705
717
|
it "should create the index" do
|
706
|
-
@model.
|
718
|
+
expect(@model).to have_index.on(:user_id)
|
707
719
|
end
|
708
720
|
|
709
721
|
it "adding foreign key should not fail due to attempt to auto-create existing index" do
|
@@ -731,15 +743,15 @@ describe ActiveRecord::Migration do
|
|
731
743
|
end
|
732
744
|
|
733
745
|
it "should remove a foreign key" do
|
734
|
-
@model.
|
746
|
+
expect(@model).to reference(:posts)
|
735
747
|
remove_column(:post_id)
|
736
|
-
@model.
|
748
|
+
expect(@model).not_to reference(:posts)
|
737
749
|
end
|
738
750
|
|
739
751
|
it "should remove an index" do
|
740
|
-
@model.
|
752
|
+
expect(@model).to have_index.on(:post_id)
|
741
753
|
remove_column(:post_id)
|
742
|
-
@model.
|
754
|
+
expect(@model).not_to have_index.on(:post_id)
|
743
755
|
end
|
744
756
|
|
745
757
|
protected
|
@@ -779,17 +791,17 @@ describe ActiveRecord::Migration do
|
|
779
791
|
|
780
792
|
it "should rename rails-named indexes" do
|
781
793
|
index = ActiveRecord::Base.connection.indexes(:newname).find{|index| index.columns == ['xyz']}
|
782
|
-
index.name.
|
794
|
+
expect(index.name).to match(/^index_newname_on/)
|
783
795
|
end
|
784
796
|
|
785
797
|
it "should rename fk indexes" do
|
786
798
|
index = ActiveRecord::Base.connection.indexes(:newname).find{|index| index.columns == ['user_id']}
|
787
|
-
index.name.
|
799
|
+
expect(index.name).to match(/^fk__newname_/)
|
788
800
|
end
|
789
801
|
|
790
802
|
unless SchemaPlusHelpers.sqlite3?
|
791
803
|
it "should rename foreign key constraints" do
|
792
|
-
ActiveRecord::Base.connection.foreign_keys(:newname).first.name.
|
804
|
+
expect(ActiveRecord::Base.connection.foreign_keys(:newname).first.name).to match(/newname/)
|
793
805
|
end
|
794
806
|
end
|
795
807
|
|
@@ -821,7 +833,7 @@ describe ActiveRecord::Migration do
|
|
821
833
|
end
|
822
834
|
it "should rename foreign key constraints" do
|
823
835
|
names = ActiveRecord::Base.connection.foreign_keys(:newname).map(&:name)
|
824
|
-
names.grep(/newname/).
|
836
|
+
expect(names.grep(/newname/)).to eq(names)
|
825
837
|
end
|
826
838
|
end
|
827
839
|
|