rspec_create_model 0.0.1
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 +7 -0
- data/.github/workflows/gem-push.yml +44 -0
- data/.github/workflows/test.yml +18 -0
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.rubocop.yml +13 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +85 -0
- data/README.md +57 -0
- data/Rakefile +12 -0
- data/lib/rspec_create_model/version.rb +5 -0
- data/lib/rspec_create_model.rb +27 -0
- data/rspec_create_model.gemspec +37 -0
- metadata +72 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 342535e338b1786e3675ed7b49f476c7dbf178705ed890c20e061c5e24488f7a
|
4
|
+
data.tar.gz: f21ca8a2e2a69cfbfaf0bf085504d2bc56554ec22ed9cef89840f71a1d230896
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1502395a4641429d3a5478d9e6c3a3e5bb5f3d3c1c53cbe7d289f61988564cf0b661162f0a3be97a02d21a5e1b41982d800750992194b8ff09d547985f0c5b17
|
7
|
+
data.tar.gz: 48816672e69dc0f92e662c45b18de7a77e77547e1631eb99a39618de5c3e61e3a47e83f6b3b800dd2a6aeb7642ef981fdbb59a8bbf62ac882b8a3825a1e4125e
|
@@ -0,0 +1,44 @@
|
|
1
|
+
name: Ruby Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
tags: [ '*' ]
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
build:
|
9
|
+
name: Build + Publish
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
environment: production
|
12
|
+
permissions:
|
13
|
+
contents: read
|
14
|
+
packages: write
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v3
|
18
|
+
- name: Set up Ruby 3.0
|
19
|
+
uses: actions/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: 3.0.x
|
22
|
+
|
23
|
+
- name: Publish to GPR
|
24
|
+
run: |
|
25
|
+
mkdir -p $HOME/.gem
|
26
|
+
touch $HOME/.gem/credentials
|
27
|
+
chmod 0600 $HOME/.gem/credentials
|
28
|
+
printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
29
|
+
gem build *.gemspec
|
30
|
+
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
|
31
|
+
env:
|
32
|
+
GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
|
33
|
+
OWNER: ${{ github.repository_owner }}
|
34
|
+
|
35
|
+
- name: Publish to RubyGems
|
36
|
+
run: |
|
37
|
+
mkdir -p $HOME/.gem
|
38
|
+
touch $HOME/.gem/credentials
|
39
|
+
chmod 0600 $HOME/.gem/credentials
|
40
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
41
|
+
gem build *.gemspec
|
42
|
+
gem push *.gem
|
43
|
+
env:
|
44
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
name: Tests
|
2
|
+
on: [push, pull_request]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
strategy:
|
6
|
+
fail-fast: false
|
7
|
+
matrix:
|
8
|
+
os: [ubuntu-latest, macos-latest]
|
9
|
+
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
|
10
|
+
ruby: [2.7, '3.0', 3.1, head, truffleruby, truffleruby-head]
|
11
|
+
runs-on: ${{ matrix.os }}
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- uses: ruby/setup-ruby@v1
|
15
|
+
with:
|
16
|
+
ruby-version: ${{ matrix.ruby }}
|
17
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
18
|
+
- run: bundle exec rspec
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
.rspec_status
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.rubocop.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in rspec_match_structure.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
gem "rake", "~> 13.0"
|
9
|
+
|
10
|
+
gem "rspec", "~> 3.0"
|
11
|
+
|
12
|
+
gem "rubocop", "~> 1.7"
|
13
|
+
|
14
|
+
gem "simplecov"
|
15
|
+
|
16
|
+
gem "activerecord", "~> 7.0", ">= 7.0.3"
|
17
|
+
gem 'sqlite3'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rspec_create_model (0.0.1)
|
5
|
+
activesupport
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
activemodel (7.0.3)
|
11
|
+
activesupport (= 7.0.3)
|
12
|
+
activerecord (7.0.3)
|
13
|
+
activemodel (= 7.0.3)
|
14
|
+
activesupport (= 7.0.3)
|
15
|
+
activesupport (7.0.3)
|
16
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
+
i18n (>= 1.6, < 2)
|
18
|
+
minitest (>= 5.1)
|
19
|
+
tzinfo (~> 2.0)
|
20
|
+
ast (2.4.2)
|
21
|
+
concurrent-ruby (1.1.10)
|
22
|
+
diff-lcs (1.4.4)
|
23
|
+
docile (1.4.0)
|
24
|
+
i18n (1.10.0)
|
25
|
+
concurrent-ruby (~> 1.0)
|
26
|
+
minitest (5.16.0)
|
27
|
+
parallel (1.21.0)
|
28
|
+
parser (3.0.2.0)
|
29
|
+
ast (~> 2.4.1)
|
30
|
+
rainbow (3.0.0)
|
31
|
+
rake (13.0.6)
|
32
|
+
regexp_parser (2.1.1)
|
33
|
+
rexml (3.2.5)
|
34
|
+
rspec (3.10.0)
|
35
|
+
rspec-core (~> 3.10.0)
|
36
|
+
rspec-expectations (~> 3.10.0)
|
37
|
+
rspec-mocks (~> 3.10.0)
|
38
|
+
rspec-core (3.10.1)
|
39
|
+
rspec-support (~> 3.10.0)
|
40
|
+
rspec-expectations (3.10.1)
|
41
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
42
|
+
rspec-support (~> 3.10.0)
|
43
|
+
rspec-mocks (3.10.2)
|
44
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
+
rspec-support (~> 3.10.0)
|
46
|
+
rspec-support (3.10.3)
|
47
|
+
rubocop (1.23.0)
|
48
|
+
parallel (~> 1.10)
|
49
|
+
parser (>= 3.0.0.0)
|
50
|
+
rainbow (>= 2.2.2, < 4.0)
|
51
|
+
regexp_parser (>= 1.8, < 3.0)
|
52
|
+
rexml
|
53
|
+
rubocop-ast (>= 1.12.0, < 2.0)
|
54
|
+
ruby-progressbar (~> 1.7)
|
55
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
56
|
+
rubocop-ast (1.13.0)
|
57
|
+
parser (>= 3.0.1.1)
|
58
|
+
ruby-progressbar (1.11.0)
|
59
|
+
simplecov (0.21.2)
|
60
|
+
docile (~> 1.1)
|
61
|
+
simplecov-html (~> 0.11)
|
62
|
+
simplecov_json_formatter (~> 0.1)
|
63
|
+
simplecov-html (0.12.3)
|
64
|
+
simplecov_json_formatter (0.1.3)
|
65
|
+
sqlite3 (1.4.4)
|
66
|
+
tzinfo (2.0.4)
|
67
|
+
concurrent-ruby (~> 1.0)
|
68
|
+
unicode-display_width (2.1.0)
|
69
|
+
|
70
|
+
PLATFORMS
|
71
|
+
x86_64-darwin-19
|
72
|
+
x86_64-darwin-20
|
73
|
+
x86_64-linux
|
74
|
+
|
75
|
+
DEPENDENCIES
|
76
|
+
activerecord (~> 7.0, >= 7.0.3)
|
77
|
+
rake (~> 13.0)
|
78
|
+
rspec (~> 3.0)
|
79
|
+
rspec_create_model!
|
80
|
+
rubocop (~> 1.7)
|
81
|
+
simplecov
|
82
|
+
sqlite3
|
83
|
+
|
84
|
+
BUNDLED WITH
|
85
|
+
2.2.15
|
data/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+

