tomograph 3.1.2 → 3.1.3

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: ade39b28aaf05781e5c1de146d692f960f607136d2853b9a3d74f87907bd39e0
4
- data.tar.gz: 2045eece41858ee1345f9e13221ca8021806086764565b3c60bd5c5c41435742
3
+ metadata.gz: ab901173a56d7c3bb3627dc8e2103e21b2e6b321ab30d3df2d9c9f97726c2598
4
+ data.tar.gz: 9360f36f0a9aefb4e4c63b833cc26ac9ee88b6fb203ff59c7165af4bc7711dc5
5
5
  SHA512:
6
- metadata.gz: 48161844767112cc64665c512ad893a2734f069c03d22a7b1c340e9dca52d48ab6a2ae32b6ebe5ef8c5b31612cc1649473273770fc33b3f12c5f03061a54dc33
7
- data.tar.gz: 509b370fdc936e5e3e11a8e8b4f970bee98855b0d40710fa236e62061c36a681428a4dc39ca099e0d644947f40498a84dc6314f77eb90b68ac8dd21fe9f0d717
6
+ metadata.gz: ec6645d8dadd46bdb77a08b72083102d192b8e51381324fa36b0113f143f06dadf33d82e721c5f066f53e84dda109a9f9f4dc9c70512013faa0c8b8bfbdb3669
7
+ data.tar.gz: 834f29f892f7776e706d958573a2077347b2f7e06beafa55fed5ea85c59ff6a70751a1556e9682ce58a68c0bb9fe5db840dd7c1262c99d0f6aebe2abc662c838
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.7
2
+ TargetRubyVersion: 2.4
3
3
 
4
- Metrics/LineLength:
4
+ Layout/LineLength:
5
5
  Max: 120
6
6
 
7
7
  Style/Documentation:
@@ -12,3 +12,21 @@ Style/FrozenStringLiteralComment:
12
12
 
13
13
  Metrics/BlockLength:
14
14
  Enabled: false
15
+
16
+ Naming/MemoizedInstanceVariableName:
17
+ Enabled: false
18
+
19
+ Lint/DisjunctiveAssignmentInConstructor:
20
+ Enabled: false
21
+
22
+ Metrics/ParameterLists:
23
+ Enabled: false
24
+
25
+ Metrics/MethodLength:
26
+ Max: 40
27
+
28
+ Metrics/AbcSize:
29
+ Max: 90
30
+
31
+ Metrics/ClassLength:
32
+ Max: 150
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Change log
2
2
 
3
+ ### 3.1.3 - 2021-11-09
4
+
5
+ * features
6
+ * rubocop style
7
+
3
8
  ### 3.1.2 - 2021-09-28
4
9
 
5
10
  * bug fixes
data/exe/tomograph CHANGED
@@ -7,12 +7,15 @@ require 'methadone'
7
7
  require 'tomograph'
8
8
  require 'tomograph/version'
9
9
 
10
+ # rubocop:disable Style/MixinUsage
10
11
  include Methadone::Main
11
12
  include Methadone::CLILogging
13
+ # rubocop:enable Style/MixinUsage
12
14
 
13
15
  version Tomograph::VERSION
14
16
  description 'Converts API Blueprint to JSON Schema'
15
- on('-d DRAFTER_VERSION', '--drafter', 'Choose drafter version: crafter or 4, or OpenAPI version: openapi2 or openapi3. Default: use drafter v.4.')
17
+ on('-d DRAFTER_VERSION', '--drafter', 'Choose drafter version: crafter or 4,
18
+ or OpenAPI version: openapi2 or openapi3. Default: use drafter v.4.')
16
19
  on('--exclude-description', 'Exclude "description" keys.')
17
20
  on('--split', 'Split output into files by method.')
18
21
  arg :input, 'path/to/doc.yaml (API Elements)'
@@ -47,7 +50,7 @@ end
47
50
  def write_split_json(actions, output)
48
51
  FileUtils.mkdir_p(output)
49
52
  actions.clone.each do |action|
50
- json_name = "#{action.delete("path").to_s} #{action.delete("method")}.json"
53
+ json_name = "#{action.delete('path')} #{action.delete('method')}.json"
51
54
  [['/', '#'],
52
55
  ['{', '('],
53
56
  ['}', ')']].each do |pattern, replacement|
@@ -67,11 +70,11 @@ end
67
70
  main do |input, output|
68
71
  version = choose_drafter(options['drafter'])
69
72
  format_key = {
70
- crafter: :crafter_yaml_path,
71
- drafter_4: :drafter_yaml_path,
72
- openapi2: :openapi2_json_path,
73
- openapi3: :openapi3_yaml_path
74
- }[version]
73
+ crafter: :crafter_yaml_path,
74
+ drafter_4: :drafter_yaml_path,
75
+ openapi2: :openapi2_json_path,
76
+ openapi3: :openapi3_yaml_path
77
+ }[version]
75
78
 
