open_api_import 0.8.8 → 0.8.9

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +8 -1
  3. data/lib/open_api_import.rb +53 -29
  4. metadata +22 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5fa1a76a617230a0abfacaa9dac96af4eb552527b48101359073c94634a6ca83
4
- data.tar.gz: f8c3f3bf50d9aeb17cd5910f6ab26fa52692420ae20af9f67a58536295787beb
3
+ metadata.gz: 563a76eeef59c666b1e77ed1efbfefb456119338fa14a94aa1c6f51eef4b0bb0
4
+ data.tar.gz: a6ef472adda72c06d37ec444c693ba7eb7c15dcedfd3754eb488f397ee130098
5
5
  SHA512:
6
- metadata.gz: 1ca17b645ee10cecec6cbbba624a50128b6b1efaa8afc07fb553a5db55f01097ac78826d89369b27b3a0a0ecd51486c7562d04ecfefaa47abf46efc50506db8b
7
- data.tar.gz: 91ad90bf66880330429278a558c9a9a72caf33de24533e475b36a1aa4b78b50024282f71edbdf0f3c538a6096dbaaf282567f8a65b7f4541a9eb43c8d6890b15
6
+ metadata.gz: aea7ea0650e23d9010fa08627409e9579ebdc4295209362844142d9a128ae945d483875ce6ea01ba2f67b193c712fc2742806caccd378f9d8b2830ea4dcbd345
7
+ data.tar.gz: 4a67757d85aafbf2e5ae9d41db2f186ffb67cc241585c1766c1e92a5fe05bfb0cde9f46871a3d979a7f952390702447e42862e00fc1d8cbd6e1905fa1aeb76d6
data/.yardopts CHANGED
@@ -2,4 +2,11 @@
2
2
  --title 'open_api_import - OpenApiImport -- Import a swagger or Open API file and create a Ruby Request Hash file including all requests and responses'
3
3
  --charset utf-8
4
4
  --markup markdown