|
2
|
+
[](https://badge.fury.io/rb/rspec_create_model)
|
3
|
+
|
4
|
+
# rspec_create_model
|
5
|
+
|
6
|
+
A rspec matcher for Rail's ActiveRecord, to check the type of models created from actions.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add the gem to your Gemfile
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem 'rspec_create_model', github: 'monade/rspec_create_model'
|
14
|
+
```
|
15
|
+
|
16
|
+
## Example usage
|
17
|
+
|
18
|
+
Given the following records:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
class Author < ActiveRecord::Base
|
22
|
+
attribute :name, type: :String
|
23
|
+
has_many :articles, dependent: :destroy
|
24
|
+
|
25
|
+
after_create :create_empty_book
|
26
|
+
|
27
|
+
def create_empty_book
|
28
|
+
Book.create!(author_id: id, title: "First Empty Book")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Book < ActiveRecord::Base
|
33
|
+
belongs_to :author, optional: false
|
34
|
+
attribute :title, type: :String
|
35
|
+
end
|
36
|
+
```
|
37
|
+
|
38
|
+
You can match created records like this:
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
expect { Author.create!(name: "Some author name") }.to create_model(Author)
|
42
|
+
|
43
|
+
expect { Author.create!(name: "Some author name") }
|
44
|
+
.to create_model(Author)
|
45
|
+
.and create_model(Book)
|
46
|
+
```
|
47
|
+
|
48
|
+
When the matcher is called, 2 instace variable get set: **@created_record** and **@created_records**
|
49
|
+
|
50
|
+
these variables includes the newly created records. You can also use them if you want, like this:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
expect { Author.create!(name: "Some author name") }.to create_model(Author)
|
54
|
+
|
55
|
+
expect(@created_record).to be_a(Author)
|
56
|
+
expect(@created_records).to all(be_a(Author))
|
57
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec::Matchers.define :create_model do |model_class|
|
4
|
+
match(notify_expectation_failures: true) do |block|
|
5
|
+
previous_elements = model_class.all.to_a
|
6
|
+
block.call
|
7
|
+
new_elements = model_class.all.to_a
|
8
|
+
created_elements = new_elements - previous_elements
|
9
|
+
if created_elements.any?
|
10
|
+
block.binding.receiver.instance_variable_set(:@created_record, created_elements.first)
|
11
|
+
block.binding.receiver.instance_variable_set(:@created_records, created_elements)
|
12
|
+
true
|
13
|
+
else
|
14
|
+
false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
supports_block_expectations
|
19
|
+
|
20
|
+
failure_message do |_|
|
21
|
+
"Expected { } to create a new #{model_class}, but it didn't."
|
22
|
+
end
|
23
|
+
|
24
|
+
failure_message_when_negated do |_|
|
25
|
+
"Expected { } not to create a new #{model_class}, but it did."
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path("lib", __dir__)
|
4
|
+
|
5
|
+
require_relative "lib/rspec_create_model/version"
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = "rspec_create_model"
|
9
|
+
spec.version = RspecCreateModel::VERSION
|
10
|
+
spec.authors = ["Mònade"]
|
11
|
+
spec.email = ["hello@monade.io"]
|
12
|
+
|
13
|
+
spec.summary = "An RSpec matcher to match the structure of a given created model."
|
14
|
+
spec.description = "An RSpec matcher to match the structure of a given created model."
|
15
|
+
spec.homepage = "https://github.com/monade/rspec_create_model"
|
16
|
+
spec.license = "MIT"
|
17
|
+
spec.required_ruby_version = ">= 2.5"
|
18
|
+
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
21
|
+
spec.metadata["changelog_uri"] = "https://github.com/monade/rspec_create_model/CHANGELOG.md"
|
22
|
+
|
23
|
+
# Specify which files should be added to the gem when it is released.
|
24
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
27
|
+
end
|
28
|
+
spec.bindir = "exe"
|
29
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
30
|
+
spec.require_paths = ["lib"]
|
31
|
+
|
32
|
+
# Uncomment to register a new dependency of your gem
|
33
|
+
spec.add_dependency "activesupport"
|
34
|
+
|
35
|
+
# For more information and examples about making a new gem, checkout our
|
36
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rspec_create_model
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mònade
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-07-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: An RSpec matcher to match the structure of a given created model.
|
28
|
+
email:
|
29
|
+
- hello@monade.io
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".github/workflows/gem-push.yml"
|
35
|
+
- ".github/workflows/test.yml"
|
36
|
+
- ".gitignore"
|
37
|
+
- ".rspec"
|
38
|
+
- ".rubocop.yml"
|
39
|
+
- Gemfile
|
40
|
+
- Gemfile.lock
|
41
|
+
- README.md
|
42
|
+
- Rakefile
|
43
|
+
- lib/rspec_create_model.rb
|
44
|
+
- lib/rspec_create_model/version.rb
|
45
|
+
- rspec_create_model.gemspec
|
46
|
+
homepage: https://github.com/monade/rspec_create_model
|
47
|
+
licenses:
|
48
|
+
- MIT
|
49
|
+
metadata:
|
50
|
+
homepage_uri: https://github.com/monade/rspec_create_model
|
51
|
+
source_code_uri: https://github.com/monade/rspec_create_model
|
52
|
+
changelog_uri: https://github.com/monade/rspec_create_model/CHANGELOG.md
|
53
|
+
post_install_message:
|
54
|
+
rdoc_options: []
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.5'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
requirements: []
|
68
|
+
rubygems_version: 3.2.33
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: An RSpec matcher to match the structure of a given created model.
|
72
|
+
test_files: []
|