swagger_coverage 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8aeb44f6290fe04d25d56b89862264368fd69417
4
- data.tar.gz: 8fb14feaad8ce9dd638237e99ac7dc1f311c3c50
3
+ metadata.gz: f613780fa11b8056da41a388bf857bd52d2e038c
4
+ data.tar.gz: 3adf5b54efdfbe3a7c9468f377dabafe38846630
5
5
  SHA512:
6
- metadata.gz: 87cf78283587434a7fbd9966b6a96b497f4f1d5e95d1de853ca6b54af27b2aa062fbb9e32f7d5feadbb9a44b206b0a856141286f7fcdf35236bbe0c4e159730e
7
- data.tar.gz: b172e45c17e67c0e4f469752d73eac4ab1628dea90b9bf1aff25f40184b444db2f4834bb1b014dc56e05b0b867658ab178fe2354f2449ce4a42e521d007e2e26
6
+ metadata.gz: ee1228d7de4d959277dd517c627b2619205238c38ed65140e9e0ec4d819028bc6b446d49aa798a436972d4e4c780ee8926d63db63fcfb8c5efa967e6a404572d
7
+ data.tar.gz: 2566daa222437eb37aed1455e71c21fe12d5ebac01050b1e0709c572af44e763ccf17daec5a71cfedddfcedf25eee3431ac1961c6218a87a4a855c37726c0b42
data/lib/code_parser.rb CHANGED
@@ -5,19 +5,21 @@ class CodeParser
5
5
  end
6
6
 
7
7
  #returns an empty array if no api_endpoints in code
8
- def api_endpoints(output = @raw_routes_output, api = false)
8
+ def api_endpoints(output = @raw_routes_output)
9
9
  endpoints = []
10
10
  parsed_routes(output).each do |route|
11
11
  if route[:route] != nil
12
- if api
13
- endpoints << route[:route] if route[:route].include?('/api')
14
- else
15
- endpoints << route[:route]
16
- end
12
+ endpoints << route[:route] if route[:route].include?('/api')
17
13
  end
18
14
  end
19
- contains_api = endpoints.any? { |route| route.include?('/api') }
20
- endpoints = [] if !contains_api
15
+ endpoints
16
+ end
17
+
18
+ def all_endpoints(output = @raw_routes_output)
19
+ endpoints = []
20
+ parsed_routes(output).each do |route|
21
+ endpoints << route[:route] if route[:route] != nil
22
+ end
21
23
  endpoints
22
24
  end
23
25
 
data/lib/swagger_cov.rb CHANGED
@@ -19,7 +19,7 @@ module SwaggerCoverage
19
19
  end
20
20
 
21
21
  def check_routes(api = false)
22
- code_endpoints = @code_parser.api_endpoints(@output, api)
22
+ code_endpoints = @code_parser.api_endpoints(@output)
23
23
  swagger_endpoints = @swagger_parser.api_endpoints
24
24
  routes_diff = compare_routes(code_endpoints, swagger_endpoints)
25
25
  end
@@ -39,6 +39,30 @@ module SwaggerCoverage
39
39
  endpoint_diff
40
40
  end
41
41
 
42
- end
42
+ def source_api_routes
43
+ output = @output
44
+ endpoints = []
45
+ @code_parser.parsed_routes(output).each do |route|
46
+ if route[:route] != nil
47
+ endpoints << route[:route] if route[:route].include?('/api')
48
+ end
49
+ end
50
+ endpoints.sort
51
+ end
52
+
53
+ def source_routes
54
+ output = @output
55
+ endpoints = []
56
+ @code_parser.parsed_routes(ouput) do |route|
57
+ endpoints << route[:route] if route[:route] != nil
58
+ end
59
+ endpoints.sort
60
+ end
43
61
 
62
+ def swagger_api_routes
63
+ swagger_routes = @swagger_parser.api_endpoints
64
+ swagger_routes.sort
65
+ end
66
+
67
+ end
44
68
  end
@@ -1,3 +1,3 @@
1
1
  module SwaggerCoverage
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -13,8 +13,10 @@ class SwaggerParser
13
13
  def api_endpoints
14
14
  endpoints = []
15
15
  base_path = @parse['basePath']
16
+ swag_path = ''
16
17
  @parse['paths'].each do |path|
17
- endpoints << base_path + path.first.gsub('{', ':').gsub('}', '')
18
+ swag_path = base_path + path.first.gsub('{', ':').gsub('}', '')
19
+ endpoints << swag_path if swag_path.include?('api')
18
20
  end
