with_model 2.1.5 → 2.1.7
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/.bundle/config +2 -0
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/ci.yml +44 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +11 -0
- data/.rubocop_todo.yml +0 -15
- data/CHANGELOG.md +13 -0
- data/Gemfile +12 -3
- data/LICENSE +1 -1
- data/README.md +6 -4
- data/Rakefile +12 -9
- data/lib/with_model/model.rb +5 -1
- data/lib/with_model/version.rb +1 -1
- data/lib/with_model.rb +54 -14
- data/spec/active_record_behaviors_spec.rb +2 -1
- data/spec/constant_stubber_spec.rb +2 -3
- data/spec/readme_spec.rb +3 -3
- data/spec/spec_helper.rb +7 -1
- data/spec/with_model_spec.rb +13 -10
- data/test/test_helper.rb +28 -0
- data/test/with_model_test.rb +39 -0
- data/with_model.gemspec +4 -20
- metadata +14 -155
- data/.travis.yml +0 -44
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 83aa1a692c521015759725b2641f53304ab13f6c3aac17550dc7b802c8e015ea
|
|
4
|
+
data.tar.gz: e8c44ffe440d68a3f8311f2250a2184e88fffbe1d9713f0b870a5c15fcf8ec2e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3acf78cc398a2c3c7612a1ee534d3d11ed93f701b8cbfaa218d8b64fb5c3dc0a3a5cf23080f3853e97cf1ba72a9cc202673f058a7c784213287bf9b81e0a1e85
|
|
7
|
+
data.tar.gz: 0b8ccf8fa27e19880fbfdd166d3eb0974cecaecc94955c2d32204306eb3ca48f050f2b578a9042d81a34e0bfc7d6ab14e5c42b16d802e4b16cfc7efeb38bfecc
|
data/.bundle/config
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
- github-actions
|
|
8
|
+
pull_request:
|
|
9
|
+
branches:
|
|
10
|
+
- master
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
env:
|
|
16
|
+
CI: true
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
ruby-version: ['2.7', '3.0', '3.1', '3.2']
|
|
21
|
+
active-record-version-env:
|
|
22
|
+
- ACTIVE_RECORD_VERSION="~> 6.0.0"
|
|
23
|
+
- ACTIVE_RECORD_VERSION="~> 6.1.0"
|
|
24
|
+
- ACTIVE_RECORD_VERSION="~> 7.0.0"
|
|
25
|
+
allow-failure: [false]
|
|
26
|
+
include:
|
|
27
|
+
- ruby-version: '3.2'
|
|
28
|
+
active-record-version-env: ACTIVE_RECORD_BRANCH="7-0-stable"
|
|
29
|
+
allow-failure: true
|
|
30
|
+
- ruby-version: '3.2'
|
|
31
|
+
active-record-version-env: ACTIVE_RECORD_BRANCH="6-1-stable"
|
|
32
|
+
allow-failure: true
|
|
33
|
+
continue-on-error: ${{ matrix.allow-failure }}
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v3
|
|
36
|
+
- name: Set up Ruby
|
|
37
|
+
uses: ruby/setup-ruby@v1
|
|
38
|
+
with:
|
|
39
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
40
|
+
bundler-cache: true
|
|
41
|
+
- name: Update bundle
|
|
42
|
+
run: ${{ matrix.active-record-version-env }} bundle update
|
|
43
|
+
- name: Run tests
|
|
44
|
+
run: ${{ matrix.active-record-version-env }} bin/rake
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
|
@@ -3,9 +3,14 @@ inherit_from: .rubocop_todo.yml
|
|
|
3
3
|
require:
|
|
4
4
|
- rubocop-rake
|
|
5
5
|
- rubocop-rspec
|
|
6
|
+
- rubocop-minitest
|
|
6
7
|
|
|
7
8
|
AllCops:
|
|
8
9
|
NewCops: enable
|
|
10
|
+
TargetRubyVersion: 2.7
|
|
11
|
+
Exclude:
|
|
12
|
+
- 'bin/**/*'
|
|
13
|
+
- 'vendor/bundle/**/*'
|
|
9
14
|
|
|
10
15
|
Metrics/BlockLength:
|
|
11
16
|
Exclude:
|
|
@@ -18,5 +23,11 @@ Bundler/OrderedGems:
|
|
|
18
23
|
Bundler/DuplicatedGem:
|
|
19
24
|
Enabled: false
|
|
20
25
|
|
|
26
|
+
RSpec/Be:
|
|
27
|
+
Enabled: false
|
|
28
|
+
|
|
29
|
+
RSpec/BeforeAfterAll:
|
|
30
|
+
Enabled: false
|
|
31
|
+
|
|
21
32
|
Style/Documentation:
|
|
22
33
|
Enabled: false
|
data/.rubocop_todo.yml
CHANGED
|
@@ -6,21 +6,6 @@
|
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
|
8
8
|
|
|
9
|
-
# Offense count: 4
|
|
10
|
-
RSpec/Be:
|
|
11
|
-
Exclude:
|
|
12
|
-
- 'spec/readme_spec.rb'
|
|
13
|
-
- 'spec/with_model_spec.rb'
|
|
14
|
-
|
|
15
|
-
# Offense count: 3
|
|
16
|
-
RSpec/BeforeAfterAll:
|
|
17
|
-
Exclude:
|
|
18
|
-
- 'spec/spec_helper.rb'
|
|
19
|
-
- 'spec/rails_helper.rb'
|
|
20
|
-
- 'spec/support/**/*.rb'
|
|
21
|
-
- 'spec/readme_spec.rb'
|
|
22
|
-
- 'spec/with_model_spec.rb'
|
|
23
|
-
|
|
24
9
|
# Offense count: 6
|
|
25
10
|
# Configuration parameters: Prefixes.
|
|
26
11
|
# Prefixes: when, with, without
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
### 2.1.7
|
|
2
|
+
- Require Ruby 2.7 or later
|
|
3
|
+
- Add Ruby 3.2 support
|
|
4
|
+
- Require Active Record 6.0 or later
|
|
5
|
+
- Improve minitest support (Mark Edmondson)
|
|
6
|
+
- Limit scope when clearing descendants tracker (idea from Jean-Baptiste Jacquinot)
|
|
7
|
+
|
|
8
|
+
### 2.1.6
|
|
9
|
+
- Require Ruby 2.6 or later
|
|
10
|
+
- Add Ruby 3.0 and 3.1 support
|
|
11
|
+
- Add Active Record 6.1 and 7.0 support
|
|
12
|
+
- Add minitest support (Miks Miķelsons)
|
|
13
|
+
|
|
1
14
|
### 2.1.5
|
|
2
15
|
|
|
3
16
|
- Add support for Active Record 6.1
|
data/Gemfile
CHANGED
|
@@ -4,8 +4,8 @@ source 'https://rubygems.org'
|
|
|
4
4
|
|
|
5
5
|
gemspec
|
|
6
6
|
|
|
7
|
-
ar_branch = ENV
|
|
8
|
-
ar_version = ENV
|
|
7
|
+
ar_branch = ENV.fetch('ACTIVE_RECORD_BRANCH', nil)
|
|
8
|
+
ar_version = ENV.fetch('ACTIVE_RECORD_VERSION', nil)
|
|
9
9
|
is_jruby = RUBY_PLATFORM == 'java'
|
|
10
10
|
|
|
11
11
|
if ar_branch
|
|
@@ -21,4 +21,13 @@ elsif ar_version
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
gem '
|
|
24
|
+
gem 'bundler'
|
|
25
|
+
gem 'minitest'
|
|
26
|
+
gem 'rake'
|
|
27
|
+
gem 'rspec'
|
|
28
|
+
gem 'rubocop'
|
|
29
|
+
gem 'rubocop-minitest'
|
|
30
|
+
gem 'rubocop-rake'
|
|
31
|
+
gem 'rubocop-rspec'
|
|
32
|
+
gem 'simplecov'
|
|
33
|
+
gem 'sqlite3', '~> 1.6.0' unless is_jruby
|
data/LICENSE
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Copyright (c) 2010
|
|
1
|
+
Copyright (c) 2010–2022 Casebook, PBC <http://www.casebook.net>
|
|
2
2
|
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
4
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# [with_model](https://github.com/Casecommons/with_model)
|
|
2
2
|
|
|
3
3
|
[](https://rubygems.org/gems/with_model)
|
|
4
|
-
[](https://github.com/Casecommons/with_model/actions/workflows/ci.yml)
|
|
5
5
|
[](https://www.rubydoc.info/gems/with_model)
|
|
6
6
|
|
|
7
7
|
`with_model` dynamically builds an Active Record model (with table) before each test in a group and destroys it afterwards.
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
15
|
-
Install as usual: `gem install with_model` or add `gem 'with_model'` to your Gemfile. See `.
|
|
15
|
+
Install as usual: `gem install with_model` or add `gem 'with_model'` to your Gemfile. See [`.github/workflows/ci.yml`](./.github/workflows/ci.yml) for supported (tested) Ruby versions.
|
|
16
16
|
|
|
17
17
|
### RSpec
|
|
18
18
|
|
|
@@ -28,11 +28,13 @@ end
|
|
|
28
28
|
|
|
29
29
|
### minitest/spec
|
|
30
30
|
|
|
31
|
-
Extend `WithModel` into minitest/spec:
|
|
31
|
+
Extend `WithModel` into minitest/spec and set the test runner explicitly:
|
|
32
32
|
|
|
33
33
|
```ruby
|
|
34
34
|
require 'with_model'
|
|
35
35
|
|
|
36
|
+
WithModel.runner = :minitest
|
|
37
|
+
|
|
36
38
|
class Minitest::Spec
|
|
37
39
|
extend WithModel
|
|
38
40
|
end
|
|
@@ -181,5 +183,5 @@ In general, `with_model` is not guaranteed to be thread-safe, but is, in certain
|
|
|
181
183
|
|
|
182
184
|
## License
|
|
183
185
|
|
|
184
|
-
Copyright © 2010–
|
|
186
|
+
Copyright © 2010–2022 [Casebook PBC](https://www.casebook.net).
|
|
185
187
|
Licensed under the MIT license, see [LICENSE](/LICENSE) file.
|
data/Rakefile
CHANGED
|
@@ -2,19 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
require 'bundler/gem_tasks'
|
|
4
4
|
require 'rspec/core/rake_task'
|
|
5
|
+
require 'rake/testtask'
|
|
5
6
|
require 'rubocop/rake_task'
|
|
6
7
|
|
|
7
8
|
desc 'Run specs'
|
|
8
|
-
RSpec::Core::RakeTask.new
|
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
|
10
|
+
t.pattern = Dir.glob('spec/**/*_spec.rb')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc 'Run tests'
|
|
14
|
+
Rake::TestTask.new(:test) do |t|
|
|
15
|
+
t.libs << 'test'
|
|
16
|
+
t.libs << 'lib'
|
|
17
|
+
t.pattern = 'test/**/*_test.rb'
|
|
18
|
+
end
|
|
9
19
|
|
|
10
20
|
desc 'Run lint'
|
|
11
21
|
RuboCop::RakeTask.new
|
|
12
22
|
|
|
13
|
-
|
|
14
|
-
desc 'Generate README and preview in browser'
|
|
15
|
-
task 'readme' do
|
|
16
|
-
sh 'markdown README.md > README.html && open README.html'
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
task default: %i[spec rubocop]
|
|
23
|
+
task default: %i[spec test rubocop]
|
data/lib/with_model/model.rb
CHANGED
|
@@ -55,7 +55,11 @@ module WithModel
|
|
|
55
55
|
|
|
56
56
|
def cleanup_descendants_tracking
|
|
57
57
|
if defined?(ActiveSupport::DescendantsTracker)
|
|
58
|
-
ActiveSupport::
|
|
58
|
+
if ActiveSupport::VERSION::MAJOR >= 7
|
|
59
|
+
ActiveSupport::DescendantsTracker.clear([@model])
|
|
60
|
+
else
|
|
61
|
+
ActiveSupport::DescendantsTracker.class_variable_get(:@@direct_descendants).delete(ActiveRecord::Base)
|
|
62
|
+
end
|
|
59
63
|
elsif @model.superclass.respond_to?(:direct_descendants)
|
|
60
64
|
@model.superclass.direct_descendants.delete(@model)
|
|
61
65
|
end
|
data/lib/with_model/version.rb
CHANGED
data/lib/with_model.rb
CHANGED
|
@@ -6,37 +6,77 @@ require 'with_model/table'
|
|
|
6
6
|
require 'with_model/version'
|
|
7
7
|
|
|
8
8
|
module WithModel
|
|
9
|
+
class MiniTestLifeCycle < Module
|
|
10
|
+
def initialize(object)
|
|
11
|
+
define_method :before_setup do
|
|
12
|
+
object.create
|
|
13
|
+
super() if defined?(super)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
define_method :after_teardown do
|
|
17
|
+
object.destroy
|
|
18
|
+
super() if defined?(super)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def self.call(object)
|
|
23
|
+
new(object)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class << self
|
|
28
|
+
attr_writer :runner
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.runner
|
|
32
|
+
@runner ||= :rspec
|
|
33
|
+
end
|
|
34
|
+
|
|
9
35
|
# @param [Symbol] name The constant name to assign the model class to.
|
|
10
|
-
# @param scope Passed to `before`/`after` in the test context.
|
|
36
|
+
# @param scope Passed to `before`/`after` in the test context. RSpec only.
|
|
11
37
|
# @param options Passed to {WithModel::Model#initialize}.
|
|
12
38
|
# @param block Yielded an instance of {WithModel::Model::DSL}.
|
|
13
39
|
def with_model(name, scope: nil, **options, &block)
|
|
40
|
+
runner = options.delete(:runner)
|
|
14
41
|
model = Model.new name, **options
|
|
15
42
|
dsl = Model::DSL.new model
|
|
16
43
|
dsl.instance_exec(&block) if block
|
|
17
44
|
|
|
18
|
-
|
|
19
|
-
model.create
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
after(*scope) do
|
|
23
|
-
model.destroy
|
|
24
|
-
end
|
|
45
|
+
setup_object(model, scope: scope, runner: runner)
|
|
25
46
|
end
|
|
26
47
|
|
|
27
48
|
# @param [Symbol] name The table name to create.
|
|
28
|
-
# @param scope Passed to `before`/`after` in the test context.
|
|
49
|
+
# @param scope Passed to `before`/`after` in the test context. Rspec only.
|
|
29
50
|
# @param options Passed to {WithModel::Table#initialize}.
|
|
30
51
|
# @param block Passed to {WithModel::Table#initialize} (like {WithModel::Model::DSL#table}).
|
|
31
52
|
def with_table(name, scope: nil, **options, &block)
|
|
53
|
+
runner = options.delete(:runner)
|
|
32
54
|
table = Table.new name, options, &block
|
|
33
55
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
56
|
+
setup_object(table, scope: scope, runner: runner)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
# @param [Object] object The new model object instance to create
|
|
62
|
+
# @param scope Passed to `before`/`after` in the test context. Rspec only.
|
|
63
|
+
# @param [Symbol] runner The test running, either :rspec or :minitest, defaults to :rspec
|
|
64
|
+
def setup_object(object, scope: nil, runner: nil) # rubocop:disable Metrics/MethodLength
|
|
65
|
+
case runner || WithModel.runner
|
|
66
|
+
when :rspec
|
|
67
|
+
before(*scope) do
|
|
68
|
+
object.create
|
|
69
|
+
end
|
|
37
70
|
|
|
38
|
-
|
|
39
|
-
|
|
71
|
+
after(*scope) do
|
|
72
|
+
object.destroy
|
|
73
|
+
end
|
|
74
|
+
when :minitest
|
|
75
|
+
class_eval do
|
|
76
|
+
include MiniTestLifeCycle.call(object)
|
|
77
|
+
end
|
|
78
|
+
else
|
|
79
|
+
raise ArgumentError, 'Unsupported test runner set, expected :rspec or :minitest'
|
|
40
80
|
end
|
|
41
81
|
end
|
|
42
82
|
end
|
|
@@ -7,6 +7,7 @@ describe 'ActiveRecord behaviors' do
|
|
|
7
7
|
context 'that has a named scope' do
|
|
8
8
|
before do
|
|
9
9
|
@regular_model = Class.new ActiveRecord::Base do
|
|
10
|
+
self.table_name = 'regular_models'
|
|
10
11
|
scope :title_is_foo, -> { where(title: 'foo') }
|
|
11
12
|
end
|
|
12
13
|
|
|
@@ -104,7 +105,7 @@ describe 'ActiveRecord behaviors' do
|
|
|
104
105
|
|
|
105
106
|
context 'in earlier examples' do
|
|
106
107
|
it 'works as normal' do
|
|
107
|
-
Province.create!(country: Country.create!)
|
|
108
|
+
expect { Province.create!(country: Country.create!) }.not_to raise_error
|
|
108
109
|
end
|
|
109
110
|
end
|
|
110
111
|
|
|
@@ -7,13 +7,12 @@ module WithModel
|
|
|
7
7
|
it 'allows calling unstub_const multiple times' do
|
|
8
8
|
stubber = described_class.new('Foo')
|
|
9
9
|
stubber.stub_const(1)
|
|
10
|
-
stubber.unstub_const
|
|
11
|
-
stubber.unstub_const
|
|
10
|
+
expect { 2.times { stubber.unstub_const } }.not_to raise_error
|
|
12
11
|
end
|
|
13
12
|
|
|
14
13
|
it 'allows calling unstub_const without stub_const' do
|
|
15
14
|
stubber = described_class.new('Foo')
|
|
16
|
-
stubber.unstub_const
|
|
15
|
+
expect { stubber.unstub_const }.not_to raise_error
|
|
17
16
|
end
|
|
18
17
|
end
|
|
19
18
|
end
|
data/spec/readme_spec.rb
CHANGED
|
@@ -48,7 +48,7 @@ describe 'A blog post' do
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
it 'has the module' do
|
|
51
|
-
expect(BlogPost.include?(MyModule)).to
|
|
51
|
+
expect(BlogPost.include?(MyModule)).to be true
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
it 'has the class method' do
|
|
@@ -64,7 +64,7 @@ describe 'A blog post' do
|
|
|
64
64
|
expect(record).not_to be_valid
|
|
65
65
|
record.title = 'foo'
|
|
66
66
|
expect(record).to be_valid
|
|
67
|
-
expect(record.save).to
|
|
67
|
+
expect(record.save).to be true
|
|
68
68
|
expect(record.reload).to eq record
|
|
69
69
|
record.comments.create!(text: 'Lorem ipsum')
|
|
70
70
|
expect(record.comments.count).to eq 1
|
|
@@ -78,7 +78,7 @@ describe 'A blog post' do
|
|
|
78
78
|
with_model :Ford, superclass: Car
|
|
79
79
|
|
|
80
80
|
it 'has a specified superclass' do
|
|
81
|
-
expect(Ford < Car).to
|
|
81
|
+
expect(Ford < Car).to be true
|
|
82
82
|
end
|
|
83
83
|
end
|
|
84
84
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
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
|
+
|
|
3
9
|
require 'simplecov'
|
|
4
10
|
SimpleCov.start
|
|
5
11
|
|
|
@@ -36,7 +42,7 @@ if ENV['LOGGER']
|
|
|
36
42
|
end
|
|
37
43
|
|
|
38
44
|
module SpecHelper
|
|
39
|
-
module
|
|
45
|
+
module RailsTestCompatibility
|
|
40
46
|
require 'minitest'
|
|
41
47
|
include Minitest::Assertions
|
|
42
48
|
|
data/spec/with_model_spec.rb
CHANGED
|
@@ -5,7 +5,7 @@ require 'spec_helper'
|
|
|
5
5
|
|
|
6
6
|
shared_examples_for 'ActiveModel' do
|
|
7
7
|
require 'active_model/lint'
|
|
8
|
-
include SpecHelper::
|
|
8
|
+
include SpecHelper::RailsTestCompatibility
|
|
9
9
|
include ActiveModel::Lint::Tests
|
|
10
10
|
|
|
11
11
|
active_model_methods = ActiveModel::Lint::Tests.public_instance_methods
|
|
@@ -13,9 +13,12 @@ shared_examples_for 'ActiveModel' do
|
|
|
13
13
|
|
|
14
14
|
active_model_lint_tests.each do |method_name|
|
|
15
15
|
friendly_name = method_name.tr('_', ' ')
|
|
16
|
+
|
|
17
|
+
# rubocop:disable RSpec/NoExpectationExample
|
|
16
18
|
example friendly_name do
|
|
17
19
|
public_send method_name.to_sym
|
|
18
20
|
end
|
|
21
|
+
# rubocop:enable RSpec/NoExpectationExample
|
|
19
22
|
end
|
|
20
23
|
|
|
21
24
|
before { @model = subject }
|
|
@@ -73,7 +76,7 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
73
76
|
|
|
74
77
|
describe '.with_model?' do
|
|
75
78
|
it 'returns true' do
|
|
76
|
-
expect(BlogPost.with_model?).to
|
|
79
|
+
expect(BlogPost.with_model?).to be true
|
|
77
80
|
end
|
|
78
81
|
end
|
|
79
82
|
|
|
@@ -84,7 +87,7 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
84
87
|
|
|
85
88
|
context 'after an example which uses with_model without shadowing an existing constant' do
|
|
86
89
|
it 'returns the constant to its undefined state' do
|
|
87
|
-
expect(non_shadowing_example_ran).to
|
|
90
|
+
expect(non_shadowing_example_ran).to be true
|
|
88
91
|
expect(defined?(BlogPost)).to be_falsy
|
|
89
92
|
end
|
|
90
93
|
end
|
|
@@ -108,7 +111,7 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
108
111
|
|
|
109
112
|
context 'without the with_model block' do
|
|
110
113
|
it 'returns the constant to its original value' do
|
|
111
|
-
expect(shadowing_example_ran).to
|
|
114
|
+
expect(shadowing_example_ran).to be true
|
|
112
115
|
expect(MyConst).to eq 1
|
|
113
116
|
end
|
|
114
117
|
end
|
|
@@ -151,8 +154,8 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
151
154
|
with_model :'Stuff::BlogPost'
|
|
152
155
|
|
|
153
156
|
it 'creates the model in the namespace' do
|
|
154
|
-
expect(defined?(
|
|
155
|
-
expect(defined?(
|
|
157
|
+
expect(defined?(BlogPost)).to be_falsey
|
|
158
|
+
expect(defined?(Stuff::BlogPost)).to be_truthy
|
|
156
159
|
end
|
|
157
160
|
end
|
|
158
161
|
|
|
@@ -182,8 +185,8 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
182
185
|
end
|
|
183
186
|
|
|
184
187
|
it 'has the mixin' do
|
|
185
|
-
expect(-> {
|
|
186
|
-
expect(
|
|
188
|
+
expect(-> { WithAMixin.new.foo }).not_to raise_error
|
|
189
|
+
expect(WithAMixin.include?(AMixin)).to be true
|
|
187
190
|
end
|
|
188
191
|
end
|
|
189
192
|
|
|
@@ -377,7 +380,7 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
377
380
|
end
|
|
378
381
|
|
|
379
382
|
it 'is a subclass of the supplied superclass' do
|
|
380
|
-
expect(BlogPost < BlogPostParent).to
|
|
383
|
+
expect(BlogPost < BlogPostParent).to be true
|
|
381
384
|
end
|
|
382
385
|
|
|
383
386
|
it 'is its own base_class' do
|
|
@@ -385,7 +388,7 @@ describe 'a temporary ActiveRecord model created with with_model' do
|
|
|
385
388
|
end
|
|
386
389
|
|
|
387
390
|
it 'responds to .with_model? with true' do
|
|
388
|
-
expect(BlogPost.with_model?).to
|
|
391
|
+
expect(BlogPost.with_model?).to be true
|
|
389
392
|
end
|
|
390
393
|
end
|
|
391
394
|
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
|
4
|
+
|
|
5
|
+
# Workaround for JRuby CI failure https://github.com/jruby/jruby/issues/6547#issuecomment-774104996
|
|
6
|
+
if RUBY_ENGINE == 'jruby'
|
|
7
|
+
require 'i18n/backend'
|
|
8
|
+
require 'i18n/backend/simple'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
require 'with_model'
|
|
12
|
+
require 'minitest/autorun'
|
|
13
|
+
|
|
14
|
+
WithModel.runner = :minitest
|
|
15
|
+
|
|
16
|
+
module MiniTest
|
|
17
|
+
class Test
|
|
18
|
+
extend WithModel
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
is_jruby = RUBY_PLATFORM == 'java'
|
|
23
|
+
adapter = is_jruby ? 'jdbcsqlite3' : 'sqlite3'
|
|
24
|
+
|
|
25
|
+
# WithModel requires ActiveRecord::Base.connection to be established.
|
|
26
|
+
# If ActiveRecord already has a connection, as in a Rails app, this is unnecessary.
|
|
27
|
+
require 'active_record'
|
|
28
|
+
ActiveRecord::Base.establish_connection(adapter: adapter, database: ':memory:')
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
class WithModelTest < MiniTest::Test
|
|
6
|
+
with_model :BlogPost do
|
|
7
|
+
table do |t|
|
|
8
|
+
t.string 'title'
|
|
9
|
+
t.text 'content'
|
|
10
|
+
t.timestamps null: false
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
model do
|
|
14
|
+
def fancy_title
|
|
15
|
+
"Title: #{title}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_it_should_act_like_a_normal_active_record_model # rubocop:disable Minitest/MultipleAssertions
|
|
21
|
+
record = BlogPost.create!(title: 'New blog post', content: 'Hello, world!')
|
|
22
|
+
|
|
23
|
+
record.reload
|
|
24
|
+
|
|
25
|
+
assert_equal 'New blog post', record.title
|
|
26
|
+
assert_equal 'Hello, world!', record.content
|
|
27
|
+
assert record.updated_at
|
|
28
|
+
|
|
29
|
+
record.destroy
|
|
30
|
+
|
|
31
|
+
assert_raises ActiveRecord::RecordNotFound do
|
|
32
|
+
record.reload
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_it_has_the_methods_defined_in_its_model_block
|
|
37
|
+
assert_equal 'Title: New blog post', BlogPost.new(title: 'New blog post').fancy_title
|
|
38
|
+
end
|
|
39
|
+
end
|
data/with_model.gemspec
CHANGED
|
@@ -12,29 +12,13 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
spec.summary = 'Dynamically build a model within an RSpec context'
|
|
13
13
|
spec.description = spec.summary
|
|
14
14
|
spec.license = 'MIT'
|
|
15
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
15
16
|
|
|
16
|
-
spec.files = `git ls-files`.split(
|
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
17
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ['lib']
|
|
20
20
|
|
|
21
|
-
spec.required_ruby_version = '>= 2.
|
|
21
|
+
spec.required_ruby_version = '>= 2.7'
|
|
22
22
|
|
|
23
|
-
spec.add_dependency 'activerecord', '>=
|
|
24
|
-
|
|
25
|
-
spec.add_development_dependency 'bundler', '~> 2.0'
|
|
26
|
-
spec.add_development_dependency 'minitest'
|
|
27
|
-
spec.add_development_dependency 'rake'
|
|
28
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
29
|
-
spec.add_development_dependency 'rubocop'
|
|
30
|
-
spec.add_development_dependency 'rubocop-rake'
|
|
31
|
-
spec.add_development_dependency 'rubocop-rspec'
|
|
32
|
-
spec.add_development_dependency 'simplecov'
|
|
33
|
-
spec.add_development_dependency 'yard'
|
|
34
|
-
|
|
35
|
-
if RUBY_PLATFORM == 'java'
|
|
36
|
-
spec.add_development_dependency 'activerecord-jdbcsqlite3-adapter'
|
|
37
|
-
else
|
|
38
|
-
spec.add_development_dependency 'sqlite3'
|
|
39
|
-
end
|
|
23
|
+
spec.add_dependency 'activerecord', '>= 6.0'
|
|
40
24
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: with_model
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.1.
|
|
4
|
+
version: 2.1.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Case Commons, LLC
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date:
|
|
13
|
+
date: 2023-09-15 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: activerecord
|
|
@@ -18,154 +18,14 @@ dependencies:
|
|
|
18
18
|
requirements:
|
|
19
19
|
- - ">="
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version: '
|
|
21
|
+
version: '6.0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
25
|
requirements:
|
|
26
26
|
- - ">="
|
|
27
27
|
- !ruby/object:Gem::Version
|
|
28
|
-
version: '
|
|
29
|
-
- !ruby/object:Gem::Dependency
|
|
30
|
-
name: bundler
|
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
|
32
|
-
requirements:
|
|
33
|
-
- - "~>"
|
|
34
|
-
- !ruby/object:Gem::Version
|
|
35
|
-
version: '2.0'
|
|
36
|
-
type: :development
|
|
37
|
-
prerelease: false
|
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
39
|
-
requirements:
|
|
40
|
-
- - "~>"
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: '2.0'
|
|
43
|
-
- !ruby/object:Gem::Dependency
|
|
44
|
-
name: minitest
|
|
45
|
-
requirement: !ruby/object:Gem::Requirement
|
|
46
|
-
requirements:
|
|
47
|
-
- - ">="
|
|
48
|
-
- !ruby/object:Gem::Version
|
|
49
|
-
version: '0'
|
|
50
|
-
type: :development
|
|
51
|
-
prerelease: false
|
|
52
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
53
|
-
requirements:
|
|
54
|
-
- - ">="
|
|
55
|
-
- !ruby/object:Gem::Version
|
|
56
|
-
version: '0'
|
|
57
|
-
- !ruby/object:Gem::Dependency
|
|
58
|
-
name: rake
|
|
59
|
-
requirement: !ruby/object:Gem::Requirement
|
|
60
|
-
requirements:
|
|
61
|
-
- - ">="
|
|
62
|
-
- !ruby/object:Gem::Version
|
|
63
|
-
version: '0'
|
|
64
|
-
type: :development
|
|
65
|
-
prerelease: false
|
|
66
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
67
|
-
requirements:
|
|
68
|
-
- - ">="
|
|
69
|
-
- !ruby/object:Gem::Version
|
|
70
|
-
version: '0'
|
|
71
|
-
- !ruby/object:Gem::Dependency
|
|
72
|
-
name: rspec
|
|
73
|
-
requirement: !ruby/object:Gem::Requirement
|
|
74
|
-
requirements:
|
|
75
|
-
- - "~>"
|
|
76
|
-
- !ruby/object:Gem::Version
|
|
77
|
-
version: '3.0'
|
|
78
|
-
type: :development
|
|
79
|
-
prerelease: false
|
|
80
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
81
|
-
requirements:
|
|
82
|
-
- - "~>"
|
|
83
|
-
- !ruby/object:Gem::Version
|
|
84
|
-
version: '3.0'
|
|
85
|
-
- !ruby/object:Gem::Dependency
|
|
86
|
-
name: rubocop
|
|
87
|
-
requirement: !ruby/object:Gem::Requirement
|
|
88
|
-
requirements:
|
|
89
|
-
- - ">="
|
|
90
|
-
- !ruby/object:Gem::Version
|
|
91
|
-
version: '0'
|
|
92
|
-
type: :development
|
|
93
|
-
prerelease: false
|
|
94
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
95
|
-
requirements:
|
|
96
|
-
- - ">="
|
|
97
|
-
- !ruby/object:Gem::Version
|
|
98
|
-
version: '0'
|
|
99
|
-
- !ruby/object:Gem::Dependency
|
|
100
|
-
name: rubocop-rake
|
|
101
|
-
requirement: !ruby/object:Gem::Requirement
|
|
102
|
-
requirements:
|
|
103
|
-
- - ">="
|
|
104
|
-
- !ruby/object:Gem::Version
|
|
105
|
-
version: '0'
|
|
106
|
-
type: :development
|
|
107
|
-
prerelease: false
|
|
108
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
109
|
-
requirements:
|
|
110
|
-
- - ">="
|
|
111
|
-
- !ruby/object:Gem::Version
|
|
112
|
-
version: '0'
|
|
113
|
-
- !ruby/object:Gem::Dependency
|
|
114
|
-
name: rubocop-rspec
|
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
|
116
|
-
requirements:
|
|
117
|
-
- - ">="
|
|
118
|
-
- !ruby/object:Gem::Version
|
|
119
|
-
version: '0'
|
|
120
|
-
type: :development
|
|
121
|
-
prerelease: false
|
|
122
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
123
|
-
requirements:
|
|
124
|
-
- - ">="
|
|
125
|
-
- !ruby/object:Gem::Version
|
|
126
|
-
version: '0'
|
|
127
|
-
- !ruby/object:Gem::Dependency
|
|
128
|
-
name: simplecov
|
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
|
130
|
-
requirements:
|
|
131
|
-
- - ">="
|
|
132
|
-
- !ruby/object:Gem::Version
|
|
133
|
-
version: '0'
|
|
134
|
-
type: :development
|
|
135
|
-
prerelease: false
|
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
137
|
-
requirements:
|
|
138
|
-
- - ">="
|
|
139
|
-
- !ruby/object:Gem::Version
|
|
140
|
-
version: '0'
|
|
141
|
-
- !ruby/object:Gem::Dependency
|
|
142
|
-
name: yard
|
|
143
|
-
requirement: !ruby/object:Gem::Requirement
|
|
144
|
-
requirements:
|
|
145
|
-
- - ">="
|
|
146
|
-
- !ruby/object:Gem::Version
|
|
147
|
-
version: '0'
|
|
148
|
-
type: :development
|
|
149
|
-
prerelease: false
|
|
150
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
151
|
-
requirements:
|
|
152
|
-
- - ">="
|
|
153
|
-
- !ruby/object:Gem::Version
|
|
154
|
-
version: '0'
|
|
155
|
-
- !ruby/object:Gem::Dependency
|
|
156
|
-
name: sqlite3
|
|
157
|
-
requirement: !ruby/object:Gem::Requirement
|
|
158
|
-
requirements:
|
|
159
|
-
- - ">="
|
|
160
|
-
- !ruby/object:Gem::Version
|
|
161
|
-
version: '0'
|
|
162
|
-
type: :development
|
|
163
|
-
prerelease: false
|
|
164
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
165
|
-
requirements:
|
|
166
|
-
- - ">="
|
|
167
|
-
- !ruby/object:Gem::Version
|
|
168
|
-
version: '0'
|
|
28
|
+
version: '6.0'
|
|
169
29
|
description: Dynamically build a model within an RSpec context
|
|
170
30
|
email:
|
|
171
31
|
- casecommons-dev@googlegroups.com
|
|
@@ -175,12 +35,14 @@ executables: []
|
|
|
175
35
|
extensions: []
|
|
176
36
|
extra_rdoc_files: []
|
|
177
37
|
files:
|
|
38
|
+
- ".bundle/config"
|
|
39
|
+
- ".github/dependabot.yml"
|
|
40
|
+
- ".github/workflows/ci.yml"
|
|
178
41
|
- ".gitignore"
|
|
179
42
|
- ".jrubyrc"
|
|
180
43
|
- ".rspec"
|
|
181
44
|
- ".rubocop.yml"
|
|
182
45
|
- ".rubocop_todo.yml"
|
|
183
|
-
- ".travis.yml"
|
|
184
46
|
- ".yardopts"
|
|
185
47
|
- CHANGELOG.md
|
|
186
48
|
- Gemfile
|
|
@@ -200,11 +62,14 @@ files:
|
|
|
200
62
|
- spec/readme_spec.rb
|
|
201
63
|
- spec/spec_helper.rb
|
|
202
64
|
- spec/with_model_spec.rb
|
|
65
|
+
- test/test_helper.rb
|
|
66
|
+
- test/with_model_test.rb
|
|
203
67
|
- with_model.gemspec
|
|
204
68
|
homepage: https://github.com/Casecommons/with_model
|
|
205
69
|
licenses:
|
|
206
70
|
- MIT
|
|
207
|
-
metadata:
|
|
71
|
+
metadata:
|
|
72
|
+
rubygems_mfa_required: 'true'
|
|
208
73
|
post_install_message:
|
|
209
74
|
rdoc_options: []
|
|
210
75
|
require_paths:
|
|
@@ -213,21 +78,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
213
78
|
requirements:
|
|
214
79
|
- - ">="
|
|
215
80
|
- !ruby/object:Gem::Version
|
|
216
|
-
version: '2.
|
|
81
|
+
version: '2.7'
|
|
217
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
83
|
requirements:
|
|
219
84
|
- - ">="
|
|
220
85
|
- !ruby/object:Gem::Version
|
|
221
86
|
version: '0'
|
|
222
87
|
requirements: []
|
|
223
|
-
rubygems_version: 3.
|
|
88
|
+
rubygems_version: 3.4.19
|
|
224
89
|
signing_key:
|
|
225
90
|
specification_version: 4
|
|
226
91
|
summary: Dynamically build a model within an RSpec context
|
|
227
|
-
test_files:
|
|
228
|
-
- spec/.rubocop.yml
|
|
229
|
-
- spec/active_record_behaviors_spec.rb
|
|
230
|
-
- spec/constant_stubber_spec.rb
|
|
231
|
-
- spec/readme_spec.rb
|
|
232
|
-
- spec/spec_helper.rb
|
|
233
|
-
- spec/with_model_spec.rb
|
|
92
|
+
test_files: []
|
data/.travis.yml
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
language: ruby
|
|
2
|
-
cache: bundler
|
|
3
|
-
|
|
4
|
-
rvm:
|
|
5
|
-
- 2.7.1
|
|
6
|
-
- 2.6.6
|
|
7
|
-
- 2.5.8
|
|
8
|
-
- 2.4.10
|
|
9
|
-
- jruby-9.2.13.0
|
|
10
|
-
|
|
11
|
-
env:
|
|
12
|
-
global:
|
|
13
|
-
- CC_TEST_REPORTER_ID=fe5c8a8b1b951a54707c08b6fb2a9a5edf9e0522d28bccc648454f774c9ccab1
|
|
14
|
-
matrix:
|
|
15
|
-
- ACTIVE_RECORD_BRANCH="master"
|
|
16
|
-
- ACTIVE_RECORD_VERSION="~> 6.1.0.rc1"
|
|
17
|
-
- ACTIVE_RECORD_VERSION="~> 6.0.0"
|
|
18
|
-
- ACTIVE_RECORD_VERSION="~> 5.2.0"
|
|
19
|
-
|
|
20
|
-
matrix:
|
|
21
|
-
fast_finish: true
|
|
22
|
-
allow_failures:
|
|
23
|
-
- env: ACTIVE_RECORD_BRANCH="master"
|
|
24
|
-
- env: ACTIVE_RECORD_VERSION="~> 6.1.0.rc1"
|
|
25
|
-
exclude:
|
|
26
|
-
- rvm: 2.4.10
|
|
27
|
-
env: ACTIVE_RECORD_BRANCH="master"
|
|
28
|
-
- rvm: 2.4.10
|
|
29
|
-
env: ACTIVE_RECORD_VERSION="~> 6.0.0"
|
|
30
|
-
- rvm: 2.4.10
|
|
31
|
-
env: ACTIVE_RECORD_VERSION="~> 6.1.0.rc1"
|
|
32
|
-
- rvm: jruby-9.2.13.0
|
|
33
|
-
env: ACTIVE_RECORD_VERSION="~> 6.0.0"
|
|
34
|
-
|
|
35
|
-
before_install:
|
|
36
|
-
- gem install bundler
|
|
37
|
-
|
|
38
|
-
before_script:
|
|
39
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
|
40
|
-
- chmod +x ./cc-test-reporter
|
|
41
|
-
- ./cc-test-reporter before-build
|
|
42
|
-
|
|
43
|
-
after_script:
|
|
44
|
-
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|