with_model 2.1.6 → 2.2.0

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.
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Descendants tracking" do
6
+ with_model :BlogPost do
7
+ model do
8
+ def self.inspect
9
+ "BlogPost class #{object_id}"
10
+ end
11
+ end
12
+ end
13
+
14
+ def blog_post_classes
15
+ ActiveRecord::Base.descendants.select do |c|
16
+ c.table_name == BlogPost.table_name
17
+ end
18
+ end
19
+
20
+ shared_examples "clearing descendants between test runs" do
21
+ it "includes the correct model class in descendants on the first test run" do
22
+ expect(blog_post_classes).to eq [BlogPost]
23
+ end
24
+
25
+ it "includes the correct model class in descendants on the second test run" do
26
+ expect(blog_post_classes).to eq [BlogPost]
27
+ end
28
+ end
29
+
30
+ context "with ActiveSupport::DescendantsTracker (cache_classes: true)" do
31
+ before do
32
+ expect(ActiveSupport::DescendantsTracker.clear_disabled).to be_falsey
33
+ expect { ActiveSupport::DescendantsTracker.clear([]) }.not_to raise_exception
34
+ end
35
+
36
+ include_examples "clearing descendants between test runs"
37
+ end
38
+
39
+ context "without ActiveSupport::DescendantsTracker (cache_classes: false)" do
40
+ before do
41
+ ActiveSupport::DescendantsTracker.disable_clear!
42
+ expect(ActiveSupport::DescendantsTracker.clear_disabled).to be_truthy
43
+ expect { ActiveSupport::DescendantsTracker.clear([]) }.to raise_exception(RuntimeError)
44
+ end
45
+
46
+ include_examples "clearing descendants between test runs"
47
+ end
48
+ end
data/spec/readme_spec.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
- describe 'A blog post' do
5
+ describe "A blog post" do
6
6
  before do
7
- stub_const('MyModule', Module.new)
7
+ stub_const("MyModule", Module.new)
8
8
  end
9
9
 
10
10
  with_model :BlogPost do
@@ -21,11 +21,11 @@ describe 'A blog post' do
21
21
  validates_presence_of :title
22
22
 
23
23
  def self.some_class_method
24
- 'chunky'
24
+ "chunky"
25
25
  end
26
26
 
27
27
  def some_instance_method
28
- 'bacon'
28
+ "bacon"
29
29
  end
30
30
  end
31
31
  end
@@ -43,46 +43,46 @@ describe 'A blog post' do
43
43
  end
44
44
  end
45
45
 
46
- it 'can be accessed as a constant' do
46
+ it "can be accessed as a constant" do
47
47
  expect(BlogPost).to be
48
48
  end
49
49
 
50
- it 'has the module' do
51
- expect(BlogPost.include?(MyModule)).to eq true
50
+ it "has the module" do
51
+ expect(BlogPost.include?(MyModule)).to be true
52
52
  end
53
53
 
54
- it 'has the class method' do
55
- expect(BlogPost.some_class_method).to eq 'chunky'
54
+ it "has the class method" do
55
+ expect(BlogPost.some_class_method).to eq "chunky"
56
56
  end
57
57
 
58
- it 'has the instance method' do
59
- expect(BlogPost.new.some_instance_method).to eq 'bacon'
58
+ it "has the instance method" do
59
+ expect(BlogPost.new.some_instance_method).to eq "bacon"
60
60
  end
61
61
 
62
- it 'can do all the things a regular model can' do
62
+ it "can do all the things a regular model can" do
63
63
  record = BlogPost.new
64
64
  expect(record).not_to be_valid
65
- record.title = 'foo'
65
+ record.title = "foo"
66
66
  expect(record).to be_valid
67
- expect(record.save).to eq true
67
+ expect(record.save).to be true
68
68
  expect(record.reload).to eq record
69
- record.comments.create!(text: 'Lorem ipsum')
69
+ record.comments.create!(text: "Lorem ipsum")
70
70
  expect(record.comments.count).to eq 1