19
21
  endpoints
20
22
  end
@@ -23,7 +25,7 @@ class SwaggerParser
23
25
  request_types_arr = []
24
26
  paths_arr = []
25
27
  @parse['paths'].each do |path|
26
- paths_arr << path.first
28
+ paths_arr << path.first if path.first.include?('api')
27
29
  end
28
30
  paths_arr.each do |path|
29
31
  @yaml_file ? req = @parse['paths'] : req = @parse['paths'][path]
@@ -0,0 +1,25 @@
1
+ health_path GET /health Grid.HealthController :index
2
+ page_path GET / Grid.PageController :index
3
+ visit_path GET /api/public/visit/show_by_nexus_id/:id Grid.VisitController :show_by_nexus_id
4
+ visit_path GET /api/public/visit/show_by_user_id/:id Grid.VisitController :show_by_user_id
5
+ app_stat_path GET /api/public/app_stats Grid.AppStatController :index
6
+ app_stat_path GET /api/public/app_stats/:id/edit Grid.AppStatController :edit
7
+ app_stat_path GET /api/public/app_stats/new Grid.AppStatController :new
8
+ app_stat_path GET /api/public/app_stats/:id Grid.AppStatController :show
9
+ app_stat_path POST /api/public/app_stats Grid.AppStatController :create
10
+ app_stat_path PATCH /api/public/app_stats/:id Grid.AppStatController :update
11
+ PUT /api/public/app_stats/:id Grid.AppStatController :update
12
+ app_stat_path DELETE /api/public/app_stats/:id Grid.AppStatController :delete
13
+ user_path GET /api/public/users Grid.UserController :index
14
+ user_path GET /api/public/users/:id Grid.UserController :show
15
+ user_path POST /api/public/users Grid.UserController :create
16
+ user_path PATCH /api/public/users/:id Grid.UserController :update
17
+ PUT /api/public/users/:id Grid.UserController :update
18
+ user_path DELETE /api/public/users/:id Grid.UserController :delete
19
+ user_nexus_identity_path GET /api/public/users/:user_id/nexus_identities Grid.NexusIdentityController :index
20
+ nexus_identity_path GET /api/public/nexus_identities Grid.NexusIdentityController :index
21
+ nexus_identity_path GET /api/public/nexus_identities/:id Grid.NexusIdentityController :show
22
+ nexus_identity_path POST /api/public/nexus_identities Grid.NexusIdentityController :create
23
+ nexus_identity_path PATCH /api/public/nexus_identities/:id Grid.NexusIdentityController :update
24
+ PUT /api/public/nexus_identities/:id Grid.NexusIdentityController :update
25
+ nexus_identity_path DELETE /api/public/nexus_identities/:id Grid.NexusIdentityController :delete
@@ -0,0 +1 @@
1
+ {"swagger":"2.0","schemes":["http"],"produces":["application/json"],"paths":{"/health":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":""}},"/api/public/visit/show_by_user_id/{id}":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"schema":{"type":"object","title":"ShowByUserId","required":["last_cloud_visit","last_networking_visit"],"properties":{"last_networking_visit":{"type":"string","format":"date-time"},"last_cloud_visit":{"type":"string","format":"date-time"}}},"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":"Spiceworks Id"}],"operationId":"show_by_user_id","description":"Retrieve last cloud and networking visit by user id"}},"/api/public/visit/show_by_nexus_id/{id}":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"schema":{"type":"object","title":"ShowByNexusId","required":["last_cloud_visit","last_networking_visit"],"properties":{"last_networking_visit":{"type":"string","format":"date-time"},"last_cloud_visit":{"type":"string","format":"date-time"}}},"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"string","required":true,"name":"id","in":"path","description":"Nexus Id"}],"operationId":"show_by_nexus_id","description":"Retrieve last cloud and networking visit by user id"}},"/api/public/users/{user_id}/nexus_identities":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"string","required":true,"name":"user_id","in":"path","description":""}],"operationId":"index","description":""}},"/api/public/users/{id}":{"put":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"400":{"description":"Request contains bad values"},"204":{"description":"No Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"update","description":""},"patch":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"update","description":""},"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"schema":{"$ref":"#/definitions/Grid.User"},"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":"Spiceworks Id"}],"operationId":"show","description":"Retrieve user"},"delete":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"204":{"description":"No Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"delete","description":""}},"/api/public/users":{"post":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"400":{"description":"Request contains bad values"},"201":{"description":"Resource created"}},"produces":["application/json"],"parameters":[{"required":true,"name":"type","in":"body","description":"The new User","schema":{"$ref":"#/definitions/Grid.User"}}],"operationId":"create","description":"Create a User"},"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"schema":{"title":"Users","type":"array","items":{"$ref":"#/definitions/Grid.User"}},"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":"Retrieve all Users"}},"/api/public/nexus_identities/{id}":{"put":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"400":{"description":"Request contains bad values"},"204":{"description":"No Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"update","description":""},"patch":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"update","description":""},"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"show","description":""},"delete":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"204":{"description":"No Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"delete","description":""}},"/api/public/nexus_identities":{"post":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"400":{"description":"Request contains bad values"},"201":{"description":"Resource created"}},"produces":["application/json"],"parameters":[],"operationId":"create","description":""},"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":""}},"/api/public/app_stats/{id}/edit":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"edit","description":""}},"/api/public/app_stats/{id}":{"put":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"400":{"description":"Request contains bad values"},"204":{"description":"No Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"update","description":""},"patch":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"update","description":""},"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"show","description":""},"delete":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"204":{"description":"No Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"delete","description":""}},"/api/public/app_stats/new":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"new","description":""}},"/api/public/app_stats":{"post":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"400":{"description":"Request contains bad values"},"201":{"description":"Resource created"}},"produces":["application/json"],"parameters":[],"operationId":"create","description":""},"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":""}},"nil":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":""}}},"info":{"version":"","title":"GRID","termsOfService":"","license":{"url":"","name":""},"description":"","contact":{"url":"","name":"Fraser Mince","email":"fraserm@spiceworks.com"}},"host":"api.spiceworks.com","definitions":{"Grid.User":{"required":["spiceworks_id","last_cloud_visit","last_networking_visit"],"properties":{"updated_at":{"type":"string","format":"date-time"},"spiceworks_id":{"type":"integer","format":"int64"},"last_networking_visit":{"type":"string","format":"date-time"},"last_cloud_visit":{"type":"string","format":"date-time"},"inserted_at":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"}}},"Grid.NexusIdentity":{"required":["nexus_id"],"properties":{"user_id":{"type":"integer","format":"int64"},"updated_at":{"type":"string","format":"date-time"},"nexus_id":{"type":"string"},"inserted_at":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"}}},"Grid.AppStat":{"required":["key","value"],"properties":{"value":{"type":"integer","format":"int64"},"updated_at":{"type":"string","format":"date-time"},"key":{"type":"string"},"inserted_at":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"}}}},"consumes":["application/json"],"basePath":""}
data/routes.txt ADDED
@@ -0,0 +1,5 @@
1
+ page_path GET /lookup/:id IpCheck.PageController :show
2
+ health_path GET /health IpCheck.HealthController :index
3
+ api_path GET /api IpCheck.ApiController :index
4
+ v1_api_path GET /api/v1 IpCheck.V1.ApiController :index
5
+ v1_page_path GET /api/v1/lookup/:id IpCheck.V1.PageController :show
data/swagger.json CHANGED
@@ -1,177 +1 @@
1
- {
2
- "swagger": "2.0",
3
- "info": {
4
- "title": "Stratocumulus API",
5
- "description": "Finally you can use the cloud with Stratocumulus",
6
- "version": "1.0.0"
7
- },
8
- "schemes": [
9
- "https"
10
- ],
11
- "basePath": "/api",
12
- "produces": [
13
- "application/json"
14
- ],
15
- "paths": {
16
- "/status": {
17
- "get": {
18
- "summary": "Statuses",
19
- "description": "The Status endpoint returns the currently stored statuses.\n",
20
- "tags": [
21
- "Statuses"
22
- ],
23
- "responses": {
24
- "200": {
25
- "description": "An array of Statuses",
26
- "schema": {
27
- "type": "array",
28
- "items": {
29
- "$ref": "#/definitions/Status"
30
- }
31
- }
32
- }
33
- }
34
- },
35
- "post": {
36
- "summary": "Create new Statuses",
37
- "description": "This endpoint allows the user to create a new status.\n",
38
- "tags": [
39
- "Statuses"
40
- ],
41
- "responses": {
42
- "200": {
43
- "description": "Returns the ID and name of the new status",
44
- "schema": {
45
- "$ref": "#/definitions/Status"
46
- }
47
- }
48
- }
49
- }
50
- },
51
- "/status/{id}": {
52
- "get": {
53
- "summary": "Get specific Status",
54
- "description": "This endpoint returns a specific status.\n",
55
- "tags": [
56
- "Statuses"
57
- ],
58
- "parameters": [
59
- {
60
- "name": "id",
61
- "in": "path",
62
- "description": "ID of status to fetch",
63
- "required": true,
64
- "type": "integer",
65
- "format": "int64"
66
- }
67
- ],
68
- "responses": {
69
- "200": {
70
- "description": "Returns the ID and name of the requested status",
71
- "schema": {
72
- "$ref": "#/definitions/Status"
73
- }
74
- }
75
- }
76
- },
77
- "patch": {
78
- "summary": "Update specific Status",
79
- "description": "This endpoint allws the user to update a specific status.\n",
80
- "tags": [
81
- "Statuses"
82
- ],
83
- "parameters": [
84
- {
85
- "name": "id",
86
- "in": "path",
87
- "description": "ID of status to update",
88
- "required": true,
89
- "type": "integer"
90
- },
91
- {
92
- "name": "status",
93
- "in": "formData",
94
- "description": "Updated status",
95
- "required": false,
96
- "type": "string"
97
- }
98
- ],
99
- "responses": {
100
- "200": {
101
- "description": "Returns the ID and name of the updated status",
102
- "schema": {
103
- "$ref": "#/definitions/Status"
104
- }
105
- }
106
- }
107
- },
108
- "put": {
109
- "summary": "Replace existing Status",
110
- "description": "This endpoint allws the user to replace an existing status.\n",
111
- "tags": [
112
- "Statuses"
113
- ],
114
- "parameters": [
115
- {
116
- "name": "id",
117
- "in": "path",
118
- "description": "ID of status to update",
119
- "required": true,
120
- "type": "integer"
121
- },
122
- {
123
- "name": "status",
124
- "in": "formData",
125
- "description": "New status",
126
- "required": true,
127
- "type": "string"
128
- }
129
- ],
130
- "responses": {
131
- "200": {
132
- "description": "Returns the ID and name of the patched status",
133
- "schema": {
134
- "$ref": "#/definitions/Status"
135
- }
136
- }
137
- }
138
- },
139
- "delete": {
140
- "summary": "Delete existing Status",
141
- "description": "This endpoint allws the user to delete an existing status.\n",
142
- "tags": [
143
- "Statuses"
144
- ],
145
- "parameters": [
146
- {
147
- "name": "id",
148
- "in": "path",
149
- "description": "ID of status to delete",
150
- "required": true,
151
- "type": "integer"
152
- }
153
- ],
154
- "responses": {
155
- "200": {
156
- "description": "Not sure what this returns currently"
157
- }
158
- }
159
- }
160
- }
161
- },
162
- "definitions": {
163
- "Status": {
164
- "type": "object",
165
- "properties": {
166
- "id": {
167
- "type": "string",
168
- "description": "Unique identifier representing a status."
169
- },
170
- "status": {
171
- "type": "string",
172
- "description": "The name of the status."
173
- }
174
- }
175
- }
176
- }
177
- }
1
+ {"swagger":"2.0","schemes":["http"],"produces":["application/json"],"paths":{"/api/v1/lookup/{id}":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[{"type":"integer","required":true,"name":"id","in":"path","description":""}],"operationId":"show","description":""}},"/api/v1":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":""}},"/api":{"get":{"responses":{"500":{"description":"Internal Server Error"},"404":{"description":"Resource not found"},"401":{"description":"Request is not authorized"},"200":{"description":"Resource Content"}},"produces":["application/json"],"parameters":[],"operationId":"index","description":""}}},"info":{"version":"","title":"ip-check-backend","termsOfService":"","license":{"url":"","name":""},"description":"","contact":{"url":"","name":"Jason Hatchett","email":"jasonh@spiceworks.com"}},"host":"api.spiceworks.com","definitions":{"Ecto.Migration.SchemaMigration":{"properties":{"version":{"type":"integer","format":"int64"},"inserted_at":{"type":"string","format":"date-time"}}}},"consumes":["application/json"],"basePath":""}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_coverage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Harthcock
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-18 00:00:00.000000000 Z
11
+ date: 2016-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -49,6 +49,9 @@ files:
49
49
  - lib/swagger_cov.rb
50
50
  - lib/swagger_coverage/version.rb
51
51
  - lib/swagger_parser.rb
52
+ - non_api_routes_test_info/routes.txt
53
+ - non_api_routes_test_info/swagger.json
54
+ - routes.txt
52
55
  - swagger.json
53
56
  - swagger_coverage.gemspec
54
57
  homepage: https://gitlab.spice.spiceworks.com/spiceworks/swagger-cov.git