yaml_ref_resolver 0.3.0 → 0.3.1
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/lib/yaml_ref_resolver/version.rb +1 -1
- data/lib/yaml_ref_resolver.rb +50 -14
- 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: 3d7f42af28ee1b2b85cb5657be83f8096e3f34bc
|
4
|
+
data.tar.gz: dcba469e9cf920b111a14b480a6aacb3b4d70d59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6339ebc5a39a7224861642ad2fe480196eb2c494b694d7087cdeb32f18c3cb061a18dac42a64c186929af3854e6911203a145028648734339df754f8f1976225
|
7
|
+
data.tar.gz: 689dac3c5b409db892cf78b99767142939f58dca790ef44db9d914ab0b21a5465831aa51106f07c71cc173eaa0e6f56785b77fa4ca15253808806819d55731a0
|
data/lib/yaml_ref_resolver.rb
CHANGED
@@ -4,37 +4,73 @@ require "yaml"
|
|
4
4
|
class YamlRefResolver
|
5
5
|
def initialize(opts = {})
|
6
6
|
@key = opts[:key] || '$ref'
|
7
|
+
@yaml = {}
|
7
8
|
end
|
8
9
|
|
9
10
|
def resolve(path)
|
10
|
-
|
11
|
+
entry_point = File.expand_path(path)
|
12
|
+
preload_ref_yamls(entry_point)
|
13
|
+
|
14
|
+
resolve_refs(@yaml[entry_point], entry_point)
|
11
15
|
end
|
12
16
|
|
13
17
|
private
|
14
18
|
|
15
|
-
def
|
16
|
-
return
|
17
|
-
|
19
|
+
def preload_ref_yamls(abs_path)
|
20
|
+
return if @yaml.has_key?(abs_path)
|
21
|
+
|
22
|
+
@yaml[abs_path] = YAML.load_file(abs_path)
|
23
|
+
find_refs(@yaml[abs_path]).each do |ref_target|
|
24
|
+
rel_path, pos = ref_target.split('#')
|
25
|
+
preload_ref_yamls(File.expand_path(rel_path, File.dirname(abs_path)))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def find_refs(obj)
|
30
|
+
do_find_refs(obj).flatten.compact
|
31
|
+
end
|
32
|
+
|
33
|
+
def do_find_refs(obj)
|
34
|
+
return do_find_refs_hash(obj) if obj.is_a? Hash
|
35
|
+
return do_find_refs_array(obj) if obj.is_a? Array
|
36
|
+
return []
|
37
|
+
end
|
38
|
+
|
39
|
+
def do_find_refs_hash(hash)
|
40
|
+
hash.inject([]) {|acc, (key, val)| acc << (key == @key ? val : do_find_refs(val)) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def do_find_refs_array(array)
|
44
|
+
array.map {|e| find_refs(e) }
|
45
|
+
end
|
46
|
+
|
47
|
+
def resolve_refs(obj, referrer)
|
48
|
+
return resolve_hash(obj, referrer) if obj.is_a? Hash
|
49
|
+
return resolve_array(obj, referrer) if obj.is_a? Array
|
18
50
|
return obj
|
19
51
|
end
|
20
52
|
|
21
|
-
def resolve_hash(hash,
|
22
|
-
resolved = hash.map do |
|
23
|
-
if
|
24
|
-
path, pos =
|
25
|
-
ref_path = File.
|
26
|
-
|
53
|
+
def resolve_hash(hash, referrer)
|
54
|
+
resolved = hash.map do |key, val|
|
55
|
+
if key == @key
|
56
|
+
path, pos = val.split('#')
|
57
|
+
ref_path = File.expand_path(path, File.dirname(referrer))
|
58
|
+
pos_keys = pos.split('/').reject {|s| s == "" }
|
27
59
|
|
28
|
-
|
60
|
+
if pos_keys.size == 0
|
61
|
+
resolve_refs(@yaml[ref_path], ref_path)
|
62
|
+
else
|
63
|
+
resolve_refs(@yaml[ref_path].dig(*pos_keys), ref_path)
|
64
|
+
end
|
29
65
|
else
|
30
|
-
Hash[
|
66
|
+
Hash[key, resolve_refs(val, referrer)]
|
31
67
|
end
|
32
68
|
end
|
33
69
|
|
34
70
|
resolved.inject{|h1, h2| h1.merge h2 }
|
35
71
|
end
|
36
72
|
|
37
|
-
def resolve_array(array,
|
38
|
-
array.map {|e| resolve_refs(e,
|
73
|
+
def resolve_array(array, referrer)
|
74
|
+
array.map {|e| resolve_refs(e, referrer) }
|
39
75
|
end
|
40
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml_ref_resolver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joe-noh
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
version: '0'
|
108
108
|
requirements: []
|
109
109
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
110
|
+
rubygems_version: 2.5.1
|
111
111
|
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Resolves referencing to other YAML files.
|