76
79
  tomogram = Tomograph::Tomogram.new(format_key => input)
77
80
  actions = tomogram.to_a.map(&:to_hash)
@@ -18,9 +18,9 @@ module Tomograph
18
18
  end
19
19
 
20
20
  def content_type
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
21
+ if @content.first['attributes'].key?('headers') &&
22
+ @content.first['attributes']['headers']['content'][0]['content']['key']['content'] == 'Content-Type'
23
+ @content.first['attributes']['headers']['content'][0]['content']['value']['content']
24
24
  end
25
25
  end
26
26
 
@@ -33,7 +33,11 @@ module Tomograph
33
33
 
34
34
  def json_schema(actions)
35
35
  schema_node = actions.find do |action|
36
- action && action.fetch('element', nil) == 'asset' && action.fetch('attributes', {}).fetch('contentType', {}).fetch('content', nil) == 'application/schema+json'
36
+ action &&
37
+ action.fetch('element', nil) == 'asset' &&
38
+ action.fetch('attributes', {})
39
+ .fetch('contentType', {})
40
+ .fetch('content', nil) == 'application/schema+json'
37
41
  end
38
42
  return {} unless schema_node
39
43
 
@@ -50,11 +54,14 @@ module Tomograph
50
54
  response['element'] == 'httpResponse' && response['attributes']
51
55
  end
52
56
  @responses = @responses.map do |response|
57
+ content_type = if response['attributes'].key?('headers')
58
+ response['attributes']['headers']['content'][0]['content']['value']['content']
59
+ end
60
+
53
61
  {
54
62
  'status' => response['attributes']['statusCode']['content'].to_s,
55
63
  'body' => json_schema(response['content']),
56
- 'content-type' => response['attributes'].has_key?('headers') ?
57
- response['attributes']['headers']['content'][0]['content']['value']['content'] : nil
64
+ 'content-type' => content_type
58
65
  }
59
66
  end
60
67
  end
@@ -24,6 +24,7 @@ module Tomograph
24
24
 
25
25
  def group?(group)
26
26
  return false if group['element'] == 'resource'
27
+
27
28
  group['element'] != 'copy' && # Element is a human readable text
28
29
  group['meta']['classes']['content'][0]['content'] == 'resourceGroup' # skip Data Structures
29
30
  end
@@ -31,7 +32,9 @@ module Tomograph
31
32
  def resources
32
33
  @resources ||= groups.inject([]) do |result_groups, group|
33
34
  result_groups.push(group['content'].each_with_object([]) do |resource, result_resources|
34
- result_resources.push('resource' => resource, 'resource_path' => resource_path(resource)) if resource?(resource)
35
+ if resource?(resource)
36
+ result_resources.push('resource' => resource, 'resource_path' => resource_path(resource))
37
+ end
35
38
  end)
36
39
  end.flatten
37
40
  end
@@ -46,9 +49,12 @@ module Tomograph
46
49
 
47
50
  def transitions
48
51
  @transitions ||= resources.inject([]) do |result_resources, resource|
49
- result_resources.push(resource['resource']['content'].each_with_object([]) do |transition, result_transitions|
50
- result_transitions.push(transition_hash(transition, resource)) if transition?(transition)
51
- end)
52
+ result_resources.push(resource['resource']['content']
53
+ .each_with_object([]) do |transition, result_transitions|
54
+ if transition?(transition)
55
+ result_transitions.push(transition_hash(transition, resource))
56
+ end
57
+ end)
52
58
  end.flatten
53
59
  end
54
60
 
