schema_associations 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ce1a98047254a00934a2a5ea83cae65bb088154a9c9125e0924e53c07ab6b77
4
- data.tar.gz: 9305ad24ed3345de55d42a7a566b1f15cfa01d4e285c694ffd3750aa7feebce6
3
+ metadata.gz: ec0cfbd6657715659bd5a2d60d2b9c149952d84be81e0f6ca966fe29d28abb01
4
+ data.tar.gz: '0873c33c130ceebf4b01d5e3eebdc764810a8c11a0666172db16e5a08817a92d'
5
5
  SHA512:
6
- metadata.gz: 6e1e8b03ccce6cb04497ee2faec4816718a5b7b56803abcb04225e27d823d600d8a4af5e858433ba05551fb775395f36e9a187ba7f310740e0f9a06c5a7a9497
7
- data.tar.gz: 75e7e05eb6989c2d680e1425d7a05f684a1d8033b63590c3f7ab9f1154a8b33c1c00500748aee123442e2f97fda16efc60d2819530bf3cd182eccf63591466bd
6
+ metadata.gz: a1c51343a4da26da68aea83231d7e9af020acb330822cb8a4c0c969af53dd47266c0d1f5d9ff2f9b85f66fc6494a679ae9428d8be2263502ee375a95f6a1d25e
7
+ data.tar.gz: 7ea061fa8ca06101f34dae365fbed8f0a6ef292c99eb8abc99b21d9b0358ed282af2fba92061598037090d425efc07c1a63cbc6909b3524c3218ba3d5128d0b8
@@ -22,9 +22,12 @@ jobs:
22
22
  - '2.5'
23
23
  - '2.7'
24
24
  - '3.0'
25
+ - '3.1'
25
26
  activerecord:
26
27
  - '5.2'
27
28
  - '6.0'
29
+ - '6.1'
30
+ - '7.0'
28
31
  db:
29
32
  - mysql2
30
33
  - sqlite3
@@ -34,6 +37,10 @@ jobs:
34
37
  exclude:
35
38
  - ruby: '3.0'
36
39
  activerecord: '5.2'
40
+ - ruby: '3.1'
41
+ activerecord: '5.2'
42
+ - ruby: '2.5'
43
+ activerecord: '7.0'
37
44
  - db: skip
38
45
  dbversion: skip
39
46
  include:
@@ -45,6 +52,10 @@ jobs:
45
52
  activerecord: '6.0'
46
53
  db: postgresql
47
54
  dbversion: '9.6'
55
+ - ruby: '2.5'
56
+ activerecord: '6.1'
57
+ db: postgresql
58
+ dbversion: '9.6'
48
59
  - ruby: '2.7'
49
60
  activerecord: '5.2'
50
61
  db: postgresql
@@ -53,10 +64,38 @@ jobs:
53
64
  activerecord: '6.0'
54
65
  db: postgresql
55
66
  dbversion: '9.6'
67
+ - ruby: '2.7'
68
+ activerecord: '6.1'
69
+ db: postgresql
70
+ dbversion: '9.6'
71
+ - ruby: '2.7'
72
+ activerecord: '7.0'
73
+ db: postgresql
74
+ dbversion: '9.6'
75
+ - ruby: '3.0'
76
+ activerecord: '6.0'
77
+ db: postgresql
78
+ dbversion: '9.6'
79
+ - ruby: '3.0'
80
+ activerecord: '6.1'
81
+ db: postgresql
82
+ dbversion: '9.6'
56
83
  - ruby: '3.0'
84
+ activerecord: '7.0'
85
+ db: postgresql
86
+ dbversion: '9.6'
87
+ - ruby: '3.1'
57
88
  activerecord: '6.0'
58
89
  db: postgresql
59
90
  dbversion: '9.6'
91
+ - ruby: '3.1'
92
+ activerecord: '6.1'
93
+ db: postgresql
94
+ dbversion: '9.6'
95
+ - ruby: '3.1'
96
+ activerecord: '7.0'
97
+ db: postgresql
98
+ dbversion: '9.6'
60
99
  env:
61
100
  BUNDLE_GEMFILE: "${{ github.workspace }}/gemfiles/activerecord-${{ matrix.activerecord }}/Gemfile.${{ matrix.db }}"
62
101
  MYSQL_DB_HOST: 127.0.0.1
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "http://rubygems.org"
2
4
  gemspec
3
5
 
data/README.md CHANGED
@@ -420,9 +420,17 @@ SchemaAssociations is tested on all combinations of:
420
420
  <!-- These lines are auto-generated by schema_dev based on schema_dev.yml -->
421
421
  * ruby **2.5** with activerecord **5.2**, using **mysql2**, **postgresql:9.6** or **sqlite3**
422
422
  * ruby **2.5** with activerecord **6.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
423
+ * ruby **2.5** with activerecord **6.1**, using **mysql2**, **postgresql:9.6** or **sqlite3**
423
424
  * ruby **2.7** with activerecord **5.2**, using **mysql2**, **postgresql:9.6** or **sqlite3**
424
425
  * ruby **2.7** with activerecord **6.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
426
+ * ruby **2.7** with activerecord **6.1**, using **mysql2**, **postgresql:9.6** or **sqlite3**
427
+ * ruby **2.7** with activerecord **7.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
425
428
  * ruby **3.0** with activerecord **6.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
