json_refs 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b4f17701df4b9c089a11c31f6bde308873931802
4
- data.tar.gz: 6f581341bdf53bf52e6b27ce88a774a805ad8e66
2
+ SHA256:
3
+ metadata.gz: f9d9b14ec87e1407d7d3b00072fb482411ca869be27fb0a0834b318f36fe67bf
4
+ data.tar.gz: a2da652fad017f11c8351cea424d5bf9771e1d316fb23c953f28d7f2d34601d9
5
5
  SHA512:
6
- metadata.gz: 4f29bdc8161c0a125a6875e3171cbaa6519c57027eeb28ab4a6be3f22fe7374917b9e0ce2fb323c56b8e13bdcd0509f36e1373425d3e9a98233df638fb70ccbd
7
- data.tar.gz: cfc0d80386cde5a632ca668011c94aefcebca2e62fe81c355533a0584199ef35e48111ec866e4e289a22a7ebbe08d4deec44850852548cb4ee9d319d8524d706
6
+ metadata.gz: 227cfbe8ae21a70547f77dd3985b6d7f2213d053e9691edf025cedb884f1a810a019399ab6ec0bba649370ce1da21490f102ceb4977643f968112f558ac671e8
7
+ data.tar.gz: 9022c0601623fe3c21cfafe5b480ae5c2feeefd2dff89cc6a436b54d0087ab275aaee11c683af8aa1239abdef21baec7476fe3d93743a322272ee24b9ab8c998
@@ -1,7 +1,6 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.1.10
5
- - 2.2.8
6
4
  - 2.3.5
7
5
  - 2.4.2
6
+ - 2.5.1
data/README.md CHANGED
@@ -39,8 +39,30 @@ json = {
39
39
  '$ref' => 'http://httpbin.org/user-agent'
40
40
  }
41
41
  }
42
+ JsonRefs.(json)
42
43
  ```
43
44
 
45
+ YAML is also available for file format.
46
+ ```ruby
47
+ json = {
48
+ 'a' => {
49
+ '$ref' => '/path/to/yaml.yml'
50
+ },
51
+ 'b' => {
52
+ '$ref' => '/path/to/yaml.yaml'
53
+ }
54
+ }
55
+ JsonRefs.(json)
56
+ ```
57
+
58
+ In case you don't want to resolve local references or file references, you have the following options
59
+ to pass down when you initialize the JSONRefs. If you don't pass the following, both references will be resolved.
60
+ ```ruby
61
+ JsonRefs.(json, { resolve_local_ref: false, resolve_file_ref: true })
62
+ ```
63
+
64
+ JSONRef supports recursive reference resolving. If one the files that you reference have another reference in it, JSONRef will try to automatically resolve that.
65
+
44
66
  ## Development
45
67
 
46
68
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency "hana"
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.15"
26
+ spec.add_development_dependency "bundler", "~> 2.0"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
29
29
  end
@@ -2,13 +2,14 @@ require 'json_refs/version'
2
2
  require 'json_refs/dereference_handler'
3
3
 
4
4
  module JsonRefs
5
- def self.call(doc)
6
- Dereferencer.new(doc).call
5
+ def self.call(doc, options = {})
6
+ Dereferencer.new(doc, options).call
7
7
  end
8
8
 
9
9
  class Dereferencer
10
- def initialize(doc)
10
+ def initialize(doc, options = {})
11
11
  @doc = doc
12
+ @options = options
12
13
  end
13
14
 
14
15
  def call(doc = @doc, keys = [])
@@ -39,8 +40,53 @@ module JsonRefs
39
40
  end
40
41
 
41
42
  def referenced_value(referenced_path)
42
- klass = referenced_path =~ /^#/ ? JsonRefs::DereferenceHandler::Local : JsonRefs::DereferenceHandler::File
43
+ if @options[:logging] == true
44
+ puts "De-referencing #{referenced_path}"
45
+ end
46
+
47
+ if referenced_path =~ /^#/
48
+ dereference_local(referenced_path)
49
+ else
50
+ dereference_file(referenced_path)
51
+ end
52
+ end
53
+
54
+ def dereference_local(referenced_path)
55
+ if @options[:resolve_local_ref] === false
56
+ return { '$ref': referenced_path }
57
+ end
58
+
59
+ klass = JsonRefs::DereferenceHandler::Local
43
60
  klass.new(path: referenced_path, doc: @doc).call
44
61
  end
62
+
63
+ def dereference_file(referenced_path)
64
+ if @options[:resolve_file_ref] === false
65
+ return { '$ref': referenced_path }
66
+ end
67
+
68
+ klass = JsonRefs::DereferenceHandler::File
69
+
70
+ # Checking for "://" in a URL like http://something.com so as to determine if it's a remote URL
71
+ remote_uri = referenced_path =~ /:\/\//
72
+
73
+ if remote_uri
74
+ klass.new(path: referenced_path, doc: @doc).call
75
+ else
76
+ recursive_dereference(referenced_path, klass)
77
+ end
78
+ end
79
+
80
+ def recursive_dereference(referenced_path, klass)
81
+ directory = File.dirname(referenced_path)
82
+ filename = File.basename(referenced_path)
83
+
84
+ dereferenced_doc = {}
85
+ Dir.chdir(directory) do
86
+ referenced_doc = klass.new(path: filename, doc: @doc).call
87
+ dereferenced_doc = Dereferencer.new(referenced_doc, @options).call
88
+ end
89
+ dereferenced_doc
90
+ end
45
91
  end
46
92
  end
@@ -1,3 +1,3 @@
1
1
  module JsonRefs
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
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.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Makoto Tajitsu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-19 00:00:00.000000000 Z
11
+ date: 2020-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hana
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.15'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.15'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -106,8 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  - !ruby/object:Gem::Version
107
107
  version: '0'
108
108
  requirements: []
109
- rubyforge_project:
110
- rubygems_version: 2.6.11
109
+ rubygems_version: 3.0.3
111
110
  signing_key:
112
111
  specification_version: 4
113
112
  summary: Dereference JSON Pointer