swagcov 0.2.5 → 0.3.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.
- checksums.yaml +4 -4
- data/README.md +18 -9
- data/lib/swagcov/coverage.rb +9 -3
- data/lib/swagcov/dotfile.rb +10 -3
- data/lib/swagcov/version.rb +1 -1
- data/lib/tasks/swagcove.rake +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5aaf6a7a919c70669dc24a129159b2ce961aa237495d57cfd1d94350bbad526f
|
4
|
+
data.tar.gz: e312bf832ceca1bc66017b131c958ab9f70ea4efddc32fac9bda0fcb369d7696
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14de18f74737e418b16153aea8c9f107545b9445fc5956dd0617ddbae4a0ad78be83017d6df8f442724186d38fd44a47b8462d4dc7ce2590c2b7aae26aaff201
|
7
|
+
data.tar.gz: b22dc442442935535df66b494d9f24f4475517eb36468208d24a3ad3b43f49202eb6ada1679efc1657804ea2e789b62b8dac030009ad1bf282fc9b6b3cfa1853
|
data/README.md
CHANGED
@@ -6,6 +6,10 @@
|
|
6
6
|
|
7
7
|
See OpenAPI documentation coverage report for Rails Routes.
|
8
8
|
|
9
|
+
## Usages
|
10
|
+
- See overview of different endpoints covered, missing and what you choose to ignore.
|
11
|
+
- Add pass/fail to your build pipeline when missing Documentation Coverage.
|
12
|
+
|
9
13
|
## Installation
|
10
14
|
Add this line to your application's Gemfile:
|
11
15
|
```ruby
|
@@ -41,7 +45,7 @@ Create a `.swagcov.yml` in root of your Rails application.
|
|
41
45
|
- /v1/foobar/:token
|
42
46
|
```
|
43
47
|
|
44
|
-
- Example `.swagcov.yml` Config File:
|
48
|
+
- Full Example `.swagcov.yml` Config File:
|
45
49
|
```yml
|
46
50
|
docs:
|
47
51
|
paths:
|
@@ -60,7 +64,7 @@ Execute:
|
|
60
64
|
bundle exec rake swagcov
|
61
65
|
```
|
62
66
|
|
63
|
-
|
67
|
+
### Example configurations and output from running `bundle exec rake swagcov` from the root of your Rails Application:
|
64
68
|
- All Routes (minimal configuration):
|
65
69
|
```yml
|
66
70
|
docs:
|
@@ -115,12 +119,14 @@ bundle
|
|
115
119
|
|
116
120
|
Run Tests
|
117
121
|
```
|
118
|
-
bundle exec rspec spec --exclude-pattern spec/
|
122
|
+
bundle exec rspec spec --exclude-pattern spec/sandbox_**/**/*_spec.rb
|
119
123
|
```
|
120
124
|
|
121
125
|
### Test via Sandbox Application
|
122
|
-
|
123
|
-
- `cd spec/sandbox_5_2/`
|
126
|
+
- Go to any sandbox application within the `spec` directory
|
127
|
+
- For example, `cd spec/sandbox_5_2/`
|
128
|
+
- Install the ruby version specified in `.ruby-version` file
|
129
|
+
- Install gems: `bundle install`
|
124
130
|
- Run tests: `bundle exec rspec spec`
|
125
131
|
- Run `bundle exec rake swagcov`
|
126
132
|
- This will run against any changes made to your branch.
|
@@ -135,12 +141,15 @@ For Rails 5
|
|
135
141
|
- This command builds the gem, creates a tag and publishes to rubygems, see [bundler docs](https://bundler.io/guides/creating_gem.html#releasing-the-gem).
|
136
142
|
|
137
143
|
## TODO
|
138
|
-
-
|
139
|
-
- Test against different rails versions
|
140
|
-
- Create Sandbox App for Rails 6
|
144
|
+
- Create Rails 7 / Ruby 3.1 Sandbox
|
141
145
|
- Add autogeneration of ignore paths
|
142
146
|
- Add `CONTRIBUTING.md`
|
143
|
-
- Add GitHub
|
147
|
+
- Add GitHub Action for linting
|
144
148
|
|
145
149
|
## Credit
|
146
150
|
To [@lonelyelk](https://github.com/lonelyelk) for initial development!
|
151
|
+
|
152
|
+
## Contributors
|
153
|
+
<a href="https://github.com/smridge/swagcov/graphs/contributors">
|
154
|
+
<img src="https://contrib.rocks/image?repo=smridge/swagcov" />
|
155
|
+
</a>
|
data/lib/swagcov/coverage.rb
CHANGED
@@ -23,7 +23,7 @@ module Swagcov
|
|
23
23
|
|
24
24
|
final_output
|
25
25
|
|
26
|
-
|
26
|
+
@total - @covered
|
27
27
|
end
|
28
28
|
|
29
29
|
private
|
@@ -46,7 +46,7 @@ module Swagcov
|
|
46
46
|
|
47
47
|
@total += 1
|
48
48
|
regex = Regexp.new("^#{path.gsub(%r{:[^/]+}, '\\{[^/]+\\}')}(\\.[^/]+)?$")
|
49
|
-
matching_keys = docs_paths.keys.
|
49
|
+
matching_keys = docs_paths.keys.grep(regex)
|
50
50
|
|
51
51
|
if (doc = docs_paths.dig(matching_keys.first, route.verb.downcase))
|
52
52
|
@covered += 1
|
@@ -59,10 +59,16 @@ module Swagcov
|
|
59
59
|
|
60
60
|
def docs_paths
|
61
61
|
@docs_paths ||= Dir.glob(dotfile.doc_paths).reduce({}) do |acc, docspath|
|
62
|
-
acc.merge(
|
62
|
+
acc.merge(load_yaml(docspath))
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
+
def load_yaml docspath
|
67
|
+
YAML.load_file(docspath)["paths"]
|
68
|
+
rescue Psych::SyntaxError
|
69
|
+
raise BadConfigurationError, "Malinformed openapi file (#{docspath})"
|
70
|
+
end
|
71
|
+
|
66
72
|
def third_party_route? route, path
|
67
73
|
# https://github.com/rails/rails/blob/48f3c3e201b57a4832314b2c957a3b303e89bfea/actionpack/lib/action_dispatch/routing/inspector.rb#L105-L107
|
68
74
|
# Skips route paths like ["/rails/info/properties", "/rails/info", "/rails/mailers"]
|
data/lib/swagcov/dotfile.rb
CHANGED
@@ -7,10 +7,9 @@ module Swagcov
|
|
7
7
|
class Dotfile
|
8
8
|
DEFAULT_CONFIG_FILE_NAME = ".swagcov.yml"
|
9
9
|
|
10
|
-
def initialize pathname: Rails.root.join(DEFAULT_CONFIG_FILE_NAME)
|
11
|
-
|
10
|
+
def initialize pathname: ::Rails.root.join(DEFAULT_CONFIG_FILE_NAME)
|
11
|
+
@dotfile = load_yaml(pathname)
|
12
12
|
|
13
|
-
@dotfile = YAML.load_file(pathname)
|
14
13
|
raise BadConfigurationError, "Invalid config file (#{DEFAULT_CONFIG_FILE_NAME})" unless valid?
|
15
14
|
end
|
16
15
|
|
@@ -30,6 +29,14 @@ module Swagcov
|
|
30
29
|
|
31
30
|
attr_reader :dotfile
|
32
31
|
|
32
|
+
def load_yaml pathname
|
33
|
+
raise BadConfigurationError, "Missing config file (#{DEFAULT_CONFIG_FILE_NAME})" unless pathname.exist?
|
34
|
+
|
35
|
+
YAML.load_file(pathname)
|
36
|
+
rescue Psych::SyntaxError
|
37
|
+
raise BadConfigurationError, "Malinformed config file (#{DEFAULT_CONFIG_FILE_NAME})"
|
38
|
+
end
|
39
|
+
|
33
40
|
def ignored_regex
|
34
41
|
@ignored_regex ||= path_config_regex(dotfile.dig("routes", "paths", "ignore"))
|
35
42
|
end
|
data/lib/swagcov/version.rb
CHANGED
data/lib/tasks/swagcove.rake
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swagcov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sarah Ridge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -119,6 +119,7 @@ metadata:
|
|
119
119
|
homepage_uri: https://github.com/smridge/swagcov
|
120
120
|
source_code_uri: https://github.com/smridge/swagcov
|
121
121
|
changelog_uri: https://github.com/smridge/swagcov/blob/main/CHANGELOG.md
|
122
|
+
rubygems_mfa_required: 'true'
|
122
123
|
post_install_message:
|
123
124
|
rdoc_options: []
|
124
125
|
require_paths:
|
@@ -134,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
135
|
- !ruby/object:Gem::Version
|
135
136
|
version: '0'
|
136
137
|
requirements: []
|
137
|
-
rubygems_version: 3.2.
|
138
|
+
rubygems_version: 3.2.32
|
138
139
|
signing_key:
|
139
140
|
specification_version: 4
|
140
141
|
summary: Open API docs coverage for Rails Routes
|