429
+ * ruby **3.0** with activerecord **6.1**, using **mysql2**, **postgresql:9.6** or **sqlite3**
430
+ * ruby **3.0** with activerecord **7.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
431
+ * ruby **3.1** with activerecord **6.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
432
+ * ruby **3.1** with activerecord **6.1**, using **mysql2**, **postgresql:9.6** or **sqlite3**
433
+ * ruby **3.1** with activerecord **7.0**, using **mysql2**, **postgresql:9.6** or **sqlite3**
426
434
 
427
435
  <!-- SCHEMA_DEV: MATRIX - end -->
428
436
 
@@ -445,10 +453,18 @@ or in a Gemfile
445
453
 
446
454
  ## Release notes:
447
455
 
456
+ ### 1.4.0
457
+
458
+ * Add AR 6.1 and 7.0
459
+ * Add Ruby 3.1
460
+ * drop schema_plus_compatibiltiy dependency (indirect through schema_plus_foreign_keys update)
461
+
448
462
  ### 1.3.0
449
463
 
450
- * drop AR < 5.2, add AR 6.0
451
- * drop Ruby < 2.5, add Ruby 3.0
464
+ * add AR 6.0
465
+ * add Ruby 3.0
466
+ * drop AR < 5.2
467
+ * drop Ruby < 2.5
452
468
 
453
469
  ### 1.2.7
454
470
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler'
2
4
  Bundler::GemHelper.install_tasks
3
5
 
@@ -0,0 +1,4 @@
1
+ base_gemfile = File.expand_path('../../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile)
3
+
4
+ gem "activerecord", ">= 6.1", "< 6.2"
@@ -0,0 +1,10 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile), binding, base_gemfile
3
+
4
+ platform :ruby do
5
+ gem "mysql2"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcmysql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile), binding, base_gemfile
3
+
4
+ platform :ruby do
5
+ gem "pg"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcpostgresql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile), binding, base_gemfile
3
+
4
+ platform :ruby do
5
+ gem "sqlite3"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2'
10
+ end
@@ -0,0 +1,4 @@
1
+ base_gemfile = File.expand_path('../../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile)
3
+
4
+ gem "activerecord", ">= 7.0", "< 7.1"
@@ -0,0 +1,10 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile), binding, base_gemfile
3
+
4
+ platform :ruby do
5
+ gem "mysql2"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcmysql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile), binding, base_gemfile
3
+
4
+ platform :ruby do
5
+ gem "pg"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcpostgresql-adapter'
10
+ end
@@ -0,0 +1,10 @@
1
+ base_gemfile = File.expand_path('../Gemfile.base', __FILE__)
2
+ eval File.read(base_gemfile), binding, base_gemfile
3
+
4
+ platform :ruby do
5
+ gem "sqlite3"
6
+ end
7
+
8
+ platform :jruby do
9
+ gem 'activerecord-jdbcsqlite3-adapter', '>=1.3.0.beta2'
10
+ end
data/init.rb CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'schema_associations' unless defined?(SchemaAssociations)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ostruct'
2
4
 
3
5
  module SchemaAssociations
@@ -272,7 +274,7 @@ module SchemaAssociations
272
274
  end
273
275
 
274
276
  def _method_exists?(name)
275
- method_defined?(name) || private_method_defined?(name) and not (name == :type && [Object, Kernel].include?(instance_method(:type).owner))
277
+ method_defined?(name) || private_method_defined?(name)
276
278
  end
277
279
 
278
280
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SchemaAssociations
2
- VERSION = "1.3.0"
4
+ VERSION = "1.4.0"
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'schema_plus_foreign_keys'
2
4
  require 'valuable'
3
5
 
@@ -1,4 +1,5 @@
1
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
2
3
  $:.push File.expand_path("../lib", __FILE__)
3
4
  require "schema_associations/version"
4
5
 
@@ -19,12 +20,12 @@ Gem::Specification.new do |gem|
19
20
 
20
21
  gem.required_ruby_version = '>= 2.5'
21
22
 
22
- gem.add_dependency 'activerecord', '>= 5.2', '< 6.1'
23
- gem.add_dependency 'schema_plus_foreign_keys', '~> 1.0.0'
23
+ gem.add_dependency 'activerecord', '>= 5.2', '< 7.1'
24
+ gem.add_dependency 'schema_plus_foreign_keys', '~> 1.1.0'
24
25
  gem.add_dependency 'valuable'
25
26
 
26
27
  gem.add_development_dependency 'bundler'
27
28
  gem.add_development_dependency 'rake', '~> 13.0'
28
29
  gem.add_development_dependency 'rspec', '~> 3.0'
29
- gem.add_development_dependency 'schema_dev', '~> 4.1'
30
+ gem.add_development_dependency 'schema_dev', '~> 4.2.0'
30
31
  end
data/schema_dev.yml CHANGED
@@ -2,9 +2,12 @@ ruby:
2
2
  - 2.5
3
3
  - 2.7
4
4
  - 3.0
5
+ - 3.1
5
6
  activerecord:
6
7
  - 5.2
7
8
  - 6.0
9
+ - 6.1
10
+ - 7.0
8
11
  db:
9
12
  - mysql2
10
13
  - postgresql
