open_api_parser 1.2.2 → 1.2.3
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/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/lib/open_api_parser/document.rb +18 -14
- data/lib/open_api_parser/pointer.rb +6 -6
- data/lib/open_api_parser/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb1e58a744378c59f9ee81c24d755d8646bf9541
|
4
|
+
data.tar.gz: 76272f7d191a2e31bfccfcb408909fa5df624574
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74196435e01d89cf94061e50606d0245c6d27de84778da4172289882ccf48317bd7ebdd8b75e7b7231bd6dfb13da9644da87e8420bbd16115fae4ae9ccab95cb
|
7
|
+
data.tar.gz: 97151dab417f912d4180ce34c00ed8f9d0552a7c7b6753db3c073455d172de0d1c9406e83d44aeeebd6442c493c3113c7931cc3916132de0e5735e99c14f12da
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module OpenApiParser
|
2
2
|
class Document
|
3
|
-
def self.resolve(path, file_cache=OpenApiParser::FileCache.new)
|
3
|
+
def self.resolve(path, file_cache = OpenApiParser::FileCache.new)
|
4
4
|
file_cache.get(path) do
|
5
5
|
content = YAML.load_file(path)
|
6
6
|
Document.new(path, content, file_cache).resolve
|
@@ -14,36 +14,36 @@ module OpenApiParser
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def resolve
|
17
|
-
deeply_expand_refs(@content)
|
17
|
+
deeply_expand_refs(@content, nil)
|
18
18
|
end
|
19
19
|
|
20
20
|
private
|
21
21
|
|
22
|
-
def deeply_expand_refs(fragment)
|
23
|
-
fragment = expand_refs(fragment)
|
22
|
+
def deeply_expand_refs(fragment, cur_path)
|
23
|
+
fragment, cur_path = expand_refs(fragment, cur_path)
|
24
24
|
|
25
25
|
if fragment.is_a?(Hash)
|
26
26
|
fragment.reduce({}) do |hash, (k, v)|
|
27
|
-
hash.merge(k => deeply_expand_refs(v))
|
27
|
+
hash.merge(k => deeply_expand_refs(v, "#{cur_path}/#{k}"))
|
28
28
|
end
|
29
29
|
elsif fragment.is_a?(Array)
|
30
|
-
fragment.map { |e| deeply_expand_refs(e) }
|
30
|
+
fragment.map { |e| deeply_expand_refs(e, cur_path) }
|
31
31
|
else
|
32
32
|
fragment
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
def expand_refs(fragment)
|
37
|
-
if fragment.is_a?(Hash) && fragment.
|
36
|
+
def expand_refs(fragment, cur_path)
|
37
|
+
if fragment.is_a?(Hash) && fragment.key?("$ref")
|
38
38
|
ref = fragment["$ref"]
|
39
39
|
|
40
|
-
if ref
|
40
|
+
if ref.start_with?("file:")
|
41
41
|
expand_file(ref)
|
42
42
|
else
|
43
|
-
expand_pointer(ref)
|
43
|
+
expand_pointer(ref, cur_path)
|
44
44
|
end
|
45
45
|
else
|
46
|
-
fragment
|
46
|
+
[fragment, cur_path]
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -54,11 +54,15 @@ module OpenApiParser
|
|
54
54
|
Document.resolve(absolute_path, @file_cache)
|
55
55
|
end
|
56
56
|
|
57
|
-
def expand_pointer(ref)
|
57
|
+
def expand_pointer(ref, cur_path)
|
58
58
|
pointer = OpenApiParser::Pointer.new(ref)
|
59
|
-
fragment = pointer.resolve(@content)
|
60
59
|
|
61
|
-
|
60
|
+
if pointer.exists_in_path?(cur_path)
|
61
|
+
{ "$ref" => ref }
|
62
|
+
else
|
63
|
+
fragment = pointer.resolve(@content)
|
64
|
+
expand_refs(fragment, cur_path + pointer.escaped_pointer)
|
65
|
+
end
|
62
66
|
end
|
63
67
|
end
|
64
68
|
end
|
@@ -12,7 +12,9 @@ module OpenApiParser
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
def exists_in_path?(path)
|
16
|
+
path.include?(escaped_pointer)
|
17
|
+
end
|
16
18
|
|
17
19
|
def escaped_pointer
|
18
20
|
if @raw_pointer.start_with?("#")
|
@@ -22,6 +24,8 @@ module OpenApiParser
|
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
27
|
+
private
|
28
|
+
|
25
29
|
def parse_token(token)
|
26
30
|
if token =~ /\A\d+\z/
|
27
31
|
token.to_i
|
@@ -32,11 +36,7 @@ module OpenApiParser
|
|
32
36
|
|
33
37
|
def tokens
|
34
38
|
tokens = escaped_pointer[1..-1].split("/")
|
35
|
-
|
36
|
-
if @raw_pointer.end_with?("/")
|
37
|
-
tokens << ""
|
38
|
-
end
|
39
|
-
|
39
|
+
tokens << "" if @raw_pointer.end_with?("/")
|
40
40
|
tokens.map do |token|
|
41
41
|
parse_token(token)
|
42
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: open_api_parser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Braintree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
127
|
version: '0'
|
128
128
|
requirements: []
|
129
129
|
rubyforge_project:
|
130
|
-
rubygems_version: 2.
|
130
|
+
rubygems_version: 2.6.14
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|
133
133
|
summary: A parser for Open API specifications
|