@@ -65,18 +71,22 @@ module Tomograph
65
71
  end
66
72
 
67
73
  def transition_path(transition, resource_path)
68
- transition['attributes'] && transition['attributes']['href'] && transition['attributes']['href']['content'] || resource_path
74
+ transition['attributes'] && transition['attributes']['href'] &&
75
+ transition['attributes']['href']['content'] || resource_path
69
76
  end
70
77
 
71
78
  def without_group_actions
72
79
  transitions.inject([]) do |result_transition, transition|
73
- result_transition.push(transition['transition']['content'].each_with_object([]) do |content, result_contents|
74
- result_contents.push(Tomograph::ApiBlueprint::Crafter::Yaml::Action.new(
75
- content['content'],
76
- transition['transition_path'],
77
- transition['resource']
78
- )) if action?(content)
79
- end)
80
+ result_transition.push(transition['transition']['content']
81
+ .each_with_object([]) do |content, result_contents|
82
+ next unless action?(content)
83
+
84
+ result_contents.push(Tomograph::ApiBlueprint::Crafter::Yaml::Action.new(
85
+ content['content'],
86
+ transition['transition_path'],
87
+ transition['resource']
88
+ ))
89
+ end)
80
90
  end
81
91
  end
82
92
 
@@ -18,9 +18,9 @@ module Tomograph
18
18
  end
19
19
 
20
20
  def content_type
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
21
+ if @content.first['attributes'].key?('headers') &&
22
+ @content.first['attributes']['headers']['content'][0]['content']['key']['content'] == 'Content-Type'
23
+ @content.first['attributes']['headers']['content'][0]['content']['value']['content']
24
24
  end
25
25
  end
26
26
 
@@ -33,7 +33,8 @@ module Tomograph
33
33
 
34
34
  def json_schema(actions)
35
35
  schema_node = actions.find do |action|
36
- action && action['element'] == 'asset' && action['attributes']['contentType']['content'] == 'application/schema+json'
36
+ action && action['element'] == 'asset' &&
37
+ action['attributes']['contentType']['content'] == 'application/schema+json'
37
38
  end
38
39
  return {} unless schema_node
39
40
 
@@ -50,11 +51,14 @@ module Tomograph
50
51
  response['element'] == 'httpResponse' && response['attributes']
51
52
  end
52
53
  @responses = @responses.map do |response|
54
+ content_type = if response['attributes'].key?('headers')
55
+ response['attributes']['headers']['content'][0]['content']['value']['content']
56
+ end
57
+
53
58
  {
54
59
  'status' => response['attributes']['statusCode']['content'].to_s,
55
60
  'body' => json_schema(response['content']),
56
- 'content-type' => response['attributes'].has_key?('headers') ?
57
- response['attributes']['headers']['content'][0]['content']['value']['content'] : nil
61
+ 'content-type' => content_type
58
62
  }
59
63
  end
60
64
  end
@@ -24,6 +24,7 @@ module Tomograph
24
24
 
25
25
  def group?(group)
26
26
  return false if group['element'] == 'resource'
27
+
27
28
  group['element'] != 'copy' && # Element is a human readable text
28
29
  group['meta']['classes']['content'][0]['content'] == 'resourceGroup' # skip Data Structures
29
30
  end
@@ -31,7 +32,9 @@ module Tomograph
31
32
  def resources
32
33
  @resources ||= groups.inject([]) do |result_groups, group|
33
34
  result_groups.push(group['content'].each_with_object([]) do |resource, result_resources|
34
- result_resources.push('resource' => resource, 'resource_path' => resource_path(resource)) if resource?(resource)
35
+ if resource?(resource)
36
+ result_resources.push('resource' => resource, 'resource_path' => resource_path(resource))
37
+ end
35
38
  end)
36
39
  end.flatten
37
40
  end
@@ -46,9 +49,12 @@ module Tomograph
46
49
 
47
50
  def transitions
48
51
  @transitions ||= resources.inject([]) do |result_resources, resource|
49
- result_resources.push(resource['resource']['content'].each_with_object([]) do |transition, result_transitions|
50
- result_transitions.push(transition_hash(transition, resource)) if transition?(transition)
51
- end)
52
+ result_resources.push(resource['resource']['content']
53
+ .each_with_object([]) do |transition, result_transitions|
54
+ if transition?(transition)
55
+ result_transitions.push(transition_hash(transition, resource))
56
+ end
57
+ end)
52
58
  end.flatten