@@ -1,20 +1,26 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
4
 
4
5
  describe ActiveRecord::Base do
6
+ def stub_model(name, base = ActiveRecord::Base, &block)
7
+ klass = Class.new(base)
5
8
 
6
- after(:each) do
7
- remove_all_models
9
+ if block_given?
10
+ klass.instance_eval(&block)
11
+ end
12
+
13
+ stub_const(name, klass)
8
14
  end
9
15
 
10
16
  context "in basic case" do
11
17
  before(:each) do
12
18
  create_tables(
13
19
  "posts", {}, {},
14
- "comments", {}, { :post_id => {foreign_key: true} }
20
+ "comments", {}, { post_id: {foreign_key: true} }
15
21
  )
16
- class Post < ActiveRecord::Base ; end
17
- class Comment < ActiveRecord::Base ; end
22
+ stub_model('Post')
23
+ stub_model('Comment')
18
24
  end
19
25
 
20
26
  it "should create belongs_to association when reflecting on it" do
@@ -43,13 +49,13 @@ describe ActiveRecord::Base do
43
49
 
44
50
  it "should create association when accessing it" do
45
51
  post = Post.create
46
- comment = Comment.create(:post_id => post.id)
52
+ comment = Comment.create(post_id: post.id)
47
53
  expect(comment.post.id).to eq(post.id)
48
54
  end
49
55
 
50
56
  it "should create association when creating record" do
51
57
  post = Post.create
52
- comment = Comment.create(:post => post)
58
+ comment = Comment.create(post: post)
53
59
  expect(comment.reload.post.id).to eq(post.id)
54
60
  end
55
61
 
@@ -72,11 +78,11 @@ describe ActiveRecord::Base do
72
78
  "owners", {}, {},
73
79
  "colors", {}, {},
74
80
  "widgets", {}, {
75
- :owner_id => { foreign_key: true },
81
+ owner_id: { foreign_key: true },
76
82
  },
77
- "parts", {}, { :widget_id => { foreign_key: true } },
78
- "manifests", {}, { :widget_id => { foreign_key: true, :index => {:unique => true}} },
79
- "colors_widgets", {:id => false}, { :widget_id => { foreign_key: true}, :color_id => { foreign_key: true} }
83
+ "parts", {}, { widget_id: { foreign_key: true } },
84
+ "manifests", {}, { widget_id: { foreign_key: true, index: {unique: true}} },
85
+ "colors_widgets", {id: false}, { widget_id: { foreign_key: true}, color_id: { foreign_key: true} }
80
86
  )
81
87
  end
82
88
 
@@ -91,78 +97,78 @@ describe ActiveRecord::Base do
91
97
  end
92
98
 
93
99
  it "should default as expected" do
94
- class Widget < ActiveRecord::Base ; end
95
- check_reflections(:owner => true, :colors => true, :parts => true, :manifest => true)
100
+ stub_model('Widget')
101
+ check_reflections(owner: true, colors: true, parts: true, manifest: true)
96
102
  end
97
103
 
98
104
  it "should respect :only" do
99
- class Widget < ActiveRecord::Base
100
- schema_associations :only => :owner
105
+ stub_model('Widget') do
106
+ schema_associations only: :owner
101
107
  end
102
- check_reflections(:owner => true, :colors => false, :parts => false, :manifest => false)
108
+ check_reflections(owner: true, colors: false, parts: false, manifest: false)
103
109
  end
104
110
 
105
111
  it "should respect :except" do
106
- class Widget < ActiveRecord::Base
107
- schema_associations :except => :owner
112
+ stub_model('Widget') do
113
+ schema_associations except: :owner
108
114
  end
109
- check_reflections(:owner => false, :colors => true, :parts => true, :manifest => true)
115
+ check_reflections(owner: false, colors: true, parts: true, manifest: true)
110
116
  end
111
117
 
112
118
  it "should respect :only_type :belongs_to" do
113
- class Widget < ActiveRecord::Base
114
- schema_associations :only_type => :belongs_to
119
+ stub_model('Widget') do
120
+ schema_associations only_type: :belongs_to
115
121
  end
116
- check_reflections(:owner => true, :colors => false, :parts => false, :manifest => false)
122
+ check_reflections(owner: true, colors: false, parts: false, manifest: false)
117
123
  end
118
124
 
119
125
  it "should respect :except_type :belongs_to" do
120
- class Widget < ActiveRecord::Base
121
- schema_associations :except_type => :belongs_to
126
+ stub_model('Widget') do
127
+ schema_associations except_type: :belongs_to
122
128
  end
123
- check_reflections(:owner => false, :colors => true, :parts => true, :manifest => true)
129
+ check_reflections(owner: false, colors: true, parts: true, manifest: true)
124
130
  end
125
131
 
126
132
  it "should respect :only_type :has_many" do
127
- class Widget < ActiveRecord::Base
128
- schema_associations :only_type => :has_many
133
+ stub_model('Widget') do
134
+ schema_associations only_type: :has_many
129
135
  end
130
- check_reflections(:owner => false, :colors => false, :parts => true, :manifest => false)
136
+ check_reflections(owner: false, colors: false, parts: true, manifest: false)
131
137
  end
132
138
 
133
139
  it "should respect :except_type :has_many" do