71
71
  end
72
72
 
73
73
  # with_model classes can have inheritance.
74
- class Car < ActiveRecord::Base
74
+ class Car < ActiveRecord::Base # standard:disable Lint/ConstantDefinitionInBlock
75
75
  self.abstract_class = true
76
76
  end
77
77
 
78
78
  with_model :Ford, superclass: Car
79
79
 
80
- it 'has a specified superclass' do
81
- expect(Ford < Car).to eq true
80
+ it "has a specified superclass" do
81
+ expect(Ford < Car).to be true
82
82
  end
83
83
  end
84
84
 
85
- describe 'with_model can be run within RSpec :all hook' do
85
+ describe "with_model can be run within RSpec :all hook" do
86
86
  with_model :BlogPost, scope: :all do
87
87
  table do |t|
88
88
  t.string :title
@@ -93,26 +93,26 @@ describe 'with_model can be run within RSpec :all hook' do
93
93
  BlogPost.create # without scope: :all these will fail
94
94
  end
95
95
 
96
- it 'has been initialized within before(:all)' do
96
+ it "has been initialized within before(:all)" do
97
97
  expect(BlogPost.count).to eq 1
98
98
  end
99
99
  end
100
100
 
101
- describe 'another example group' do
102
- it 'does not have the constant anymore' do
101
+ describe "another example group" do
102
+ it "does not have the constant anymore" do
103
103
  expect(defined?(BlogPost)).to be_falsy
104
104
  end
105
105
  end
106
106
 
107
- describe 'with table options' do
107
+ describe "with table options" do
108
108
  with_model :WithOptions do
109
109
  table id: false do |t|
110
- t.string 'foo'
110
+ t.string "foo"
111
111
  t.timestamps null: false
112
112
  end
113
113
  end
114
114
 
115
- it 'respects the additional options' do
116
- expect(WithOptions.columns.map(&:name)).not_to include('id')
115
+ it "respects the additional options" do
116
+ expect(WithOptions.columns.map(&:name)).not_to include("id")
117
117
  end
118
118
  end
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Workaround for JRuby CI failure https://github.com/jruby/jruby/issues/6547#issuecomment-774104996
4
- if RUBY_ENGINE == 'jruby'
5
- require 'i18n/backend'
6
- require 'i18n/backend/simple'
7
- end
8
-
9
- require 'simplecov'
10
- SimpleCov.start
11
-
12
- require 'bundler/setup'
13
- require 'with_model'
3
+ require "bundler/setup"
4
+ require "with_model"
14
5
 
15
6
  RSpec.configure do |config|
16
7
  config.extend WithModel
@@ -26,24 +17,21 @@ RSpec.configure do |config|
26
17
  end
27
18
  end
28
19
 
29
- is_jruby = RUBY_PLATFORM == 'java'
30
- adapter = is_jruby ? 'jdbcsqlite3' : 'sqlite3'
31
-
32
20
  # WithModel requires ActiveRecord::Base.connection to be established.
33
21
  # If ActiveRecord already has a connection, as in a Rails app, this is unnecessary.
34
- require 'active_record'
35
- ActiveRecord::Base.establish_connection(adapter: adapter, database: ':memory:')
22
+ require "active_record"
23
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
36
24
 
37
25
  I18n.enforce_available_locales = true if defined?(I18n) && I18n.respond_to?(:enforce_available_locales=)
38
26
 
39
- if ENV['LOGGER']
40
- require 'logger'
27
+ if ENV["LOGGER"]
28
+ require "logger"
41
29
  ActiveRecord::Base.logger = Logger.new($stdout)
42
30
  end
43
31
 
44
32
  module SpecHelper
45
33
  module RailsTestCompatibility
46
- require 'minitest'
34
+ require "minitest"
47
35
  include Minitest::Assertions
48
36
 
49
37
  def assertions