tomograph 2.5.0 → 3.0.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 +5 -5
- data/.github/workflows/gempush.yml +28 -0
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -1
- data/.tool-versions +2 -0
- data/.travis.yml +4 -3
- data/CHANGELOG.md +30 -1
- data/README.md +178 -156
- data/exe/tomograph +4 -10
- data/lib/tomograph/api_blueprint/crafter/yaml.rb +4 -4
- data/lib/tomograph/api_blueprint/crafter/yaml/action.rb +5 -3
- data/lib/tomograph/api_blueprint/drafter_4/yaml.rb +3 -3
- data/lib/tomograph/api_blueprint/drafter_4/yaml/action.rb +5 -3
- data/lib/tomograph/api_blueprint/json_schema.rb +1 -1
- data/lib/tomograph/tomogram.rb +1 -4
- data/lib/tomograph/tomogram/action.rb +4 -4
- data/lib/tomograph/version.rb +1 -1
- data/tomograph.gemspec +8 -8
- metadata +34 -49
- data/lib/tomograph/api_blueprint/drafter_3/yaml.rb +0 -128
- data/lib/tomograph/api_blueprint/drafter_3/yaml/action.rb +0 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c457270d6d9ab0b7d23c4af643248636f3fe9b3f673858700505ab55ee31716f
|
4
|
+
data.tar.gz: d089a1f21d1ab2e739854f962eff9e0e7fcdc3cdb631a595f84a328afc016823
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f31296ba8532f93e0f89f881e0c0aa07a3a2a2752d2f6764be9ac6bf0ee5a8e1103b4f5bc2eb9b8ef0472f70432acaec379d2b914338fefed6f8e7c2842f3d3
|
7
|
+
data.tar.gz: b54f9a273905b2e7d3bd2d91777f46fc5c626dec43124abf6a3b5fed85a63e3ec63e21568498e6f072ab48020a58e6c833ab89a2ef7bf2692acc184c614cb6d4
|
@@ -0,0 +1,28 @@
|
|
1
|
+
name: Ruby Gem
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
name: Build + Publish
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- name: Set up Ruby
|
17
|
+
uses: actions/setup-ruby@v1
|
18
|
+
|
19
|
+
- name: Publish to RubyGems
|
20
|
+
run: |
|
21
|
+
mkdir -p $HOME/.gem
|
22
|
+
touch $HOME/.gem/credentials
|
23
|
+
chmod 0600 $HOME/.gem/credentials
|
24
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
25
|
+
gem build *.gemspec
|
26
|
+
gem push *.gem
|
27
|
+
env:
|
28
|
+
GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.1
|
data/.tool-versions
ADDED
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,35 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
-
###
|
3
|
+
### 3.0.0 - 2020-08-27
|
4
|
+
|
5
|
+
* features
|
6
|
+
* support multi request for one resource path [#27](https://github.com/funbox/tomograph/issues/27)
|
7
|
+
* removed
|
8
|
+
* delete support drafter 3 [#29](https://github.com/funbox/tomograph/issues/29)
|
9
|
+
|
10
|
+
### 2.5.4 - 2020-04-06
|
11
|
+
|
12
|
+
* fixed warnings on ruby 2.7
|
13
|
+
* updated dependences
|
14
|
+
|
15
|
+
# Change log
|
16
|
+
|
17
|
+
### 2.5.3 - 2020-03-10
|
18
|
+
|
19
|
+
* bug fixes
|
20
|
+
* fix parser status to string
|
21
|
+
|
22
|
+
### 2.5.2 - 2020-01-10
|
23
|
+
|
24
|
+
* bug fixes
|
25
|
+
* fix parser for new crafter version
|
26
|
+
|
27
|
+
### 2.5.1 - 2019-12-09
|
28
|
+
|
29
|
+
* bug fixes
|
30
|
+
* fix content_type parsing.
|
31
|
+
|
32
|
+
### 2.5.0 - 2019-05-28
|
4
33
|
|
5
34
|
* features
|
6
35
|
* аdded support for documents with pre-parsed by drafter 4.
|
data/README.md
CHANGED
@@ -1,194 +1,210 @@
|
|
1
|
-
# Tomograph
|
1
|
+
# Tomograph
|
2
2
|
|
3
|
-
|
4
|
-
<img src="https://funbox.ru/badges/sponsored_by_funbox_compact.svg" alt="Sponsored by FunBox" width=250 />
|
5
|
-
</a>
|
3
|
+
[](https://travis-ci.org/funbox/tomograph) [](https://badge.fury.io/rb/tomograph)
|
6
4
|
|
7
5
|
Convert API Blueprint to JSON Schema and search.
|
8
6
|
|
9
7
|
## Installation
|
10
8
|
|
11
|
-
|
9
|
+
First you need to install [drafter](https://github.com/apiaryio/drafter).
|
10
|
+
|
11
|
+
Then add this line to your application's Gemfile:
|
12
12
|
|
13
13
|
```ruby
|
14
14
|
gem 'tomograph'
|
15
15
|
```
|
16
16
|
|
17
|
-
|
17
|
+
After that execute:
|
18
18
|
|
19
|
-
|
19
|
+
```bash
|
20
|
+
$ bundle
|
21
|
+
```
|
20
22
|
|
21
|
-
Or install
|
23
|
+
Or install the gem by yourself:
|
22
24
|
|
23
|
-
|
25
|
+
```bash
|
26
|
+
$ gem install tomograph
|
27
|
+
```
|
24
28
|
|
25
29
|
## Usage
|
26
30
|
|
27
31
|
```ruby
|
28
32
|
require 'tomograph'
|
29
|
-
```
|
30
33
|
|
31
|
-
```ruby
|
32
34
|
tomogram = Tomograph::Tomogram.new(apib_path: '/path/to/doc.apib')
|
33
35
|
```
|
34
36
|
|
35
37
|
### Command line tool
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
+
CLI allows you to convert files from API Blueprint or API Elements to JSON Schema.
|
40
|
+
|
41
|
+
```bash
|
39
42
|
tomograph doc.apib doc.json
|
40
43
|
```
|
41
|
-
|
42
|
-
|
44
|
+
|
45
|
+
There is also support for documents pre-parsed by [drafter](https://github.com/apiaryio/drafter) versions 3 and 4, or `crafter`.
|
46
|
+
To specify the handler version use the `-d` flag:
|
47
|
+
|
48
|
+
```bash
|
43
49
|
tomograph -d 4 doc_by_drafter4.yaml doc.json
|
44
50
|
```
|
45
|
-
|
46
|
-
|
51
|
+
|
52
|
+
Run CLI with `-h` to get detailed help:
|
53
|
+
|
54
|
+
```bash
|
47
55
|
tomograph -h
|
48
56
|
```
|
49
|
-
for more details on usage.
|
50
57
|
|
51
58
|
## Convert
|
52
59
|
|
60
|
+
Use `to_json` for converting APIB to JSON:
|
61
|
+
|
53
62
|
```ruby
|
54
63
|
tomogram.to_json
|
55
64
|
```
|
56
65
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
#
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
+
|
80
|
-
|
81
|
-
+ Response
|
82
|
-
|
83
|
-
+ Response
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
"
|
109
|
-
"
|
110
|
-
|
111
|
-
|
66
|
+
<details>
|
67
|
+
<summary>Example input</summary>
|
68
|
+
|
69
|
+
```apib
|
70
|
+
FORMAT: 1A
|
71
|
+
HOST: http://test.local
|
72
|
+
|
73
|
+
# project
|
74
|
+
|
75
|
+
# Group project
|
76
|
+
|
77
|
+
Project
|
78
|
+
|
79
|
+
## Authentication [/sessions]
|
80
|
+
|
81
|
+
### Sign In [POST]
|
82
|
+
|
83
|
+
+ Request (application/json)
|
84
|
+
|
85
|
+
+ Attributes
|
86
|
+
+ login (string, required)
|
87
|
+
+ password (string, required)
|
88
|
+
+ captcha (string, optional)
|
89
|
+
|
90
|
+
+ Response 401 (application/json)
|
91
|
+
|
92
|
+
+ Response 429 (application/json)
|
93
|
+
|
94
|
+
+ Response 201 (application/json)
|
95
|
+
|
96
|
+
+ Attributes
|
97
|
+
+ confirmation (Confirmation, optional)
|
98
|
+
+ captcha (string, optional)
|
99
|
+
+ captcha_does_not_match (boolean, optional)
|
100
|
+
|
101
|
+
|
102
|
+
# Data Structures
|
103
|
+
|
104
|
+
## Confirmation (object)
|
105
|
+
+ id (string, required)
|
106
|
+
+ type (string, required)
|
107
|
+
+ operation (string, required)
|
108
|
+
```
|
109
|
+
</details>
|
110
|
+
|
111
|
+
<details>
|
112
|
+
<summary>Example output</summary>
|
113
|
+
|
114
|
+
```json
|
115
|
+
[
|
116
|
+
{
|
117
|
+
"path": "/sessions",
|
118
|
+
"method": "POST",
|
119
|
+
"content-type": "application/json",
|
120
|
+
"requests": [{
|
121
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
122
|
+
"type": "object",
|
123
|
+
"properties": {
|
124
|
+
"login": {
|
125
|
+
"type": "string"
|
126
|
+
},
|
127
|
+
"password": {
|
128
|
+
"type": "string"
|
129
|
+
},
|
130
|
+
"captcha": {
|
131
|
+
"type": "string"
|
132
|
+
}
|
112
133
|
},
|
113
|
-
"
|
114
|
-
"
|
134
|
+
"required": [
|
135
|
+
"login",
|
136
|
+
"password"
|
137
|
+
]
|
138
|
+
}],
|
139
|
+
"responses": [
|
140
|
+
{
|
141
|
+
"status": "401",
|
142
|
+
"content-type": "application/json",
|
143
|
+
"body": {}
|
115
144
|
},
|
116
|
-
|
117
|
-
"
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
"$schema": "http://json-schema.org/draft-04/schema#",
|
141
|
-
"type": "object",
|
142
|
-
"properties": {
|
143
|
-
"confirmation": {
|
144
|
-
"type": "object",
|
145
|
-
"properties": {
|
146
|
-
"id": {
|
147
|
-
"type": "string"
|
148
|
-
},
|
149
|
-
"type": {
|
150
|
-
"type": "string"
|
145
|
+
{
|
146
|
+
"status": "429",
|
147
|
+
"content-type": "application/json",
|
148
|
+
"body": {}
|
149
|
+
},
|
150
|
+
{
|
151
|
+
"status": "201",
|
152
|
+
"content-type": "application/json",
|
153
|
+
"body": {
|
154
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
155
|
+
"type": "object",
|
156
|
+
"properties": {
|
157
|
+
"confirmation": {
|
158
|
+
"type": "object",
|
159
|
+
"properties": {
|
160
|
+
"id": {
|
161
|
+
"type": "string"
|
162
|
+
},
|
163
|
+
"type": {
|
164
|
+
"type": "string"
|
165
|
+
},
|
166
|
+
"operation": {
|
167
|
+
"type": "string"
|
168
|
+
}
|
151
169
|
},
|
152
|
-
"
|
153
|
-
"
|
154
|
-
|
170
|
+
"required": [
|
171
|
+
"id",
|
172
|
+
"type",
|
173
|
+
"operation"
|
174
|
+
]
|
155
175
|
},
|
156
|
-
"
|
157
|
-
"
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
"captcha": {
|
163
|
-
"type": "string"
|
164
|
-
},
|
165
|
-
"captcha_does_not_match": {
|
166
|
-
"type": "boolean"
|
176
|
+
"captcha": {
|
177
|
+
"type": "string"
|
178
|
+
},
|
179
|
+
"captcha_does_not_match": {
|
180
|
+
"type": "boolean"
|
181
|
+
}
|
167
182
|
}
|
168
183
|
}
|
169
184
|
}
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
185
|
+
]
|
186
|
+
}
|
187
|
+
]
|
188
|
+
```
|
189
|
+
</details>
|
175
190
|
|
176
191
|
## Search
|
177
192
|
|
178
|
-
|
193
|
+
Use these methods to search through parsed API Blueprint spec to get request => responses hash maps.
|
194
|
+
|
195
|
+
### `find_request`
|
179
196
|
|
180
197
|
```ruby
|
181
198
|
request = tomogram.find_request(method: 'GET', path: '/status/1?qwe=rty')
|
182
199
|
```
|
183
200
|
|
184
|
-
###
|
201
|
+
### `find_request_with_content_type`
|
185
202
|
|
186
203
|
```ruby
|
187
204
|
request = tomogram.find_request_with_content_type(method: 'GET', path: '/status/1?qwe=rty', content_type: 'application/json')
|
188
205
|
```
|
189
206
|
|
190
|
-
### find_responses
|
191
|
-
|
207
|
+
### `find_responses`
|
192
208
|
|
193
209
|
```ruby
|
194
210
|
responses = request.find_responses(status: '200')
|
@@ -196,64 +212,70 @@ responses = request.find_responses(status: '200')
|
|
196
212
|
|
197
213
|
## Other methods
|
198
214
|
|
199
|
-
### prefix_match
|
215
|
+
### `prefix_match?`
|
200
216
|
|
201
|
-
This
|
217
|
+
This may be useful if you specify a prefix.
|
202
218
|
|
203
219
|
```ruby
|
204
220
|
tomogram.prefix_match?('http://local/api/v2/users')
|
205
221
|
```
|
206
222
|
|
207
|
-
|
223
|
+
### `to_resources`
|
208
224
|
|
209
|
-
|
225
|
+
Maps resources with possible requests.
|
226
|
+
|
227
|
+
Example output:
|
210
228
|
|
211
229
|
```ruby
|
212
|
-
|
230
|
+
{
|
231
|
+
'/sessions' => ['POST /sessions']
|
232
|
+
}
|
213
233
|
```
|
214
234
|
|
215
|
-
|
235
|
+
## Constructor params
|
236
|
+
|
237
|
+
You can specify API prefix and path to the spec using one of the possible formats:
|
216
238
|
|
217
239
|
```ruby
|
218
|
-
Tomograph::Tomogram.new(prefix: '/api/v2',
|
240
|
+
Tomograph::Tomogram.new(prefix: '/api/v2', apib_path: '/path/to/doc.apib')
|
219
241
|
```
|
220
242
|
|
221
|
-
|
243
|
+
```ruby
|
244
|
+
Tomograph::Tomogram.new(prefix: '/api/v2', drafter_yaml_path: '/path/to/doc.yaml')
|
245
|
+
```
|
222
246
|
|
223
247
|
```ruby
|
224
248
|
Tomograph::Tomogram.new(prefix: '/api/v2', tomogram_json_path: '/path/to/doc.json')
|
225
249
|
```
|
226
250
|
|
227
|
-
### apib_path
|
251
|
+
### `apib_path`
|
228
252
|
|
229
253
|
Path to API Blueprint documentation. There must be an installed [drafter](https://github.com/apiaryio/drafter) to parse it.
|
230
254
|
|
231
|
-
### drafter_yaml_path
|
255
|
+
### `drafter_yaml_path`
|
232
256
|
|
233
257
|
Path to API Blueprint documentation pre-parsed with `drafter` and saved to a YAML file.
|
234
258
|
|
235
|
-
Drafter
|
259
|
+
### Drafter v4 & Crafter support
|
236
260
|
|
237
|
-
If you are using a `drafter
|
261
|
+
If you are using a `drafter v4`, you should use `drafter_4_apib_path` and `drafter_4_yaml_path` respectively.
|
238
262
|
|
239
|
-
|
263
|
+
In case when you want to use `сrafter`, then you should pass these params: `crafter_apib_path`, `crafter_yaml_path`.
|
264
|
+
|
265
|
+
### `tomogram_json_path`
|
240
266
|
|
241
267
|
Path to API Blueprint documentation converted with `tomograph` to a JSON file.
|
242
268
|
|
243
|
-
### prefix
|
269
|
+
### `prefix`
|
244
270
|
|
245
|
-
Default
|
271
|
+
Default: `''`
|
246
272
|
|
247
|
-
|
273
|
+
Prefix for API requests.
|
248
274
|
|
249
|
-
|
250
|
-
The result for the example above:
|
251
|
-
```ruby
|
252
|
-
{
|
253
|
-
'/sessions' => ['POST /sessions']
|
254
|
-
}
|
255
|
-
```
|
275
|
+
Example: `'/api'`.
|
256
276
|
|
257
277
|
## License
|
258
278
|
|
259
279
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
280
|
+
|
281
|
+
[](https://funbox.ru)
|
data/exe/tomograph
CHANGED
@@ -12,7 +12,7 @@ include Methadone::CLILogging
|
|
12
12
|
|
13
13
|
version Tomograph::VERSION
|
14
14
|
description 'Converts API Blueprint to JSON Schema'
|
15
|
-
on('-d DRAFTER_VERSION', '--drafter', 'Choose drafter version: crafter
|
15
|
+
on('-d DRAFTER_VERSION', '--drafter', 'Choose drafter version: crafter or 4. Default: use drafter v.4.')
|
16
16
|
on('-f INPUT_FORMAT', '--format', 'Force input format: "apib" or "yaml". Default: detect by file extension.')
|
17
17
|
on('--exclude-description', 'Exclude "description" keys.')
|
18
18
|
on('--split', 'Split output into files by method.')
|
@@ -52,12 +52,10 @@ def choose_drafter(opt_parser)
|
|
52
52
|
case opt_parser
|
53
53
|
when 'crafter'
|
54
54
|
:crafter
|
55
|
-
when '3'
|
56
|
-
:drafter_3
|
57
55
|
when '4'
|
58
56
|
:drafter_4
|
59
57
|
when nil
|
60
|
-
:
|
58
|
+
:drafter_4
|
61
59
|
else
|
62
60
|
raise 'Unsupported drafter version!'
|
63
61
|
end
|
@@ -88,17 +86,13 @@ main do |input, output|
|
|
88
86
|
version = choose_drafter(options['drafter'])
|
89
87
|
format_key = case format
|
90
88
|
when :apib
|
91
|
-
if version == :
|
92
|
-
:apib_path
|
93
|
-
elsif version == :crafter
|
89
|
+
if version == :crafter
|
94
90
|
:crafter_apib_path
|
95
91
|
else
|
96
92
|
:drafter_4_apib_path
|
97
93
|
end
|
98
94
|
when :yaml
|
99
|
-
if version == :
|
100
|
-
:drafter_yaml_path
|
101
|
-
elsif version == :crafter
|
95
|
+
if version == :crafter
|
102
96
|
:crafter_yaml_path
|
103
97
|
else
|
104
98
|
:drafter_4_yaml_path
|
@@ -29,7 +29,7 @@ module Tomograph
|
|
29
29
|
def group?(group)
|
30
30
|
return false if group['element'] == 'resource'
|
31
31
|
group['element'] != 'copy' && # Element is a human readable text
|
32
|
-
group['meta']['classes'][0] == 'resourceGroup' # skip Data Structures
|
32
|
+
group['meta']['classes']['content'][0]['content'] == 'resourceGroup' # skip Data Structures
|
33
33
|
end
|
34
34
|
|
35
35
|
def resources
|
@@ -101,15 +101,15 @@ module Tomograph
|
|
101
101
|
path: "#{@prefix}#{related_actions.first.path}",
|
102
102
|
method: related_actions.first.method,
|
103
103
|
content_type: related_actions.first.content_type,
|
104
|
-
|
105
|
-
responses: related_actions.map(&:responses).flatten,
|
104
|
+
requests: related_actions.map(&:request).flatten.uniq,
|
105
|
+
responses: related_actions.map(&:responses).flatten.uniq,
|
106
106
|
resource: related_actions.first.resource
|
107
107
|
}
|
108
108
|
end
|
109
109
|
|
110
110
|
def to_tomogram
|
111
111
|
@tomogram ||= actions.inject([]) do |result, action|
|
112
|
-
result.push(Tomograph::Tomogram::Action.new(action))
|
112
|
+
result.push(Tomograph::Tomogram::Action.new(**action))
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -18,8 +18,10 @@ module Tomograph
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def content_type
|
21
|
-
|
22
|
-
@content.first['attributes']['headers']['content'][0]['content']['
|
21
|
+
if @content.first['attributes'].has_key?('headers')
|
22
|
+
@content.first['attributes']['headers']['content'][0]['content']['key']['content'] == 'Content-Type' ?
|
23
|
+
@content.first['attributes']['headers']['content'][0]['content']['value']['content'] : nil
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
25
27
|
def request
|
@@ -49,7 +51,7 @@ module Tomograph
|
|
49
51
|
end
|
50
52
|
@responses = @responses.map do |response|
|
51
53
|
{
|
52
|
-
'status' => response['attributes']['statusCode']['content'],
|
54
|
+
'status' => response['attributes']['statusCode']['content'].to_s,
|
53
55
|
'body' => json_schema(response['content']),
|
54
56
|
'content-type' => response['attributes'].has_key?('headers') ?
|
55
57
|
response['attributes']['headers']['content'][0]['content']['value']['content'] : nil
|
@@ -101,15 +101,15 @@ module Tomograph
|
|
101
101
|
path: "#{@prefix}#{related_actions.first.path}",
|
102
102
|
method: related_actions.first.method,
|
103
103
|
content_type: related_actions.first.content_type,
|
104
|
-
|
105
|
-
responses: related_actions.map(&:responses).flatten,
|
104
|
+
requests: related_actions.map(&:request).flatten.uniq,
|
105
|
+
responses: related_actions.map(&:responses).flatten.uniq,
|
106
106
|
resource: related_actions.first.resource
|
107
107
|
}
|
108
108
|
end
|
109
109
|
|
110
110
|
def to_tomogram
|
111
111
|
@tomogram ||= actions.inject([]) do |result, action|
|
112
|
-
result.push(Tomograph::Tomogram::Action.new(action))
|
112
|
+
result.push(Tomograph::Tomogram::Action.new(**action))
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
@@ -18,8 +18,10 @@ module Tomograph
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def content_type
|
21
|
-
|
22
|
-
@content.first['attributes']['headers']['content'][0]['content']['
|
21
|
+
if @content.first['attributes'].has_key?('headers')
|
22
|
+
@content.first['attributes']['headers']['content'][0]['content']['key']['content'] == 'Content-Type' ?
|
23
|
+
@content.first['attributes']['headers']['content'][0]['content']['value']['content'] : nil
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
25
27
|
def request
|
@@ -49,7 +51,7 @@ module Tomograph
|
|
49
51
|
end
|
50
52
|
@responses = @responses.map do |response|
|
51
53
|
{
|
52
|
-
'status' => response['attributes']['statusCode']['content'],
|
54
|
+
'status' => response['attributes']['statusCode']['content'].to_s,
|
53
55
|
'body' => json_schema(response['content']),
|
54
56
|
'content-type' => response['attributes'].has_key?('headers') ?
|
55
57
|
response['attributes']['headers']['content'][0]['content']['value']['content'] : nil
|
@@ -14,7 +14,7 @@ module Tomograph
|
|
14
14
|
path: "#{@prefix}#{action['path']}",
|
15
15
|
method: action['method'],
|
16
16
|
content_type: action['content-type'],
|
17
|
-
|
17
|
+
requests: action['requests'],
|
18
18
|
responses: action['responses'],
|
19
19
|
resource: action['resource']))
|
20
20
|
end
|
data/lib/tomograph/tomogram.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'multi_json'
|
2
2
|
require 'tomograph/path'
|
3
3
|
require 'tomograph/api_blueprint/json_schema'
|
4
|
-
require 'tomograph/api_blueprint/drafter_3/yaml'
|
5
4
|
require 'tomograph/api_blueprint/drafter_4/yaml'
|
6
5
|
require 'tomograph/api_blueprint/crafter/yaml'
|
7
6
|
|
@@ -12,12 +11,10 @@ module Tomograph
|
|
12
11
|
def initialize(prefix: '', apib_path: nil, drafter_yaml_path: nil, tomogram_json_path: nil, drafter_4_apib_path: nil, drafter_4_yaml_path: nil, crafter_apib_path: nil, crafter_yaml_path: nil)
|
13
12
|
@documentation = if tomogram_json_path
|
14
13
|
Tomograph::ApiBlueprint::JsonSchema.new(prefix, tomogram_json_path)
|
15
|
-
elsif drafter_4_yaml_path || drafter_4_apib_path
|
16
|
-
Tomograph::ApiBlueprint::Drafter4::Yaml.new(prefix, drafter_4_apib_path, drafter_4_yaml_path)
|
17
14
|
elsif crafter_yaml_path || crafter_apib_path
|
18
15
|
Tomograph::ApiBlueprint::Crafter::Yaml.new(prefix, crafter_apib_path, crafter_yaml_path)
|
19
16
|
else
|
20
|
-
Tomograph::ApiBlueprint::
|
17
|
+
Tomograph::ApiBlueprint::Drafter4::Yaml.new(prefix, drafter_4_apib_path, drafter_4_yaml_path)
|
21
18
|
end
|
22
19
|
@prefix = prefix
|
23
20
|
end
|
@@ -3,13 +3,13 @@ require 'tomograph/path'
|
|
3
3
|
module Tomograph
|
4
4
|
class Tomogram
|
5
5
|
class Action
|
6
|
-
attr_reader :path, :method, :content_type, :
|
6
|
+
attr_reader :path, :method, :content_type, :requests, :responses, :resource
|
7
7
|
|
8
|
-
def initialize(path:, method:, content_type:,
|
8
|
+
def initialize(path:, method:, content_type:, requests:, responses:, resource:)
|
9
9
|
@path ||= Tomograph::Path.new(path)
|
10
10
|
@method ||= method
|
11
11
|
@content_type ||= content_type
|
12
|
-
@
|
12
|
+
@requests ||= requests
|
13
13
|
@responses ||= responses
|
14
14
|
@resource ||= resource
|
15
15
|
end
|
@@ -25,7 +25,7 @@ module Tomograph
|
|
25
25
|
'path' => path,
|
26
26
|
'method' => method,
|
27
27
|
'content-type' => content_type,
|
28
|
-
'
|
28
|
+
'requests' => requests,
|
29
29
|
'responses' => responses,
|
30
30
|
'resource' => resource
|
31
31
|
}
|
data/lib/tomograph/version.rb
CHANGED
data/tomograph.gemspec
CHANGED
@@ -18,12 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_runtime_dependency 'methadone', '~>
|
22
|
-
spec.add_runtime_dependency 'multi_json', '~> 1.
|
23
|
-
spec.add_development_dependency '
|
24
|
-
spec.add_development_dependency '
|
25
|
-
spec.add_development_dependency '
|
26
|
-
spec.add_development_dependency '
|
27
|
-
spec.add_development_dependency '
|
28
|
-
spec.
|
21
|
+
spec.add_runtime_dependency 'methadone', '~> 2', '>= 2.0.2'
|
22
|
+
spec.add_runtime_dependency 'multi_json', '~> 1.14', '>= 1.14.1'
|
23
|
+
spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.1'
|
24
|
+
spec.add_development_dependency 'rake', '>= 13.0.1'
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.9', '>= 3.9.0'
|
26
|
+
spec.add_development_dependency 'rubocop', '~> 0.81', '>= 0.81.0'
|
27
|
+
spec.add_development_dependency 'simplecov', '~> 0.18', '>= 0.18.5'
|
28
|
+
spec.required_ruby_version = '>= 2.4.0'
|
29
29
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tomograph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- d.efimov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: methadone
|
@@ -16,148 +16,134 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 2.0.2
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '2'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
32
|
+
version: 2.0.2
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: multi_json
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '1.
|
39
|
+
version: '1.14'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 1.
|
42
|
+
version: 1.14.1
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '1.
|
49
|
+
version: '1.14'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 1.
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: bundler
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
56
|
-
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.12'
|
60
|
-
type: :development
|
61
|
-
prerelease: false
|
62
|
-
version_requirements: !ruby/object:Gem::Requirement
|
63
|
-
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '1.12'
|
52
|
+
version: 1.14.1
|
67
53
|
- !ruby/object:Gem::Dependency
|
68
54
|
name: byebug
|
69
55
|
requirement: !ruby/object:Gem::Requirement
|
70
56
|
requirements:
|
71
57
|
- - "~>"
|
72
58
|
- !ruby/object:Gem::Version
|
73
|
-
version: '
|
59
|
+
version: '11.1'
|
74
60
|
- - ">="
|
75
61
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
62
|
+
version: 11.1.1
|
77
63
|
type: :development
|
78
64
|
prerelease: false
|
79
65
|
version_requirements: !ruby/object:Gem::Requirement
|
80
66
|
requirements:
|
81
67
|
- - "~>"
|
82
68
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
69
|
+
version: '11.1'
|
84
70
|
- - ">="
|
85
71
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
72
|
+
version: 11.1.1
|
87
73
|
- !ruby/object:Gem::Dependency
|
88
74
|
name: rake
|
89
75
|
requirement: !ruby/object:Gem::Requirement
|
90
76
|
requirements:
|
91
|
-
- - "
|
77
|
+
- - ">="
|
92
78
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
79
|
+
version: 13.0.1
|
94
80
|
type: :development
|
95
81
|
prerelease: false
|
96
82
|
version_requirements: !ruby/object:Gem::Requirement
|
97
83
|
requirements:
|
98
|
-
- - "
|
84
|
+
- - ">="
|
99
85
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
86
|
+
version: 13.0.1
|
101
87
|
- !ruby/object:Gem::Dependency
|
102
88
|
name: rspec
|
103
89
|
requirement: !ruby/object:Gem::Requirement
|
104
90
|
requirements:
|
105
91
|
- - "~>"
|
106
92
|
- !ruby/object:Gem::Version
|
107
|
-
version: '3.
|
93
|
+
version: '3.9'
|
108
94
|
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: 3.
|
96
|
+
version: 3.9.0
|
111
97
|
type: :development
|
112
98
|
prerelease: false
|
113
99
|
version_requirements: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '3.
|
103
|
+
version: '3.9'
|
118
104
|
- - ">="
|
119
105
|
- !ruby/object:Gem::Version
|
120
|
-
version: 3.
|
106
|
+
version: 3.9.0
|
121
107
|
- !ruby/object:Gem::Dependency
|
122
108
|
name: rubocop
|
123
109
|
requirement: !ruby/object:Gem::Requirement
|
124
110
|
requirements:
|
125
111
|
- - "~>"
|
126
112
|
- !ruby/object:Gem::Version
|
127
|
-
version: 0.
|
113
|
+
version: '0.81'
|
128
114
|
- - ">="
|
129
115
|
- !ruby/object:Gem::Version
|
130
|
-
version: 0.
|
116
|
+
version: 0.81.0
|
131
117
|
type: :development
|
132
118
|
prerelease: false
|
133
119
|
version_requirements: !ruby/object:Gem::Requirement
|
134
120
|
requirements:
|
135
121
|
- - "~>"
|
136
122
|
- !ruby/object:Gem::Version
|
137
|
-
version: 0.
|
123
|
+
version: '0.81'
|
138
124
|
- - ">="
|
139
125
|
- !ruby/object:Gem::Version
|
140
|
-
version: 0.
|
126
|
+
version: 0.81.0
|
141
127
|
- !ruby/object:Gem::Dependency
|
142
128
|
name: simplecov
|
143
129
|
requirement: !ruby/object:Gem::Requirement
|
144
130
|
requirements:
|
145
131
|
- - "~>"
|
146
132
|
- !ruby/object:Gem::Version
|
147
|
-
version: '0.
|
133
|
+
version: '0.18'
|
148
134
|
- - ">="
|
149
135
|
- !ruby/object:Gem::Version
|
150
|
-
version: 0.
|
136
|
+
version: 0.18.5
|
151
137
|
type: :development
|
152
138
|
prerelease: false
|
153
139
|
version_requirements: !ruby/object:Gem::Requirement
|
154
140
|
requirements:
|
155
141
|
- - "~>"
|
156
142
|
- !ruby/object:Gem::Version
|
157
|
-
version: '0.
|
143
|
+
version: '0.18'
|
158
144
|
- - ">="
|
159
145
|
- !ruby/object:Gem::Version
|
160
|
-
version: 0.
|
146
|
+
version: 0.18.5
|
161
147
|
description: Convert API Blueprint to routes and JSON-Schemas
|
162
148
|
email:
|
163
149
|
- d.efimov@fun-box.ru
|
@@ -166,9 +152,11 @@ executables:
|
|
166
152
|
extensions: []
|
167
153
|
extra_rdoc_files: []
|
168
154
|
files:
|
155
|
+
- ".github/workflows/gempush.yml"
|
169
156
|
- ".gitignore"
|
170
157
|
- ".rubocop.yml"
|
171
158
|
- ".ruby-version"
|
159
|
+
- ".tool-versions"
|
172
160
|
- ".travis.yml"
|
173
161
|
- CHANGELOG.md
|
174
162
|
- CODE_OF_CONDUCT.md
|
@@ -182,8 +170,6 @@ files:
|
|
182
170
|
- lib/tomograph.rb
|
183
171
|
- lib/tomograph/api_blueprint/crafter/yaml.rb
|
184
172
|
- lib/tomograph/api_blueprint/crafter/yaml/action.rb
|
185
|
-
- lib/tomograph/api_blueprint/drafter_3/yaml.rb
|
186
|
-
- lib/tomograph/api_blueprint/drafter_3/yaml/action.rb
|
187
173
|
- lib/tomograph/api_blueprint/drafter_4/yaml.rb
|
188
174
|
- lib/tomograph/api_blueprint/drafter_4/yaml/action.rb
|
189
175
|
- lib/tomograph/api_blueprint/json_schema.rb
|
@@ -205,15 +191,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
205
191
|
requirements:
|
206
192
|
- - ">="
|
207
193
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
194
|
+
version: 2.4.0
|
209
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
196
|
requirements:
|
211
197
|
- - ">="
|
212
198
|
- !ruby/object:Gem::Version
|
213
199
|
version: '0'
|
214
200
|
requirements: []
|
215
|
-
|
216
|
-
rubygems_version: 2.4.5.5
|
201
|
+
rubygems_version: 3.1.2
|
217
202
|
signing_key:
|
218
203
|
specification_version: 4
|
219
204
|
summary: Convert API Blueprint to Tomogram
|
@@ -1,128 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
require 'tomograph/api_blueprint/drafter_3/yaml/action'
|
3
|
-
require 'tomograph/tomogram/action'
|
4
|
-
|
5
|
-
module Tomograph
|
6
|
-
module ApiBlueprint
|
7
|
-
class Drafter3
|
8
|
-
class Yaml
|
9
|
-
def initialize(prefix, apib_path, drafter_yaml_path)
|
10
|
-
@prefix = prefix
|
11
|
-
@documentation = if apib_path
|
12
|
-
YAML.safe_load(`drafter #{apib_path}`)
|
13
|
-
elsif drafter_yaml_path
|
14
|
-
YAML.safe_load(File.read(drafter_yaml_path))
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def groups
|
19
|
-
@groups ||= @documentation['content'][0]['content'].inject([]) do |result_groups, group|
|
20
|
-
next result_groups unless group?(group)
|
21
|
-
result_groups.push(group)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def group?(group)
|
26
|
-
group['element'] != 'copy' && # Element is a human readable text
|
27
|
-
group['meta']['classes'][0] == 'resourceGroup' # skip Data Structures
|
28
|
-
end
|
29
|
-
|
30
|
-
def resources
|
31
|
-
@resources ||= groups.inject([]) do |result_groups, group|
|
32
|
-
result_groups.push(group['content'].inject([]) do |result_resources, resource|
|
33
|
-
next result_resources unless resource?(resource)
|
34
|
-
result_resources.push('resource' => resource, 'resource_path' => resource_path(resource))
|
35
|
-
end)
|
36
|
-
end.flatten
|
37
|
-
end
|
38
|
-
|
39
|
-
def resource?(resource)
|
40
|
-
resource['element'] != 'copy' # Element is a human readable text
|
41
|
-
end
|
42
|
-
|
43
|
-
def resource_path(resource)
|
44
|
-
resource['attributes'] && resource['attributes']['href']
|
45
|
-
end
|
46
|
-
|
47
|
-
def transitions
|
48
|
-
@transitions ||= resources.inject([]) do |result_resources, resource|
|
49
|
-
result_resources.push(resource['resource']['content'].inject([]) do |result_transitions, transition|
|
50
|
-
next result_transitions unless transition?(transition)
|
51
|
-
result_transitions.push(transition_hash(transition, resource))
|
52
|
-
end)
|
53
|
-
end.flatten
|
54
|
-
end
|
55
|
-
|
56
|
-
def transition?(transition)
|
57
|
-
transition['element'] == 'transition'
|
58
|
-
end
|
59
|
-
|
60
|
-
def transition_hash(transition, resource)
|
61
|
-
{
|
62
|
-
'transition' => transition,
|
63
|
-
'transition_path' => transition_path(transition, resource['resource_path']),
|
64
|
-
'resource' => resource['resource_path']
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
def transition_path(transition, resource_path)
|
69
|
-
transition['attributes'] && transition['attributes']['href'] || resource_path
|
70
|
-
end
|
71
|
-
|
72
|
-
def without_group_actions
|
73
|
-
transitions.inject([]) do |result_transition, transition|
|
74
|
-
result_transition.push(transition['transition']['content'].inject([]) do |result_contents, content|
|
75
|
-
next result_contents unless action?(content)
|
76
|
-
result_contents.push(Tomograph::ApiBlueprint::Drafter3::Yaml::Action.new(
|
77
|
-
content['content'],
|
78
|
-
transition['transition_path'],
|
79
|
-
transition['resource']
|
80
|
-
))
|
81
|
-
end)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def action?(content)
|
86
|
-
content['element'] == 'httpTransaction'
|
87
|
-
end
|
88
|
-
|
89
|
-
def actions
|
90
|
-
@actions ||= without_group_actions
|
91
|
-
.flatten
|
92
|
-
.group_by { |action| "#{action.method} #{action.path}" }.map do |_key, related_actions|
|
93
|
-
action_hash(related_actions)
|
94
|
-
end.flatten
|
95
|
-
end
|
96
|
-
|
97
|
-
def action_hash(related_actions)
|
98
|
-
{
|
99
|
-
path: "#{@prefix}#{related_actions.first.path}",
|
100
|
-
method: related_actions.first.method,
|
101
|
-
content_type: related_actions.first.content_type,
|
102
|
-
request: related_actions.first.request,
|
103
|
-
responses: related_actions.map(&:responses).flatten,
|
104
|
-
resource: related_actions.first.resource
|
105
|
-
}
|
106
|
-
end
|
107
|
-
|
108
|
-
def to_tomogram
|
109
|
-
@tomogram ||= actions.inject([]) do |result, action|
|
110
|
-
result.push(Tomograph::Tomogram::Action.new(action))
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def to_resources
|
115
|
-
return @to_resources if @to_resources
|
116
|
-
|
117
|
-
@to_resources = actions.group_by { |action| action[:resource] }
|
118
|
-
@to_resources = @to_resources.inject({}) do |res, related_actions|
|
119
|
-
requests = related_actions[1].map do |action|
|
120
|
-
"#{action[:method]} #{action[:path]}"
|
121
|
-
end
|
122
|
-
res.merge(related_actions[1].first[:resource] => requests)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'tomograph/tomogram/action'
|
2
|
-
|
3
|
-
module Tomograph
|
4
|
-
module ApiBlueprint
|
5
|
-
class Drafter3
|
6
|
-
class Yaml
|
7
|
-
class Action
|
8
|
-
def initialize(content, path, resource)
|
9
|
-
@content = content
|
10
|
-
@path = path
|
11
|
-
@resource = resource
|
12
|
-
end
|
13
|
-
|
14
|
-
attr_reader :path, :resource
|
15
|
-
|
16
|
-
def method
|
17
|
-
@method ||= @content.first['attributes']['method']
|
18
|
-
end
|
19
|
-
|
20
|
-
def content_type
|
21
|
-
@content_type ||= @content.first['attributes'].has_key?('headers') ?
|
22
|
-
@content.first['attributes']['headers']['content'][0]['content']['value']['content'] : nil
|
23
|
-
end
|
24
|
-
|
25
|
-
def request
|
26
|
-
return @request if @request
|
27
|
-
|
28
|
-
request_action = @content.find { |el| el['element'] == 'httpRequest' }
|
29
|
-
@request = json_schema(request_action['content'])
|
30
|
-
end
|
31
|
-
|
32
|
-
def json_schema(actions)
|
33
|
-
schema_node = actions.find do |action|
|
34
|
-
action && action['element'] == 'asset' && action['attributes']['contentType'] == 'application/schema+json'
|
35
|
-
end
|
36
|
-
return {} unless schema_node
|
37
|
-
|
38
|
-
MultiJson.load(schema_node['content'])
|
39
|
-
rescue MultiJson::ParseError => e
|
40
|
-
puts "[Tomograph] Error while parsing #{e}. skipping..."
|
41
|
-
{}
|
42
|
-
end
|
43
|
-
|
44
|
-
def responses
|
45
|
-
return @responses if @responses
|
46
|
-
|
47
|
-
@responses = @content.select do |response|
|
48
|
-
response['element'] == 'httpResponse' && response['attributes']
|
49
|
-
end
|
50
|
-
@responses = @responses.map do |response|
|
51
|
-
{
|
52
|
-
'status' => response['attributes']['statusCode'],
|
53
|
-
'body' => json_schema(response['content']),
|
54
|
-
'content-type' => response['attributes'].has_key?('headers') ?
|
55
|
-
response['attributes']['headers']['content'][0]['content']['value']['content'] : nil
|
56
|
-
}
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|