134
- class Widget < ActiveRecord::Base
135
- schema_associations :except_type => :has_many
140
+ stub_model('Widget') do
141
+ schema_associations except_type: :has_many
136
142
  end
137
- check_reflections(:owner => true, :colors => true, :parts => false, :manifest => true)
143
+ check_reflections(owner: true, colors: true, parts: false, manifest: true)
138
144
  end
139
145
 
140
146
  it "should respect :only_type :has_one" do
141
- class Widget < ActiveRecord::Base
142
- schema_associations :only_type => :has_one
147
+ stub_model('Widget') do
148
+ schema_associations only_type: :has_one
143
149
  end
144
- check_reflections(:owner => false, :colors => false, :parts => false, :manifest => true)
150
+ check_reflections(owner: false, colors: false, parts: false, manifest: true)
145
151
  end
146
152
 
147
153
  it "should respect :except_type :has_one" do
148
- class Widget < ActiveRecord::Base
149
- schema_associations :except_type => :has_one
154
+ stub_model('Widget') do
155
+ schema_associations except_type: :has_one
150
156
  end
151
- check_reflections(:owner => true, :colors => true, :parts => true, :manifest => false)
157
+ check_reflections(owner: true, colors: true, parts: true, manifest: false)
152
158
  end
153
159
 
154
160
  it "should respect :only_type :has_and_belongs_to_many" do
155
- class Widget < ActiveRecord::Base
156
- schema_associations :only_type => :has_and_belongs_to_many
161
+ stub_model('Widget') do
162
+ schema_associations only_type: :has_and_belongs_to_many
157
163
  end
158
- check_reflections(:owner => false, :colors => true, :parts => false, :manifest => false)
164
+ check_reflections(owner: false, colors: true, parts: false, manifest: false)
159
165
  end
160
166
 
161
167
  it "should respect :except_type :has_and_belongs_to_many" do
162
- class Widget < ActiveRecord::Base
163
- schema_associations :except_type => :has_and_belongs_to_many
168
+ stub_model('Widget') do
169
+ schema_associations except_type: :has_and_belongs_to_many
164
170
  end
165
- check_reflections(:owner => true, :colors => false, :parts => true, :manifest => true)
171
+ check_reflections(owner: true, colors: false, parts: true, manifest: true)
166
172
  end
167
173
 
168
174
  end
@@ -172,12 +178,12 @@ describe ActiveRecord::Base do
172
178
  with_associations_auto_create(true) do
173
179
  create_tables(
174
180
  "posts", {}, {},
175
- "comments", {}, { :post_id => {foreign_key: true} }
181
+ "comments", {}, { post_id: {foreign_key: true} }
176
182
  )
177
- class Post < ActiveRecord::Base
178
- schema_associations :auto_create => false
183
+ stub_model('Post') do
184
+ schema_associations auto_create: false
179
185
  end
180
- class Comment < ActiveRecord::Base ; end
186
+ stub_model('Comment')
181
187
  expect(Post.reflect_on_association(:comments)).to be_nil
182
188
  expect(Comment.reflect_on_association(:post)).not_to be_nil
183
189
  end
@@ -188,12 +194,12 @@ describe ActiveRecord::Base do
188
194
  with_associations_auto_create(false) do
189
195
  create_tables(
190
196
  "posts", {}, {},
191
- "comments", {}, { :post_id => {foreign_key: true} }
197
+ "comments", {}, { post_id: {foreign_key: true} }
192
198
  )
193
- class Post < ActiveRecord::Base
194
- schema_associations :auto_create => true
199
+ stub_model('Post') do
200
+ schema_associations auto_create: true
195
201
  end
196
- class Comment < ActiveRecord::Base ; end
202
+ stub_model('Comment')
197
203
  expect(Post.reflect_on_association(:comments)).not_to be_nil
198
204
  expect(Comment.reflect_on_association(:post)).to be_nil
199
205
  end
@@ -203,12 +209,12 @@ describe ActiveRecord::Base do
203
209
  with_associations_auto_create(false) do
204
210
  create_tables(
205
211
  "posts", {}, {},
206
- "comments", {}, { :post_id => {foreign_key: true} }
212
+ "comments", {}, { post_id: {foreign_key: true} }
207
213
  )
208
- class Post < ActiveRecord::Base
214
+ stub_model('Post') do
209
215
  schema_associations
210
216
  end
211
- class Comment < ActiveRecord::Base ; end
217
+ stub_model('Comment')
212
218
  expect(Post.reflect_on_association(:comments)).not_to be_nil
213
219
  expect(Comment.reflect_on_association(:post)).to be_nil
214
220
  end
@@ -220,10 +226,10 @@ describe ActiveRecord::Base do
220
226
  before(:each) do
221
227
  create_tables(
222
228
  "posts", {}, {},
223
- "comments", {}, { :post_id => {foreign_key: true, :index => { :unique => true} } }
229
+ "comments", {}, { post_id: {foreign_key: true, index: { unique: true} } }
224
230
  )
225
- class Post < ActiveRecord::Base ; end
226
- class Comment < ActiveRecord::Base ; end
231
+ stub_model('Post')
232
+ stub_model('Comment')
227
233
  end
228
234
  it "should create has_one association" do
229
235
  reflection = Post.reflect_on_association(:comment)