53
59
  end
54
60
 
@@ -70,13 +76,16 @@ module Tomograph
70
76
 
71
77
  def without_group_actions
72
78
  transitions.inject([]) do |result_transition, transition|
73
- result_transition.push(transition['transition']['content'].each_with_object([]) do |content, result_contents|
74
- result_contents.push(Tomograph::ApiBlueprint::Drafter4::Yaml::Action.new(
75
- content['content'],
76
- transition['transition_path'],
77
- transition['resource']
78
- )) if action?(content)
79
- end)
79
+ result_transition.push(transition['transition']['content']
80
+ .each_with_object([]) do |content, result_contents|
81
+ next unless action?(content)
82
+
83
+ result_contents.push(Tomograph::ApiBlueprint::Drafter4::Yaml::Action.new(
84
+ content['content'],
85
+ transition['transition_path'],
86
+ transition['resource']
87
+ ))
88
+ end)
80
89
  end
81
90
  end
82
91
 
@@ -12,11 +12,12 @@ module Tomograph
12
12
  @tomogram ||= @documentation.inject([]) do |result, action|
13
13
  result.push(Tomograph::Tomogram::Action.new(
14
14
  path: "#{@prefix}#{action['path']}",
15
- method: action['method'],
15
+ method: action['method'],
16
16
  content_type: action['content-type'],
17
17
  requests: action['requests'],
18
18
  responses: action['responses'],
19
- resource: action['resource']))
19
+ resource: action['resource']
20
+ ))
20
21
  end
21
22
  end
22
23
 
@@ -9,33 +9,33 @@ module Tomograph
9
9
  end
10
10
 
11
11
  def to_tomogram
12
- @tomogram ||= @documentation['paths'].inject([]) do |result, action|
12
+ @tomogram ||= @documentation['paths'].each_with_object([]) do |action, result|
13
13
  action[1].keys.each do |method|
14
14
  result.push(Tomograph::Tomogram::Action.new(
15
- path: "#{@prefix}#{action[0]}",
16
- method: method.upcase,
17
- content_type: '',
18
- requests: [],
19
- responses: responses(action[1][method]['responses'], @documentation['definitions']),
20
- resource: ''))
15
+ path: "#{@prefix}#{action[0]}",
16
+ method: method.upcase,
17
+ content_type: '',
18
+ requests: [],
19
+ responses: responses(action[1][method]['responses'], @documentation['definitions']),
20
+ resource: ''
21
+ ))
21
22
  end
22
- result
23
23
  end
24
24
  end
25
25
 
26
26
  def responses(resp, defi)
27
27
  resp.inject([]) do |result, reponse|
28
28
  if reponse[1]['schema']
29
- result.push(
29
+ result.push(
30
30
  status: reponse[0],
31
31
  body: schema(reponse[1]['schema'], defi),
32
32
  'content-type': ''
33
- )
33
+ )
34
34
  else
35
35
  result.push(
36
- status: reponse[0],
37
- body: {},
38
- 'content-type': ''
36
+ status: reponse[0],
37
+ body: {},
38
+ 'content-type': ''
39
39
  )
40
40
  end
41
41
  end
@@ -43,36 +43,33 @@ module Tomograph
43
43
 
44
44
  def schema(sche, defi)
45
45
  if sche.keys.include?('$ref')
46
- res = sche.merge('definitions' => {sche["$ref"][14..-1] => defi[sche["$ref"][14..-1]]})
47
- if defi[sche["$ref"][14..-1]].to_s.include?('$ref')
48
- keys = defi[sche["$ref"][14..-1]].to_s.split('"').find_all{|word| word.include?('definitions') }
46
+ res = sche.merge('definitions' => { sche['$ref'][14..-1] => defi[sche['$ref'][14..-1]] })
47
+ if defi[sche['$ref'][14..-1]].to_s.include?('$ref')
48
+ keys = defi[sche['$ref'][14..-1]].to_s.split('"').find_all { |word| word.include?('definitions') }
49
49
  keys.each do |key|
