open_api_import 0.4.1 → 0.5.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 +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
|