tomograph 3.1.2 → 3.1.4

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: ade39b28aaf05781e5c1de146d692f960f607136d2853b9a3d74f87907bd39e0
4
- data.tar.gz: 2045eece41858ee1345f9e13221ca8021806086764565b3c60bd5c5c41435742
3
+ metadata.gz: 8a6059c535fdbd1fff30f3199819041bb0644bff1c4f929838a3437aafbb41f9
4
+ data.tar.gz: a9f11fbdef09295dc5c608ee17bd53361565690f1833e2becb4adeaf3072fc55
5
5
  SHA512:
6
- metadata.gz: 48161844767112cc64665c512ad893a2734f069c03d22a7b1c340e9dca52d48ab6a2ae32b6ebe5ef8c5b31612cc1649473273770fc33b3f12c5f03061a54dc33
7
- data.tar.gz: 509b370fdc936e5e3e11a8e8b4f970bee98855b0d40710fa236e62061c36a681428a4dc39ca099e0d644947f40498a84dc6314f77eb90b68ac8dd21fe9f0d717
6
+ metadata.gz: '094e3770c8886e01a84a6bdacee39c2f4a89717aaf6ba5de6d39957d1a3f6218a65b0855c27761038d1a31f4030d0b97fb650fa01a605e4400dd48afca86e826'
7
+ data.tar.gz: 9a91a2874c9a3fc4c925d9b9f184e475d2ccb50b44f41aee1d99dfbb68f3414e69fa3657c705fd602f08209b691974e1ed7c5505a776881c572edc571a612862
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,15 @@
1
1
  # Change log
2
2
 
3
+ ### 3.1.4 - 2023-02-01
4
+
5
+ * bug fixes
6
+ * fix parser parameters for openapi version 2
7
+
8
+ ### 3.1.3 - 2021-11-09
9
+
10
+ * features
11
+ * rubocop style
12
+
3
13
  ### 3.1.2 - 2021-09-28
4
14
 
5
15
  * 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,34 @@ 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
+ next result if method == 'parameters'
14
15
  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: ''))
16
+ path: "#{@prefix}#{action[0]}",
17
+ method: method.upcase,
18
+ content_type: '',
19
+ requests: [],
20
+ responses: responses(action[1][method]['responses'], @documentation['definitions']),
21
+ resource: ''
22
+ ))
21
23
  end
22
- result
23
24
  end
24
25
  end
25
26
 
26
27
  def responses(resp, defi)
27
28
  resp.inject([]) do |result, reponse|
28
29
  if reponse[1]['schema']
29
- result.push(
30
+ result.push(
30
31
  status: reponse[0],
31
32
  body: schema(reponse[1]['schema'], defi),
32
33
  'content-type': ''
33
- )
34
+ )
34
35
  else
35
36
  result.push(
36
- status: reponse[0],
37
- body: {},
38
- 'content-type': ''
37
+ status: reponse[0],
38
+ body: {},
39
+ 'content-type': ''
39
40
  )
40
41
  end
41
42
  end
@@ -43,36 +44,33 @@ module Tomograph
43
44
 
44
45
  def schema(sche, defi)
45
46
  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') }
47
+ res = sche.merge('definitions' => { sche['$ref'][14..-1] => defi[sche['$ref'][14..-1]] })
48
+ if defi[sche['$ref'][14..-1]].to_s.include?('$ref')
49
+ keys = defi[sche['$ref'][14..-1]].to_s.split('"').find_all { |word| word.include?('definitions') }
49
50
  keys.each do |key|
50
- res["definitions"].merge!({key[14..-1] => defi[key[14..-1]]})
51
+ res['definitions'].merge!({ key[14..-1] => defi[key[14..-1]] })
51
52
  end
52
53
  end
53
54
  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
55
+ elsif 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]] })
64
60
  end
61
+ res
62
+ else
63
+ sche
65
64
  end
66
65
  end
67
66
 
68
67
  def search_hash(hash, key)
69
68
  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
69
+
70
+ hash.delete_if { |_key, value| value.class != Hash }
71
+ new_hash = {}
72
+ hash.each_value { |values| new_hash.merge!(values) }
73
+ search_hash(new_hash, key) unless new_hash.empty?
76
74
  end
77
75
 
78
76
  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.4'.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.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - d.efimov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2023-02-01 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
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
201
  requirements: []
202
- rubygems_version: 3.1.2
202
+ rubygems_version: 3.2.22
203
203
  signing_key:
204
204
  specification_version: 4
205
205
  summary: Convert API Blueprint, Swagger and OpenAPI to Tomogram