50
- res["definitions"].merge!({key[14..-1] => defi[key[14..-1]]})
50
+ res['definitions'].merge!({ key[14..-1] => defi[key[14..-1]] })
51
51
  end
52
52
  end
53
53
  res
54
- else
55
- if sche.to_s.include?('$ref')
56
- res = sche.merge('definitions' => {})
57
- keys = sche.to_s.split('"').find_all{|word| word.include?('definitions') }
58
- keys.each do |key|
59
- res["definitions"].merge!({key[14..-1] => defi[key[14..-1]]})
60
- end
61
- res
62
- else
63
- sche
54
+ elsif sche.to_s.include?('$ref')
55
+ res = sche.merge('definitions' => {})
56
+ keys = sche.to_s.split('"').find_all { |word| word.include?('definitions') }
57
+ keys.each do |key|
58
+ res['definitions'].merge!({ key[14..-1] => defi[key[14..-1]] })
64
59
  end
60
+ res
61
+ else
62
+ sche
65
63
  end
66
64
  end
67
65
 
68
66
  def search_hash(hash, key)
69
67
  return hash[key] if hash.assoc(key)
70
- hash.delete_if{|key, value| value.class != Hash}
71
- new_hash = Hash.new
72
- hash.each_value {|values| new_hash.merge!(values)}
73
- unless new_hash.empty?
74
- search_hash(new_hash, key)
75
- end
68
+
69
+ hash.delete_if { |_key, value| value.class != Hash }
70
+ new_hash = {}
71
+ hash.each_value { |values| new_hash.merge!(values) }
72
+ search_hash(new_hash, key) unless new_hash.empty?
76
73
  end
77
74
 
78
75
  def to_resources
@@ -5,44 +5,44 @@ module Tomograph
5
5
  class OpenApi3
6
6
  def initialize(prefix, openapi3_yaml_path)
7
7
  @prefix = prefix
8
- @documentation = YAML.load(File.read(openapi3_yaml_path))
8
+ @documentation = YAML.safe_load(File.read(openapi3_yaml_path))
9
9
  end
10
10
 
11
11
  def to_tomogram
12
- @tomogram ||= @documentation['paths'].inject([]) do |result, action|
12
+ @tomogram ||= @documentation['paths'].each_with_object([]) do |action, result|
13
13
  action[1].keys.each do |method|
14
14
  result.push(Tomograph::Tomogram::Action.new(
15
- path: "#{@prefix}#{action[0]}",
16
- method: method.upcase,
17
- content_type: '',
18
- requests: [],
19
- responses: responses(action[1][method]['responses'], @documentation['components']['schemas']),
20
- resource: ''))
15
+ path: "#{@prefix}#{action[0]}",
16
+ method: method.upcase,
17
+ content_type: '',
18
+ requests: [],
19
+ responses: responses(action[1][method]['responses'], @documentation['components']['schemas']),
20
+ resource: ''
21
+ ))
21
22
  end
22
- result
23
23
  end
24
24
  end
25
25
 
26
26
  def responses(resp, defi)
27
27
  resp.inject([]) do |result, response|
28
- if response[1]['content'] == nil
29
- #TODO 403Forbidden
28
+ if response[1]['content'].nil?
29
+ # TODO: 403Forbidden
30
30
  result.push(
31
- status: response[0],
32
- body: {},
33
- 'content-type': ''
31
+ status: response[0],
32
+ body: {},
33
+ 'content-type': ''
34
34
  )
35
35
  elsif response[1]['content'].values[0]['schema']
36
36
  result.push(
37
- status: response[0],
38
- body: schema(response[1]['content'].values[0]['schema'], defi),
39
- 'content-type': ''
37
+ status: response[0],
38
+ body: schema(response[1]['content'].values[0]['schema'], defi),
39
+ 'content-type': ''
40
40
  )
41
41
  else
42
42
  result.push(
43
- status: response[0],
44
- body: {},
45
- 'content-type': ''
43
+ status: response[0],
44
+ body: {},
45
+ 'content-type': ''
46
46
  )
47
47
  end
48
48
  end
@@ -52,54 +52,51 @@ module Tomograph
52
52
  if sche.keys.include?('$ref')
53
53
  sche.merge!('components' => {})
54
54
  sche['components'].merge!('schemas' => {})