@@ -247,10 +253,10 @@ describe ActiveRecord::Base do
247
253
  before(:each) do
248
254
  create_tables(
249
255
  "posts", {}, {},
250
- "comments", {}, { :subject_post_id => { foreign_key: { references: "posts" }} }
256
+ "comments", {}, { subject_post_id: { foreign_key: { references: "posts" }} }
251
257
  )
252
- class Post < ActiveRecord::Base ; end
253
- class Comment < ActiveRecord::Base ; end
258
+ stub_model('Post')
259
+ stub_model('Comment')
254
260
  end
255
261
  it "should name belongs_to according to column" do
256
262
  reflection = Comment.reflect_on_association(:subject_post)
@@ -275,10 +281,10 @@ describe ActiveRecord::Base do
275
281
  before(:each) do
276
282
  create_tables(
277
283
  "posts", {}, {},
278
- "comments", {}, { :post_cited => { foreign_key: {references: "posts" }} }
284
+ "comments", {}, { post_cited: { foreign_key: {references: "posts" }} }
279
285
  )
280
- class Post < ActiveRecord::Base ; end
281
- class Comment < ActiveRecord::Base ; end
286
+ stub_model('Post')
287
+ stub_model('Comment')
282
288
  end
283
289
  it "should name belongs_to according to column" do
284
290
  reflection = Comment.reflect_on_association(:post_cited)
@@ -303,10 +309,10 @@ describe ActiveRecord::Base do
303
309
  before(:each) do
304
310
  create_tables(
305
311
  "posts", {}, {},
306
- "comments", {}, { :subject => {foreign_key: { references: "posts" }} }
312
+ "comments", {}, { subject: {foreign_key: { references: "posts" }} }
307
313
  )
308
- class Post < ActiveRecord::Base ; end
309
- class Comment < ActiveRecord::Base ; end
314
+ stub_model('Post')
315
+ stub_model('Comment')
310
316
  end
311
317
  it "should name belongs_to according to column" do
312
318
  reflection = Comment.reflect_on_association(:subject)
@@ -328,13 +334,18 @@ describe ActiveRecord::Base do
328
334
  end
329
335
 
330
336
  it "maps table prefix" do
331
- with_associations_config(:table_prefix_map => { "wooga_" => "Happy"} ) do
337
+ with_associations_config(table_prefix_map: { "wooga_" => "Happy"} ) do
332
338
  create_tables(
333
339
  "wooga_posts", {}, {},
334
- "wooga_comments", {}, { :wooga_post_id => { foreign_key: true} }
340
+ "wooga_comments", {}, { wooga_post_id: { foreign_key: true} }
335
341
  )
336
- class HappyPost < ActiveRecord::Base ; self.table_name = 'wooga_posts' ; end
337
- class HappyComment < ActiveRecord::Base ; self.table_name = 'wooga_comments' ; end
342
+ stub_model('HappyPost') do
343
+ self.table_name = 'wooga_posts'
344
+ end
345
+ stub_model('HappyComment') do
346
+ self.table_name = 'wooga_comments'
347
+ end
348
+
338
349
  # Kernel.warn HappyPost.reflect_on_all_associations.inspect
339
350
  expect(HappyComment.reflect_on_association(:post).class_name).to eq("HappyPost")
340
351
  expect(HappyPost.reflect_on_association(:comments).class_name).to eq("HappyComment")
@@ -345,10 +356,10 @@ describe ActiveRecord::Base do
345
356
  before(:each) do
346
357
  create_tables(
347
358
  "posts", {}, {},
348
- "comments", {}, { :post_id => { foreign_key: true} }
359
+ "comments", {}, { post_id: { foreign_key: true} }
349
360
  )
350
- class Post < ActiveRecord::Base ; end
351
- class Comment < ActiveRecord::Base ; end
361
+ stub_model('Post')
362
+ stub_model('Comment')
352
363
  end
353
364
  it "should create unordered has_many association" do
354
365
  reflection = Post.reflect_on_association(:comments)
@@ -365,10 +376,10 @@ describe ActiveRecord::Base do
365
376
  before(:each) do
366
377
  create_tables(
367
378
  "posts", {}, {},
368
- "comments", {}, { :post_id => {foreign_key: true}, :position => {} }
379
+ "comments", {}, { post_id: {foreign_key: true}, position: {} }
369
380
  )
370
- class Post < ActiveRecord::Base ; end
371
- class Comment < ActiveRecord::Base ; end
381
+ stub_model('Post')
382
+ stub_model('Comment')
372
383
  end
373
384
  it "should create ordered has_many association" do
374
385
  reflection = Post.reflect_on_association(:comments)
@@ -388,10 +399,10 @@ describe ActiveRecord::Base do
388
399
  before(:each) do
389
400
  create_tables(
390
401
  "posts", {}, {},
391
- "comments", {}, { :post_id => {}, :position => {} }
402
+ "comments", {}, { post_id: {}, position: {} }
392
403
  )
393
- class Post < ActiveRecord::Base ; end
394
- class Comment < ActiveRecord::Base
404
+ stub_model('Post')
405
+ stub_model('Comment') do
395
406
  scope :simple_scope, lambda { order(:id) }
396
407
  end
397
408
  end
@@ -405,10 +416,10 @@ describe ActiveRecord::Base do
405
416
  before(:each) do
