open_api_import 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +0 -2
- data/lib/open_api_import.rb +56 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 17c79278e2222735a82cd0665f8f5d616e1dfd347d5b90bd30bf30cafbcefbe3
|
4
|
+
data.tar.gz: 8987e63d22bc8ba904c28176847092a9852977a0f096642eb86421f9738a2371
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e70c1b50b46943027b866fcb05039de1f6bb3349188d37968e014ff4eed41112e99830d3e4caae33933ed7951395efc54351d7e01c9fc11794e49f6c38c14836
|
7
|
+
data.tar.gz: 1840e5b30244b7de1ed8fd60c5d62b87de9cd25709ff0506b43f17db994ee3301d27cc555bb1d89d7d395d0ea2a1fefbaf1f1e112aa7a2854704b529130ae65b
|
data/README.md
CHANGED
@@ -8,8 +8,6 @@ Import a Swagger or Open API file and create a Ruby Request Hash file including
|
|
8
8
|
|
9
9
|
The Request Hash will include also the pattern (regular expressions) of the fields, parameters, default values...
|
10
10
|
|
11
|
-
On this first preliminary version we only fully support Open API v2. Open API v3 is not fully supported yet.
|
12
|
-
|
13
11
|
The output of this gem will be following the specification of Request Hashes: https://github.com/MarioRuiz/Request-Hash
|
14
12
|
|
15
13
|
The Request Hashes generated will be able to be used with any Ruby Http Client and it is adapted even better with nice_http gem: https://github.com/MarioRuiz/nice_http
|
data/lib/open_api_import.rb
CHANGED
@@ -60,10 +60,6 @@ class OpenApiImport
|
|
60
60
|
end
|
61
61
|
if raw[:swagger].to_f < 2.0
|
62
62
|
raise "Unsupported Swagger version. Only versions >= 2.0 are valid."
|
63
|
-
elsif raw[:swagger].to_f >= 3.0
|
64
|
-
message = "Take in consideration Open API #{raw[:swagger]} is not fully supported for the moment while we are in preliminary version of open_api_import."
|
65
|
-
warn message
|
66
|
-
@logger.warn message
|
67
63
|
end
|
68
64
|
|
69
65
|
base_host = ""
|
@@ -228,10 +224,26 @@ class OpenApiImport
|
|
228
224
|
|
229
225
|
end
|
230
226
|
end
|
227
|
+
# todo: for open api 3.0 add the new Link feature: https://swagger.io/docs/specification/links/
|
228
|
+
# todo: for open api 3.0 is not getting the required params in all cases
|
229
|
+
|
230
|
+
# for the case open api 3 with cont.requestBody.content.'applicatin/json'.schema
|
231
|
+
# example: petstore-expanded.yaml operationId=addPet
|
232
|
+
if cont.key?(:requestBody) and cont[:requestBody].key?(:content) and
|
233
|
+
cont[:requestBody][:content].key?(:'application/json') and cont[:requestBody][:content][:'application/json'].key?(:schema)
|
234
|
+
cont[:parameters] = [] unless cont.key?(:parameters)
|
235
|
+
cont[:parameters] << {in: 'body', schema: cont[:requestBody][:content][:'application/json'][:schema] }
|
236
|
+
end
|
231
237
|
|
232
|
-
# todo: for open api 3.0 is not getting the required params
|
233
238
|
if cont.key?(:parameters) && cont[:parameters].is_a?(Array)
|
234
239
|
cont[:parameters].each do |p|
|
240
|
+
if p.keys.include?(:schema) and p[:schema].include?(:type)
|
241
|
+
type = p[:schema][:type]
|
242
|
+
elsif p.keys.include?(:type)
|
243
|
+
type = p[:type]
|
244
|
+
else
|
245
|
+
type = ""
|
246
|
+
end
|
235
247
|
if p[:in] == "path"
|
236
248
|
if create_method_name == :operationId
|
237
249
|
param_name = p[:name]
|
@@ -242,19 +254,13 @@ class OpenApiImport
|
|
242
254
|
end
|
243
255
|
params_path << param_name
|
244
256
|
#params_required << param_name if p[:required].to_s=="true"
|
245
|
-
|
246
|
-
if p.keys.include?(:description)
|
247
|
-
description_parameters << "# #{p[:name]}: (#{p[:type]}) #{"(required)" if p[:required].to_s=="true"} #{p[:description]}"
|
248
|
-
end
|
257
|
+
description_parameters << "# #{p[:name]}: (#{type}) #{"(required)" if p[:required].to_s=="true"} #{p[:description]}"
|
249
258
|
elsif p[:in] == "query"
|
250
259
|
params_query << p[:name]
|
251
260
|
params_required << p[:name] if p[:required].to_s=="true"
|
252
|
-
if p.
|
253
|
-
description_parameters << "# #{p[:name]}: (#{p[:type]}) #{"(required)" if p[:required].to_s=="true"} #{p[:description]}"
|
254
|
-
end
|
261
|
+
description_parameters << "# #{p[:name]}: (#{type}) #{"(required)" if p[:required].to_s=="true"} #{p[:description]}"
|
255
262
|
elsif p[:in] == "body"
|
256
263
|
if p.keys.include?(:schema)
|
257
|
-
#jal
|
258
264
|
if p[:schema].key?(:oneOf)
|
259
265
|
bodies = p[:schema][:oneOf]
|
260
266
|
elsif p[:schema].key?(:anyOf)
|
@@ -556,7 +562,14 @@ class OpenApiImport
|
|
556
562
|
private def get_response_examples(v)
|
557
563
|
# TODO: take in consideration the case allOf, oneOf... schema.items.allOf[0].properties schema.items.allOf[1].properties
|
558
564
|
# example on https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/yaml/petstore-expanded.yaml
|
565
|
+
v=v.dup
|
559
566
|
response_example = Array.new()
|
567
|
+
# for open api 3.0 with responses schema inside content
|
568
|
+
if v.key?(:content) && v[:content].is_a?(Hash) && v[:content].key?(:'application/json') &&
|
569
|
+
v[:content][:'application/json'].key?(:schema)
|
570
|
+
v=v[:content][:'application/json'].dup
|
571
|
+
end
|
572
|
+
|
560
573
|
if v.key?(:examples) && v[:examples].is_a?(Hash) && v[:examples].key?(:'application/json')
|
561
574
|
if v[:examples][:'application/json'].is_a?(String)
|
562
575
|
response_example << v[:examples][:'application/json']
|
@@ -575,6 +588,36 @@ class OpenApiImport
|
|
575
588
|
end
|
576
589
|
response_example << "]"
|
577
590
|
end
|
591
|
+
# for open api 3.0. examples on reponses, for example: api-with-examples.yaml
|
592
|
+
elsif v.key?(:content) && v[:content].is_a?(Hash) && v[:content].key?(:'application/json') &&
|
593
|
+
v[:content][:'application/json'].key?(:examples)
|
594
|
+
v[:content][:'application/json'][:examples].each do |tk, tv|
|
595
|
+
#todo: for the moment we only take in consideration the first example of response.
|
596
|
+
# we need to decide how to manage to do it correctly
|
597
|
+
if tv.key?(:value)
|
598
|
+
tresp = tv[:value]
|
599
|
+
else
|
600
|
+
tresp = ""
|
601
|
+
end
|
602
|
+
if tresp.is_a?(String)
|
603
|
+
response_example << tresp
|
604
|
+
elsif tresp.is_a?(Hash)
|
605
|
+
exs = tresp.to_s
|
606
|
+
exs.gsub!(/:(\w+)=>/, "\n\\1: ")
|
607
|
+
response_example << exs
|
608
|
+
elsif tresp.is_a?(Array)
|
609
|
+
response_example << "["
|
610
|
+
tresp.each do |ex|
|
611
|
+
exs = ex.to_s
|
612
|
+
if ex.is_a?(Hash)
|
613
|
+
exs.gsub!(/:(\w+)=>/, "\n\\1: ")
|
614
|
+
end
|
615
|
+
response_example << (exs + ", ")
|
616
|
+
end
|
617
|
+
response_example << "]"
|
618
|
+
end
|
619
|
+
break #only the first one it is considered
|
620
|
+
end
|
578
621
|
elsif v.key?(:schema) && v[:schema].is_a?(Hash) &&
|
579
622
|
(v[:schema].key?(:properties) ||
|
580
623
|
(v[:schema].key?(:items) && v[:schema][:items].key?(:properties)) ||
|
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.
|
4
|
+
version: 0.5.0
|
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-02-
|
11
|
+
date: 2019-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oas_parser
|