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