406
417
  create_tables(
407
418
  "posts", {}, {},
408
- "comments", {}, { :post_id => {}, :position => {} }
419
+ "comments", {}, { post_id: {}, position: {} }
409
420
  )
410
- class Post < ActiveRecord::Base ; end
411
- class Comment < ActiveRecord::Base
421
+ stub_model('Post')
422
+ stub_model('Comment') do
412
423
  scope :simple_scope, lambda { order(:id).includes(:post) }
413
424
  end
414
425
  end
@@ -424,21 +435,21 @@ describe ActiveRecord::Base do
424
435
 
425
436
  before(:each) do
426
437
  create_tables(
427
- "nodes", {}, { :parent_id => { foreign_key: true} }
438
+ "nodes", {}, { parent_id: { foreign_key: true} }
428
439
  )
429
440
  end
430
441
 
431
442
  it "should use children as the inverse of parent" do
432
- class Node < ActiveRecord::Base ; end
443
+ stub_model('Node')
433
444
  reflection = Node.reflect_on_association(:children)
434
445
  expect(reflection).not_to be_nil
435
446
  end
436
447
 
437
448
  it "should use child as the singular inverse of parent" do
438
449
  migration.suppress_messages do
439
- migration.add_index(:nodes, :parent_id, :unique => true)
450
+ migration.add_index(:nodes, :parent_id, unique: true)
440
451
  end
441
- class Node < ActiveRecord::Base ; end
452
+ stub_model('Node')
442
453
  reflection = Node.reflect_on_association(:child)
443
454
  expect(reflection).not_to be_nil
444
455
  end
@@ -450,32 +461,32 @@ describe ActiveRecord::Base do
450
461
  def prefix_one
451
462
  create_tables(
452
463
  "posts", {}, {},
453
- "post_comments", {}, { :post_id => { foreign_key: true} }
464
+ "post_comments", {}, { post_id: { foreign_key: true} }
454
465
  )
455
- Object.const_set(:Post, Class.new(ActiveRecord::Base))
456
- Object.const_set(:PostComment, Class.new(ActiveRecord::Base))
466
+ stub_model('Post')
467
+ stub_model('PostComment')
457
468
  end
458
469
 
459
470
  def suffix_one
460
471
  create_tables(
461
472
  "posts", {}, {},
462
- "comment_posts", {}, { :post_id => { foreign_key: true} }
473
+ "comment_posts", {}, { post_id: { foreign_key: true} }
463
474
  )
464
- Object.const_set(:Post, Class.new(ActiveRecord::Base))
465
- Object.const_set(:CommentPost, Class.new(ActiveRecord::Base))
475
+ stub_model('Post')
476
+ stub_model('PostComment')
466
477
  end
467
478
 
468
479
  def prefix_both
469
480
  create_tables(
470
481
  "blog_page_posts", {}, {},
471
- "blog_page_comments", {}, { :blog_page_post_id => { foreign_key: true} }
482
+ "blog_page_comments", {}, { blog_page_post_id: { foreign_key: true} }
472
483
  )
473
- Object.const_set(:BlogPagePost, Class.new(ActiveRecord::Base))
474
- Object.const_set(:BlogPageComment, Class.new(ActiveRecord::Base))
484
+ stub_model('BlogPagePost')
485
+ stub_model('BlogPageComment')
475
486
  end
476
487
 
477
488
  it "should use concise association name for one prefix" do
478
- with_associations_config(:auto_create => true, :concise_names => true) do
489
+ with_associations_config(auto_create: true, concise_names: true) do
479
490
  prefix_one
480
491
  reflection = Post.reflect_on_association(:comments)
481
492
  expect(reflection).not_to be_nil
@@ -487,7 +498,7 @@ describe ActiveRecord::Base do
487
498
  end
488
499
 
489
500
  it "should use concise association name for one suffix" do
490
- with_associations_config(:auto_create => true, :concise_names => true) do
501
+ with_associations_config(auto_create: true, concise_names: true) do
491
502
  suffix_one
492
503
  reflection = Post.reflect_on_association(:comments)
493
504
  expect(reflection).not_to be_nil
@@ -499,7 +510,7 @@ describe ActiveRecord::Base do
499
510
  end
500
511
 
501
512
  it "should use concise association name for shared prefixes" do
502
- with_associations_config(:auto_create => true, :concise_names => true) do
513
+ with_associations_config(auto_create: true, concise_names: true) do
503
514
  prefix_both
504
515
  reflection = BlogPagePost.reflect_on_association(:comments)
505
516
  expect(reflection).not_to be_nil
@@ -511,7 +522,7 @@ describe ActiveRecord::Base do
511
522
  end
512
523
 
513
524
  it "should use full names and not concise names when so configured" do
514
- with_associations_config(:auto_create => true, :concise_names => false) do
525
+ with_associations_config(auto_create: true, concise_names: false) do
515
526
  prefix_one
516
527
  reflection = Post.reflect_on_association(:post_comments)
517
528
  expect(reflection).not_to be_nil
@@ -525,7 +536,7 @@ describe ActiveRecord::Base do
525
536
  end
526
537
 
527
538
  it "should use concise names and not full names when so configured" do
