json_refs 0.1.3 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f9d9b14ec87e1407d7d3b00072fb482411ca869be27fb0a0834b318f36fe67bf
4
- data.tar.gz: a2da652fad017f11c8351cea424d5bf9771e1d316fb23c953f28d7f2d34601d9
3
+ metadata.gz: 1189625a84d998e3d9a6f249368c187bf0144393271aec06398830ba0ddc66a1
4
+ data.tar.gz: c079bf4dbf63782819d5d1081396c7f9e8ad9f155e5ef701ca337a6a21f3a176
5
5
  SHA512:
6
- metadata.gz: 227cfbe8ae21a70547f77dd3985b6d7f2213d053e9691edf025cedb884f1a810a019399ab6ec0bba649370ce1da21490f102ceb4977643f968112f558ac671e8
7
- data.tar.gz: 9022c0601623fe3c21cfafe5b480ae5c2feeefd2dff89cc6a436b54d0087ab275aaee11c683af8aa1239abdef21baec7476fe3d93743a322272ee24b9ab8c998
6
+ metadata.gz: b18e096f64d639506cc39728e426af5ff276bee765c69331ba9a32d401299439367a851142717ab51214755ef2934eb34793a582e3cda73782fd8f5394eef3ce
7
+ data.tar.gz: afab208bf473c6f575761b0e51a83a99e8abefe625e185f13ebb93caed688e9e882eba9bdec49925a53e646eb22d61f59b6d4d8aec3db219ef2f28e09964c1fa
data/.travis.yml CHANGED
@@ -1,6 +1,13 @@
1
1
  sudo: false
2
+
2
3
  language: ruby
4
+
3
5
  rvm:
4
- - 2.3.5
5
- - 2.4.2
6
- - 2.5.1
6
+ - 2.3.8
7
+ - 2.4.10
8
+ - 2.5.8
9
+ - 2.6.6
10
+ - 2.7.1
11
+
12
+ before_install:
13
+ - gem install -N bundler
data/json_refs.gemspec CHANGED
@@ -24,6 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency "hana"
25
25
 
26
26
  spec.add_development_dependency "bundler", "~> 2.0"
27
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rake", ">= 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
  end
@@ -27,8 +27,7 @@ module JsonRefs
27
27
  end
28
28
 
29
29
  def handle(filename)
30
- f = open(filename)
31
- @body = f.read
30
+ @body = read_reference_file(filename)
32
31
  ext = File.extname(filename)[1..-1]
33
32
  ext ||= 'json' if json?(@body)
34
33
  ext && EXTENSIONS.include?(ext) ? EXTENSIONS[ext].new.call(@body) : @body
@@ -40,5 +39,15 @@ module JsonRefs
40
39
  rescue JSON::ParserError => e
41
40
  false
42
41
  end
42
+
43
+ private
44
+
45
+ def read_reference_file(filename)
46
+ if RUBY_VERSION >= '2.7.0'
47
+ URI.open(filename, 'r', &:read)
48
+ else
49
+ open(filename, 'r', &:read)
50
+ end
51
+ end
43
52
  end
44
53
  end
@@ -1,3 +1,3 @@
1
1
  module JsonRefs
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.7"
3
3
  end
data/lib/json_refs.rb CHANGED
@@ -2,8 +2,12 @@ require 'json_refs/version'
2
2
  require 'json_refs/dereference_handler'
3
3
 
4
4
  module JsonRefs
5
- def self.call(doc, options = {})
6
- Dereferencer.new(doc, options).call
5
+ class << self
6
+ def call(doc, options = {})
7
+ Dereferencer.new(doc, options).call
8
+ end
9
+
10
+ alias_method :dereference, :call
7
11
  end
8
12
 
9
13
  class Dereferencer
@@ -36,7 +40,14 @@ module JsonRefs
36
40
  target = paths.inject(@doc) do |obj, key|
37
41
  obj[key]
38
42
  end
39
- target[key] = referenced_value(referenced_path)
43
+ value = follow_referenced_value(referenced_path)
44
+ target[key] = value
45
+ end
46
+
47
+ def follow_referenced_value(referenced_path)
48
+ value = referenced_value(referenced_path)
49
+ return referenced_value(value['$ref']) if value.is_a?(Hash) && value.has_key?('$ref')
50
+ value
40
51
  end
41
52
 
42
53
  def referenced_value(referenced_path)
@@ -44,16 +55,22 @@ module JsonRefs
44
55
  puts "De-referencing #{referenced_path}"
45
56
  end
46
57
 
47
- if referenced_path =~ /^#/
48
- dereference_local(referenced_path)
49
- else
50
- dereference_file(referenced_path)
51
- end
58
+ filepath, pointer = referenced_path.split('#')
59
+ pointer.prepend('#') if pointer
60
+ return dereference_local(pointer) if filepath.empty?
61
+
62
+ dereferenced_file = dereference_file(filepath)
63
+ return dereferenced_file if pointer.nil?
64
+
65
+ JsonRefs::DereferenceHandler::Local.new(
66
+ doc: dereferenced_file,
67
+ path: pointer
68
+ ).call
52
69
  end
53
70
 
54
71
  def dereference_local(referenced_path)
55
72
  if @options[:resolve_local_ref] === false
56
- return { '$ref': referenced_path }
73
+ return { '$ref' => referenced_path }
57
74
  end
58
75
 
59
76
  klass = JsonRefs::DereferenceHandler::Local
@@ -62,7 +79,7 @@ module JsonRefs
62
79
 
63
80
  def dereference_file(referenced_path)
64
81
  if @options[:resolve_file_ref] === false
65
- return { '$ref': referenced_path }
82
+ return { '$ref' => referenced_path }
66
83
  end
67
84
 
68
85
  klass = JsonRefs::DereferenceHandler::File
@@ -80,7 +97,7 @@ module JsonRefs
80
97
  def recursive_dereference(referenced_path, klass)
81
98
  directory = File.dirname(referenced_path)
82
99
  filename = File.basename(referenced_path)
83
-
100
+
84
101
  dereferenced_doc = {}
85
102
  Dir.chdir(directory) do
86
103
  referenced_doc = klass.new(path: filename, doc: @doc).call
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_refs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Makoto Tajitsu
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-02-27 00:00:00.000000000 Z
11
+ date: 2021-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hana
@@ -42,14 +42,14 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '10.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '10.0'
55
55
  - !ruby/object:Gem::Dependency
@@ -91,7 +91,7 @@ homepage: https://github.com/tzmfreedom/json_refs
91
91
  licenses:
92
92
  - MIT
93
93
  metadata: {}
94
- post_install_message:
94
+ post_install_message:
95
95
  rdoc_options: []
96
96
  require_paths:
97
97
  - lib
@@ -106,8 +106,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubygems_version: 3.0.3
110
- signing_key:
109
+ rubygems_version: 3.2.22
110
+ signing_key:
111
111
  specification_version: 4
112
112
  summary: Dereference JSON Pointer
113
113
  test_files: []