55
- sche['components']['schemas'].merge!({sche["$ref"][21..-1] => defi[sche["$ref"][21..-1]]})
55
+ sche['components']['schemas'].merge!({ sche['$ref'][21..-1] => defi[sche['$ref'][21..-1]] })
56
56
 
57
- if defi[sche["$ref"][21..-1]].to_s.include?('$ref')
58
- keys = defi[sche["$ref"][21..-1]].to_s.split('"').find_all{|word| word.include?('#/components/schemas/') }
57
+ if defi[sche['$ref'][21..-1]].to_s.include?('$ref')
58
+ keys = defi[sche['$ref'][21..-1]].to_s.split('"').find_all { |word| word.include?('#/components/schemas/') }
59
59
  keys.each do |key|
60
- sche['components']['schemas'].merge!({key[21..-1] => defi[key[21..-1]]})
60
+ sche['components']['schemas'].merge!({ key[21..-1] => defi[key[21..-1]] })
61
61
 
62
- if defi[key[21..-1]].to_s.include?('$ref')
63
- keys2 = defi[key[21..-1]].to_s.split('"').find_all{|word| word.include?('#/components/schemas/') }
64
- keys2.each do |key2|
65
- sche['components']['schemas'].merge!({key2[21..-1] => defi[key2[21..-1]]})
62
+ next unless defi[key[21..-1]].to_s.include?('$ref')
66
63
 
67
- if defi[key2[21..-1]].to_s.include?('$ref')
68
- keys3 = defi[key2[21..-1]].to_s.split('"').find_all { |word| word.include?('#/components/schemas/') }.uniq
69
- keys3.each do |key3|
70
- sche['components']['schemas'].merge!({ key3[21..-1] => defi[key3[21..-1]] })
71
- end
72
- end
64
+ keys2 = defi[key[21..-1]].to_s.split('"').find_all { |word| word.include?('#/components/schemas/') }
65
+ keys2.each do |key2|
66
+ sche['components']['schemas'].merge!({ key2[21..-1] => defi[key2[21..-1]] })
73
67
 
68
+ next unless defi[key2[21..-1]].to_s.include?('$ref')
69
+
70
+ keys3 = defi[key2[21..-1]].to_s.split('"')
71
+ .find_all { |word| word.include?('#/components/schemas/') }
72
+ .uniq
73
+ keys3.each do |key3|
74
+ sche['components']['schemas'].merge!({ key3[21..-1] => defi[key3[21..-1]] })
74
75
  end
75
76
  end
76
-
77
77
  end
78
78
  end
79
79
  sche
80
80
 
81
- else
82
- if sche.to_s.include?('$ref')
83
- res = sche.merge('definitions' => {})
84
- keys = sche.to_s.split('"').find_all{|word| word.include?('definitions') }
85
- keys.each do |key|
86
- res["definitions"].merge!({key[21..-1] => defi[key[21..-1]]})
87
- end
88
- res
89
- else
90
- sche
81
+ elsif sche.to_s.include?('$ref')
82
+ res = sche.merge('definitions' => {})
83
+ keys = sche.to_s.split('"').find_all { |word| word.include?('definitions') }
84
+ keys.each do |key|
85
+ res['definitions'].merge!({ key[21..-1] => defi[key[21..-1]] })
91
86
  end
87
+ res
88
+ else
89
+ sche
92
90
  end
93
91
  end
94
92
 
95
93
  def search_hash(hash, key)
96
94
  return hash[key] if hash.assoc(key)
97
- hash.delete_if{|key, value| value.class != Hash}
98
- new_hash = Hash.new
99
- hash.each_value {|values| new_hash.merge!(values)}
100
- unless new_hash.empty?
101
- search_hash(new_hash, key)
102
- end
95
+
96
+ hash.delete_if { |_key, value| value.class != Hash }
97
+ new_hash = {}
98
+ hash.each_value { |values| new_hash.merge!(values) }
99
+ search_hash(new_hash, key) unless new_hash.empty?
103
100
  end
104
101
 
105
102
  def to_resources
@@ -32,7 +32,7 @@ module Tomograph
32
32
  end
33
33
 
34
34
  def ==(other)