528
- with_associations_config(:auto_create => true, :concise_names => true) do
539
+ with_associations_config(auto_create: true, concise_names: true) do
529
540
  prefix_one
530
541
  reflection = Post.reflect_on_association(:comments)
531
542
  expect(reflection).not_to be_nil
@@ -546,10 +557,10 @@ describe ActiveRecord::Base do
546
557
  create_tables(
547
558
  "posts", {}, {},
548
559
  "tags", {}, {},
549
- "posts_tags", {:id => false}, { :post_id => { foreign_key: true}, :tag_id => { foreign_key: true}}
560
+ "posts_tags", {id: false}, { post_id: { foreign_key: true}, tag_id: { foreign_key: true}}
550
561
  )
551
- class Post < ActiveRecord::Base ; end
552
- class Tag < ActiveRecord::Base ; end
562
+ stub_model('Post')
563
+ stub_model('Tag')
553
564
  end
554
565
  it "should create has_and_belongs_to_many association" do
555
566
  reflection = Post.reflect_on_association(:tags)
@@ -564,13 +575,13 @@ describe ActiveRecord::Base do
564
575
  before(:each) do
565
576
  create_tables(
566
577
  "users", {}, {},
567
- "posts", {}, { :user_id => { foreign_key: true}},
568
- "comments", {}, { :post_id => { foreign_key: true}},
578
+ "posts", {}, { user_id: { foreign_key: true}},
579
+ "comments", {}, { post_id: { foreign_key: true}},
569
580
  )
570
- class Post < ActiveRecord::Base; end
571
- class Comment < ActiveRecord::Base; end
572
- class User < ActiveRecord::Base
573
- has_many :comments, :through => :posts
581
+ stub_model('Post')
582
+ stub_model('Comment')
583
+ stub_model('User') do
584
+ has_many :comments, through: :posts
574
585
  end
575
586
  end
576
587
 
@@ -591,37 +602,37 @@ describe ActiveRecord::Base do
591
602
  before(:each) do
592
603
  create_tables(
593
604
  "types", {}, {},
594
- "posts", {}, {:type_id => { foreign_key: true}}
605
+ "posts", {}, {type_id: { foreign_key: true}}
595
606
  )
596
607
  end
597
608
  it "should define association normally if no existing method is defined" do
598
- class Type < ActiveRecord::Base ; end
609
+ stub_model('Type')
599
610
  expect(Type.reflect_on_association(:posts)).not_to be_nil # sanity check for this context
600
611
  end
601
612
  it "should not define association over existing public method" do
602
- class Type < ActiveRecord::Base
603
- def posts
613
+ stub_model('Type') do
614
+ define_method(:posts) do
604
615
  :existing
605
616
  end
606
617
  end
607
618
  expect(Type.reflect_on_association(:posts)).to be_nil
608
619
  end
609
620
  it "should not define association over existing private method" do
610
- class Type < ActiveRecord::Base
611
- private
612
- def posts
621
+ stub_model('Type') do
622
+ define_method(:posts) do
613
623
  :existing
614
624
  end
625
+ private :posts
615
626
  end
616
627
  expect(Type.reflect_on_association(:posts)).to be_nil
617
628
  end
618
629
  it "should define association :type over (deprecated) kernel method" do
619
- class Post < ActiveRecord::Base ; end
630
+ stub_model('Post')
620
631
  expect(Post.reflect_on_association(:type)).not_to be_nil
621
632
  end
622
633
  it "should not define association :type over model method" do
623
- class Post < ActiveRecord::Base
624
- def type
634
+ stub_model('Post') do
635
+ define_method(:type) do
625
636
  :existing
626
637
  end
627
638
  end
@@ -633,16 +644,16 @@ describe ActiveRecord::Base do
633
644
  before(:each) do
634
645
  create_tables(
635
646
  "posts", {}, {},
636
- "comments", {}, { :post_id => { foreign_key: true}, :type => {coltype: :string} },
647
+ "comments", {}, { post_id: { foreign_key: true}, type: {coltype: :string} },
637
648
  "citers", {}, {},
638
- "citations", {}, { :comment_id => { foreign_key: true}, :citer_id => { foreign_key: true}}
649
+ "citations", {}, { comment_id: { foreign_key: true}, citer_id: { foreign_key: true}}
639
650
  )
640
- class Post < ActiveRecord::Base ; end
641
- class Comment < ActiveRecord::Base ; end
642
- class Citation < ActiveRecord::Base ; end
643
- class SubComment < Comment ; end
644
- class OwnComment < Comment
645
- has_one :citer, :through => :citations
651
+ stub_model('Post')
652
+ stub_model('Comment')
653
+ stub_model('Citation')
654
+ stub_model('SubComment', Comment)
655
+ stub_model('OwnComment', Comment) do
656
+ has_one :citer, through: :citations
646
657
  end
647
658
  end
648
659
 
@@ -661,8 +672,10 @@ describe ActiveRecord::Base do
661
672
  create_tables(
662
673
  "posts", {}, {}
663
674
  )
664
- class PostBase < ActiveRecord::Base ; self.abstract_class = true ; end
665
- class Post < PostBase ; end
675
+ stub_model('PostBase') do
676
+ self.abstract_class = true
677
+ end
678
+ stub_model('Post', PostBase)
666
679
  end
667
680
 
668
681
  it "should skip abstract classes" do
