tomograph 3.1.5 → 3.2.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 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: {}