35
- other.instance_of? self.class and other.path == path
35
+ other.instance_of?(self.class) && (other.path == path)
36
36
  end
37
37
 
38
38
  private
@@ -10,7 +10,12 @@ module Tomograph
10
10
  class Tomogram
11
11
  extend Gem::Deprecate
12
12
 
13
- def initialize(prefix: '', drafter_yaml_path: nil, tomogram_json_path: nil, crafter_yaml_path: nil, openapi2_json_path: nil, openapi3_yaml_path: nil)
13
+ def initialize(prefix: '',
14
+ drafter_yaml_path: nil,
15
+ tomogram_json_path: nil,
16
+ crafter_yaml_path: nil,
17
+ openapi2_json_path: nil,
18
+ openapi3_yaml_path: nil)
14
19
  @documentation = if tomogram_json_path
15
20
  Tomograph::ApiBlueprint::JsonSchema.new(prefix, tomogram_json_path)
16
21
  elsif crafter_yaml_path
@@ -29,7 +34,7 @@ module Tomograph
29
34
  @actions ||= @documentation.to_tomogram
30
35
  end
31
36
 
32
- def to_json
37
+ def to_json(*_args)
33
38
  JSON.pretty_generate(to_a.map(&:to_hash))
34
39
  end
35
40
 
@@ -1,3 +1,3 @@
1
1
  module Tomograph
2
- VERSION = '3.1.2'.freeze
2
+ VERSION = '3.1.3'.freeze
3
3
  end
data/tomograph.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'tomograph/version'
4
4
 
@@ -20,10 +20,10 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency 'methadone', '~> 2', '>= 2.0.2'
22
22
  spec.add_development_dependency 'byebug', '~> 11.1', '>= 11.1.1'
23
+ spec.add_development_dependency 'json-schema', '~> 2.8', '>= 2.8.1'
23
24
  spec.add_development_dependency 'rake', '>= 13.0.1'
24
25
  spec.add_development_dependency 'rspec', '~> 3.10', '>= 3.10.0'
25
26
  spec.add_development_dependency 'rubocop', '~> 0.81', '>= 0.81.0'
26
27
  spec.add_development_dependency 'simplecov', '~> 0.21', '>= 0.21.2'
27
- spec.add_development_dependency 'json-schema', '~> 2.8', '>= 2.8.1'
28
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: 3.1.2
4
+ version: 3.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - d.efimov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2021-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: methadone
@@ -50,6 +50,26 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 11.1.1
53
+ - !ruby/object:Gem::Dependency
54
+ name: json-schema
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.8'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.8.1
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2.8'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 2.8.1
53
73
  - !ruby/object:Gem::Dependency
54
74
  name: rake
55
75
  requirement: !ruby/object:Gem::Requirement
@@ -124,26 +144,6 @@ dependencies:
124
144
  - - ">="
125
145
  - !ruby/object:Gem::Version
126
146
  version: 0.21.2
127
- - !ruby/object:Gem::Dependency
128
- name: json-schema
129
- requirement: !ruby/object:Gem::Requirement
130
- requirements:
131
- - - "~>"
132
- - !ruby/object:Gem::Version
133
- version: '2.8'
134
- - - ">="
135
- - !ruby/object:Gem::Version
136
- version: 2.8.1
137
- type: :development
138
- prerelease: false
139
- version_requirements: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - "~>"
142
- - !ruby/object:Gem::Version
143
- version: '2.8'
144
- - - ">="
145
- - !ruby/object:Gem::Version
146
- version: 2.8.1
147
147
  description: Convert API Blueprint, Swagger and OpenAPI to routes and JSON-Schemas
148
148
  email:
149
149
  - d.efimov@fun-box.ru
@@ -184,7 +184,7 @@ homepage: https://github.com/funbox/tomograph
184
184
  licenses:
185
185
  - MIT
186
186
  metadata: {}
187
- post_install_message:
187
+ post_install_message:
188
188
  rdoc_options: []
189
189
  require_paths:
190
190
  - lib
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  version: '0'
201
201
  requirements: []
202
202
  rubygems_version: 3.1.2
203
- signing_key:
203
+ signing_key:
204
204
  specification_version: 4
205
205
  summary: Convert API Blueprint, Swagger and OpenAPI to Tomogram
206
206
  test_files: []