@@ -683,10 +696,10 @@ describe ActiveRecord::Base do
683
696
  before(:each) do
684
697
  create_tables(
685
698
  "posts", {}, {},
686
- "comments", {}, { :post_id => { foreign_key: true} }
699
+ "comments", {}, { post_id: { foreign_key: true} }
687
700
  )
688
- class Post < ActiveRecord::Base ; end
689
- class Comment < ActiveRecord::Base ; end
701
+ stub_model('Post')
702
+ stub_model('Comment')
690
703
  end
691
704
 
692
705
  it "should define associations before needed by relation" do
@@ -698,7 +711,7 @@ describe ActiveRecord::Base do
698
711
  protected
699
712
 
700
713
  def with_associations_auto_create(value, &block)
701
- with_associations_config(:auto_create => value, &block)
714
+ with_associations_config(auto_create: value, &block)
702
715
  end
703
716
 
704
717
  def with_associations_config(opts, &block)
@@ -715,7 +728,7 @@ describe ActiveRecord::Base do
715
728
 
716
729
  def create_tables(*table_defs)
717
730
  ActiveRecord::Migration.suppress_messages do
718
- ActiveRecord::Base.connection.tables_only.each do |table|
731
+ ActiveRecord::Base.connection.tables.sort.each do |table|
719
732
  ActiveRecord::Migration.drop_table table, force: :cascade
720
733
  end
721
734
  table_defs.each_slice(3) do |table_name, opts, columns_with_options|
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov'
2
- SimpleCov.start
4
+ SimpleCov.start unless SimpleCov.running
3
5
 
4
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
5
7
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
@@ -12,16 +14,6 @@ require 'schema_dev/rspec'
12
14
 
13
15
  SchemaDev::Rspec::setup
14
16
 
15
- Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
16
-
17
- def remove_all_models
18
- ObjectSpace.each_object(Class) do |c|
19
- next unless c.ancestors.include? ActiveRecord::Base
20
- next if c == ActiveRecord::Base
21
- next if c.name.blank?
22
- c.destroy_all rescue nil
23
- ActiveSupport::Dependencies.remove_constant c.name
24
- end
25
- end
17
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each { |f| require f }
26
18
 
27
19
  SimpleCov.command_name "[Ruby #{RUBY_VERSION} - ActiveRecord #{::ActiveRecord::VERSION::STRING}]"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_associations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ronen Barzel
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-05-06 00:00:00.000000000 Z
12
+ date: 2022-06-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '5.2'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '6.1'
23
+ version: '7.1'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,21 +30,21 @@ dependencies:
30
30
  version: '5.2'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '6.1'
33
+ version: '7.1'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: schema_plus_foreign_keys
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.0.0
40
+ version: 1.1.0
41
41
  type: :runtime
42
42
  prerelease: false
43
43
  version_requirements: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.0
47
+ version: 1.1.0
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: valuable
50
50
  requirement: !ruby/object:Gem::Requirement
@@ -107,14 +107,14 @@ dependencies:
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '4.1'
110
+ version: 4.2.0
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '4.1'
117
+ version: 4.2.0
118
118
  description: SchemaAssociations extends ActiveRecord to automatically create associations
119
119
  by inspecting the database schema. This is more more DRY than the standard behavior,
120
120
  for which in addition to specifying the foreign key in the migration, you must also
@@ -143,6 +143,14 @@ files:
143
143
  - gemfiles/activerecord-6.0/Gemfile.mysql2
144
144
  - gemfiles/activerecord-6.0/Gemfile.postgresql
145
145
  - gemfiles/activerecord-6.0/Gemfile.sqlite3
146
+ - gemfiles/activerecord-6.1/Gemfile.base
147
+ - gemfiles/activerecord-6.1/Gemfile.mysql2
148
+ - gemfiles/activerecord-6.1/Gemfile.postgresql
149
+ - gemfiles/activerecord-6.1/Gemfile.sqlite3
150
+ - gemfiles/activerecord-7.0/Gemfile.base
151
+ - gemfiles/activerecord-7.0/Gemfile.mysql2
152
+ - gemfiles/activerecord-7.0/Gemfile.postgresql
153
+ - gemfiles/activerecord-7.0/Gemfile.sqlite3
146
154
  - init.rb
147
155
  - lib/schema_associations.rb
148
156
  - lib/schema_associations/active_record/associations.rb
@@ -150,7 +158,6 @@ files:
150
158
  - schema_associations.gemspec
151
159
  - schema_dev.yml
152
160
  - spec/association_spec.rb
153
- - spec/schema_associations.sqlite3
154
161
  - spec/spec_helper.rb
155
162
  homepage: https://github.com/SchemaPlus/schema_associations
156
163
  licenses: []
@@ -170,12 +177,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
170
177
  - !ruby/object:Gem::Version
171
178
  version: '0'
172
179
  requirements: []
173
- rubygems_version: 3.0.8
180
+ rubygems_version: 3.1.6
174
181
  signing_key:
175
182
  specification_version: 4
176
183
  summary: ActiveRecord extension that automatically (DRY) creates associations based
177
184
  on the schema
178
185
  test_files:
179
186
  - spec/association_spec.rb
180
- - spec/schema_associations.sqlite3
181
187
  - spec/spec_helper.rb
Binary file