5
- 'lib/*.rb' - '*.md' - 'LICENSE'
5
+ --exclude features
6
+ --no-private
7
+ --default-return void
8
+
9
+ lib/*.rb
10
+ lib/open_api_import/*.rb
11
+ -
12
+ LICENSE
@@ -7,21 +7,21 @@ require "logger"
7
7
 
8
8
  class OpenApiImport
9
9
  ##############################################################################################
10
- # Import a Swagger or Open API file and create a Ruby Request Hash file including all requests and responses.
10
+ # Import a Swagger or Open API file and create a Ruby Request Hash file including all requests and responses.
11
11
  # The http methods that will be treated are: 'get','post','put','delete', 'patch'.
12
12
  # @param swagger_file [String]. Path and file name. Could be absolute or relative to project root folder.
13
13
  # @param include_responses [Boolean]. (default: true) if you want to add the examples of responses in the resultant file.
14
- # @param mock_response [Boolean]. (default:false) Add the first response on the request as mock_response to be used.
14
+ # @param mock_response [Boolean]. (default:false) Add the first response on the request as mock_response to be used.
15
15
  # In case using nice_http gem: if NiceHttp.use_mocks = true will use it instead of getting the real response from the WS.
16
- # @param create_method_name [Symbol]. (:path, :operation_id, :operationId) (default: operation_id). How the name of the methods will be generated.
17
- # path: it will be used the path and http method, for example for a GET on path: /users/list, the method name will be get_users_list
18
- # operation_id: it will be used the operationId field but using the snake_case version, for example for listUsers: list_users
16
+ # @param create_method_name [Symbol]. (:path, :operation_id, :operationId) (default: operation_id). How the name of the methods will be generated.
17
+ # path: it will be used the path and http method, for example for a GET on path: /users/list, the method name will be get_users_list
18
+ # operation_id: it will be used the operationId field but using the snake_case version, for example for listUsers: list_users
19
19
  # operationId: it will be used the operationId field like it is, for example: listUsers
20
- # @param name_for_module [Symbol]. (:path, :path_file, :fixed, :tags, :tags_file) (default: :path). How the module names will be created.
21
- # path: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and all the requests from all modules in the same file.
22
- # path_file: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and each module will be in a new requests file.
23
- # tags: It will be used the tags key to create the module name, for example the tags: [users,list] will create the module UsersList and all the requests from all modules in the same file.
24
- # tags_file: It will be used the tags key to create the module name, for example the tags: [users,list] will create the module UsersList and and each module will be in a new requests file.
20
+ # @param name_for_module [Symbol]. (:path, :path_file, :fixed, :tags, :tags_file) (default: :path). How the module names will be created.
21
+ # path: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and all the requests from all modules in the same file.
22
+ # path_file: It will be used the first folder of the path to create the module name, for example the path /users/list will be in the module Users and each module will be in a new requests file.
23
+ # tags: It will be used the tags key to create the module name, for example the tags: [users,list] will create the module UsersList and all the requests from all modules in the same file.
24
+ # tags_file: It will be used the tags key to create the module name, for example the tags: [users,list] will create the module UsersList and and each module will be in a new requests file.
25
25
  # fixed: all the requests will be under the module Requests
26
26
  ##############################################################################################
27
27
  def self.from(swagger_file, create_method_name: :operation_id, include_responses: true, mock_response: false, name_for_module: :path)
@@ -29,6 +29,7 @@ class OpenApiImport
29
29
  f = File.new("#{swagger_file}_open_api_import.log", "w")
30
30
  f.sync = true
31
31
  @logger = Logger.new f
32
+ puts "Logs file: #{swagger_file}_open_api_import.log"
32
33
  rescue StandardError => e
33
34
  warn "Not possible to create the Logger file"
34
35
  warn e
@@ -126,9 +127,11 @@ class OpenApiImport
126
127
  params_path = []
127
128
  params_query = []
128
129
  params_required = []
130
+ params_data = []
129
131
  description_parameters = []
130
132
  data_form = []
131
133
  data_required = []
134
+ #todo: add nested one.true.three to data_read_only
132
135
  data_read_only = []
133
136
  data_default = []
134
137
  data_examples = []
@@ -137,6 +140,7 @@ class OpenApiImport
137
140
 
138
141
  # for the case operationId is missing
139
142
  cont[:operationId] = "undefined" unless cont.key?(:operationId)
143
+
140
144
  if create_method_name == :path
141
145
  method_name = (met.to_s + "_" + path.path.to_s).snake_case
142
146
  method_name.chop! if method_name[-1] == "_"
@@ -415,6 +419,7 @@ class OpenApiImport
415
419
  end
416
420
  end
417
421
  end
422
+
418
423
  end
419
424
 
420
425
  if description_parameters.size > 0
@@ -433,7 +438,7 @@ class OpenApiImport
433
438
  paramst.concat params
434
439
  params = paramst
435
440
  end
436
-
441
+
437
442
  output << "def self.#{method_name} (#{params.join(", ")})"
438
443
 
439
444
  output << "{"
@@ -446,12 +451,12 @@ class OpenApiImport
446
451
 
447
452
  unless data_required.empty?
448
453
  output << "data_required: ["
449
- output << ":#{data_required.uniq.join(", :")}".gsub(':{','{')
454
+ output << ":'#{data_required.uniq.join("', :'")}'"
450
455
  output << "],"
451
456
  end
452
457
  unless data_read_only.empty?
453
458
  output << "data_read_only: ["
454
- output << ":#{data_read_only.uniq.join(", :")}"
459
+ output << ":'#{data_read_only.uniq.join("', :'")}'"
455
460
  output << "],"
456
461
  end
457
462
  unless data_default.empty?
@@ -478,7 +483,11 @@ class OpenApiImport
478
483
  rescue
479
484
  data_ex = {}
480
485
  end
481
- reqdata = filter(data_ex, data_required)
486
+ if (data_required.grep(/\./)).empty?
487
+ reqdata = filter(data_ex, data_required) #not nested
488
+ else
489
+ reqdata = filter(data_ex, data_required, true) #nested
490
+ end
482
491
  unless reqdata.empty?
483
492
  phsd = pretty_hash_symbolized(reqdata)
484
493
  phsd[0]="data: {"
@@ -546,10 +555,12 @@ class OpenApiImport
546
555
  output_txt = output.join("\n")
547
556
  requests_file_path = file_to_convert + ".rb"
548
557
  File.open(requests_file_path, "w") { |file| file.write(output_txt) }
549
- `rufo #{requests_file_path}`
558
+ res_rufo = `rufo #{requests_file_path}`
550
559
  message = "** Requests file: #{swagger_file}.rb that contains the code of the requests after importing the Swagger file"
551
560
  puts message
552
561
  @logger.info message
562
+ @logger.error " Error formating with rufo" unless res_rufo.to_s.match?(/\AFormat:.+$\s*\z/)
563
+ @logger.error " Syntax Error: #{`ruby -c #{requests_file_path}`}" unless `ruby -c #{requests_file_path}`.include?("Syntax OK")
553
564
  else
554
565
  unless files.key?(module_requests)
555
566
  files[module_requests] = Array.new
@@ -566,19 +577,23 @@ class OpenApiImport
566
577
  requests_file_path = file_to_convert + "_" + mod + ".rb"
567
578
  requires_txt += "require_relative '#{File.basename(swagger_file)}_#{mod}'\n"
568
579
  File.open(requests_file_path, "w") { |file| file.write(output_txt) }
569
- `rufo #{requests_file_path}`
580
+ res_rufo = `rufo #{requests_file_path}`
570
581
  message = " - #{requests_file_path}"
571
582
  puts message
572
583
  @logger.info message
573
- end
584
+ @logger.error " Error formating with rufo" unless res_rufo.to_s.match?(/\AFormat:.+$\s*\z/)
585
+ @logger.error " Syntax Error: #{`ruby -c #{requests_file_path}`}" unless `ruby -c #{requests_file_path}`.include?("Syntax OK")
586
+ end
574
587
 
575
588
  requests_file_path = file_to_convert + ".rb"
576
589
  File.open(requests_file_path, "w") { |file| file.write(requires_txt) }
577
- `rufo #{requests_file_path}`
590
+ res_rufo = `rufo #{requests_file_path}`
578
591
  message = "** File that contains all the requires for all Request files: \n"
579
592
  message += " - #{requests_file_path} "
580
593
  puts message
581
594
  @logger.info message
595
+ @logger.error " Error formating with rufo" unless res_rufo.to_s.match?(/\AFormat:.+$\s*\z/)
596
+ @logger.error " Syntax Error: #{`ruby -c #{requests_file_path}`}" unless `ruby -c #{requests_file_path}`.include?("Syntax OK")
582
597
  end
583
598
 
584
599
  begin
@@ -822,7 +837,7 @@ class OpenApiImport
822
837
  body[:properties][key].key?(:required) and body[:properties][key][:required].size>0
823
838
  dr = get_required_data(body[:properties][key])
824
839
  dr.each do |k|
825
- data_required.push({key => k})
840
+ data_required.push("#{key}.#{k}".to_sym)
826
841
  end
827
842
  end
828
843
  end
@@ -892,19 +907,28 @@ class OpenApiImport
892
907
  end
893
908
 
894
909
  #filter hash
895
- private def filter(hash, keys)
910
+ def filter(hash, keys, nested = false)
896
911
  result = {}
897
912
  keys = [keys] unless keys.is_a?(Array)
898
- keys.each do |k|
899
- if k.is_a?(Symbol) and hash.key?(k)
900
- if hash[k].is_a?(Hash)
901
- result[k] = {}
902
- else
903
- result[k] = hash[k]
913
+ if nested
914
+ result = hash.nice_filter(keys)
915
+ else
916
+ #to be backwards compatible
917
+ keys.each do |k|
918
+ if k.is_a?(Symbol) and hash.key?(k)
919
+ if hash[k].is_a?(Hash)
920
+ result[k] = {}
921
+ else
922
+ result[k] = hash[k]
923
+ end
924
+ elsif k.is_a?(Symbol) and k.to_s.include?('.') and hash.key?((k.to_s.scan(/(\w+)\./).join).to_sym) #nested 'uno.dos.tres
925
+ kn = k.to_s.split('.')
926
+ vn = kn[1].to_sym
927
+ result[kn.first.to_sym][vn] = filter(hash[kn.first.to_sym], vn).values[0]
928
+ elsif k.is_a?(Hash) and hash.key?(k.keys[0]) #nested {uno: {dos: :tres}}
929
+ result[k.keys[0]][k.values[0]] = filter(hash[k.keys[0]], k.values[0]).values[0]
930
+ end
904
931
  end
905
- elsif k.is_a?(Hash) and hash.key?(k.keys[0])
906
- result[k.keys[0]][k.values[0]] = filter(hash[k.keys[0]], k.values[0]).values[0]
907
- end
908
932
  end
909
933
  return result
910
934
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_api_import
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.8
4
+ version: 0.8.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Ruiz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-30 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oas_parser
@@ -16,60 +16,60 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.16.0
19
+ version: 0.19.0
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.16'
22
+ version: '0.19'
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: 0.16.0
29
+ version: 0.19.0
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.16'
32
+ version: '0.19'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rufo
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.4'
40
37
  - - ">="
41
38
  - !ruby/object:Gem::Version
42
- version: 0.4.1
39
+ version: 0.7.0
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.7'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '0.4'
50
47
  - - ">="
51
48
  - !ruby/object:Gem::Version
52
- version: 0.4.1
49
+ version: 0.7.0
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '0.7'
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: nice_hash
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- version: 1.14.0
60
57
  - - "~>"
61
58
  - !ruby/object:Gem::Version
62
- version: '1.14'
59
+ version: '1.15'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 1.15.3
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: 1.14.0
70
67
  - - "~>"
71
68
  - !ruby/object:Gem::Version
72
- version: '1.14'
69
+ version: '1.15'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 1.15.3
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: rspec
75
75
  requirement: !ruby/object:Gem::Requirement