tomograph 3.1.5 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d88459cb0a4d0984ea96d9c6b7b8aa79e8d4b439e2d6a40e5740d5d79eb0c22f
4
- data.tar.gz: 197ee0ba20b19fc0e1b9c68249dfd3c6eaa29fd4cbf79d9145cefe81b7d31abd
3
+ metadata.gz: 3325a247d67c5573ce732942f0ce962e286ff44df559ca20026834b70e541630
4
+ data.tar.gz: d3303b26448aeb89fd95d15b5d3958aaeca7fe30b8054ae31af22a8933774fb8
5
5
  SHA512:
6
- metadata.gz: d60ffb7db5c6a0741796d75622ba2384cb4207f73c47d67c2e698fc8fde130efc9cc69c3df33338d650ee157e856d348558978d41f071e17fc90a08161ebb3ec
7
- data.tar.gz: fcc104d8016d2cbabcc0ee4873f85503873b6ad8f79a2c23231287df1cc002d45b3c932cb7eb863fb7f5eb3a08bc798cd5b4b14c761f251f45648be1fad8e0ed
6
+ metadata.gz: 8c3f659cf90f535c8c5cb17c4164a9d7e751930c4bd98575e67cec65f24aa9f832506c44f98c56013947806259945baa94a2a13785a7ff7a9cc0c97b32d26992
7
+ data.tar.gz: 2a9f4c82ccdd8c6e7c9ad1e52950a32401f48f056ce2199eaddb09ea6f347a37e5210cc030a1933bfb593b6cc5a23c6fa535fbd1df7726ea4170353d9e2f20f1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Change log
2
2
 
3
+ ### 3.2.0 - 2024-01-13
4
+
5
+ * features
6
+ * support multiple content types for response with one code for OpenAPI 3.0
7
+ * bug fixes
8
+ * allow responses with empty bodies for OpenAPI 3.0
9
+ * refactoring
10
+ * small renamings for easier reading for OpenAPI 3.0
11
+ * do not pass around documentation schemas object for OpenAPI 3.0
12
+
13
+ ### 3.1.6 - 2023-10-06
14
+
15
+ * patch
16
+ * change home page
17
+
3
18
  ### 3.1.5 - 2023-02-02
4
19
 
5
20
  * bug fixes
@@ -9,46 +9,55 @@ module Tomograph
9
9
  end
10
10
 
11
11
  def to_tomogram
12
- @tomogram ||= @documentation['paths'].each_with_object([]) do |action, result|
13
- action[1].keys.each do |method|
12
+ @tomogram ||= @documentation['paths'].each_with_object([]) do |(path, action_definition), result|
13
+ action_definition.keys.each do |method|
14
14
  result.push(Tomograph::Tomogram::Action.new(
15
- path: "#{@prefix}#{action[0]}",
15
+ path: "#{@prefix}#{path}",
16
16
  method: method.upcase,
17
17
  content_type: '',
18
18
  requests: [],
19
- responses: responses(action[1][method]['responses'], @documentation['components']['schemas']),
19
+ responses: responses(action_definition[method]['responses']),
20
20
  resource: ''
21
21
  ))
22
22
  end
23
23
  end
24
24
  end
25
25
 
26
- def responses(resp, defi)
27
- resp.inject([]) do |result, response|
28
- if response[1]['content'].nil?
29
- # TODO: 403Forbidden
30
- result.push(
31
- 'status' => response[0],
32
- 'body' => {},
33
- 'content-type' => 'application/json'
34
- )
35
- elsif response[1]['content'].values[0]['schema']
26
+ def responses(responses_definitions)
27
+ result = []
28
+ responses_definitions.each do |(response_code, response)|
29
+ # response can be either Response Object or Reference Object
30
+ if response.key?('$ref')
31
+ response_description_path = response['$ref'].split('/')[1..] # first one is a '#'
32
+ response['content'] = @documentation.dig(*response_description_path)['content']
33
+ end
34
+
35
+ # Content can be nil if response body is not provided
36
+ if response['content'].nil?
36
37
  result.push(
37
- 'status' => response[0],
38
- 'body' => schema(response[1]['content'].values[0]['schema'], defi),
39
- 'content-type' => 'application/json'
38
+ 'status' => response_code,
39
+ 'body'=> {},
40
+ 'content-type' => ''
40
41
  )
41
42
  else
42
- result.push(
43
- status: response[0],
44
- body: {},
45
- 'content-type': ''
46
- )
43
+ result += responses_by_content_types(response['content'], response_code)
47
44
  end
48
45
  end
46
+ result
47
+ end
48
+
49
+ def responses_by_content_types(content_types, response_code)
50
+ content_types.map do |content_type, media_type_obj|
51
+ {
52
+ 'status' => response_code,
53
+ 'body' => schema(media_type_obj['schema']),
54
+ 'content-type' => content_type
55
+ }
56
+ end
49
57
  end
50
58
 
51
- def schema(sche, defi)
59
+ def schema(sche)
60
+ defi = @documentation['components']['schemas']
52
61
  if sche.keys.include?('$ref')
53
62
  sche.merge!('components' => {})
54
63
  sche['components'].merge!('schemas' => {})
@@ -1,3 +1,3 @@
1
1
  module Tomograph
2
- VERSION = '3.1.5'.freeze
2
+ VERSION = '3.2.0'.freeze
3
3
  end
data/tomograph.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = 'Convert API Blueprint, Swagger and OpenAPI to Tomogram'
12
12
  spec.description = 'Convert API Blueprint, Swagger and OpenAPI to routes and JSON-Schemas'
13
- spec.homepage = 'https://github.com/funbox/tomograph'
13
+ spec.homepage = 'https://github.com/matchtechnologies/tomograph'
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
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: 3.1.5
4
+ version: 3.2.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: 2023-02-02 00:00:00.000000000 Z
11
+ date: 2024-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: methadone
@@ -180,7 +180,7 @@ files:
180
180
  - lib/tomograph/version.rb
181
181
  - script/update_json_fixtures
182
182
  - tomograph.gemspec
183
- homepage: https://github.com/funbox/tomograph
183
+ homepage: https://github.com/matchtechnologies/tomograph
184
184
  licenses:
185
185
  - MIT
186
186
  metadata: {}