json-schema-reader 0.1.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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/jsontree +12 -0
  3. data/lib/json-schema-reader.rb +134 -0
  4. metadata +46 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: df484979b652b652e8dd16d12951edb83de6ec1d
4
+ data.tar.gz: e4fc53bc4f9d7c7767e5d0aabcdf1e273071e13e
5
+ SHA512:
6
+ metadata.gz: 0ea857ff9aecd4d7c0623f7c7e701ee193585a19df33fd779c5b1d84ca707a1ca56c64d288c2254e85df06d0486095f7538e2d79510aa2f1b0c034a3314c7bbc
7
+ data.tar.gz: e2c99940ec7aee65cba53193ee29dd226aef24a01d5190591d5e9074635863ca314a36d3b53a43af0031417fc768294ee9e71d9b481af2645d5bd5d939869ddc
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'json-schema-reader'
4
+
5
+ if ARGV.count == 0
6
+ puts "jsontree prints a tree view of a JSON schema file\n\n"
7
+ puts " Usage:\n jsontree path/to/file.json\n\n"
8
+ exit 1
9
+ end
10
+
11
+ schema = Schema.load_from_file ARGV[0]
12
+ schema.pretty_generate
@@ -0,0 +1,134 @@
1
+ require 'json'
2
+ require 'jsonpath'
3
+ require 'pathname'
4
+
5
+ # A little hack to let us reference hash members with dot notation
6
+ class Hash
7
+ def method_missing sym
8
+ self[sym.to_s]
9
+ end
10
+ end
11
+
12
+ class Schema
13
+ attr_accessor :data, :uri
14
+
15
+ def initialize data, uri
16
+ @data = JSON.parse data
17
+ @uri = uri
18
+ @data = expand @data
19
+ end
20
+
21
+ def self.load_from_file path
22
+ Schema.new File.read(path), Pathname.new(path).realdirpath
23
+ end
24
+
25
+ def path
26
+ @uri.dirname
27
+ end
28
+
29
+ def title
30
+ @data.title
31
+ end
32
+
33
+ def pretty_generate
34
+ puts @data.title
35
+ print_line @data
36
+ end
37
+
38
+ private
39
+
40
+ def print_line line, indent = ''
41
+ if line.properties && line.patternProperties
42
+ pp = line.properties.merge line.patternProperties
43
+ else
44
+ pp = line.properties || line.patternProperties
45
+ end
46
+
47
+ pp.each_with_index do |(prop_k, prop_v), idx|
48
+ i = indent
49
+
50
+ if idx + 1 == pp.count
51
+ c = "\u2514"
52
+ s = " "
53
+ else
54
+ c = "\u251C"
55
+ s = "\u2502 "
56
+ end
57
+
58
+ print i + c
59
+
60
+ if (prop_v.required == true) || (line.required && line.required.is_a?(Array) && line.required.include?(prop_k))
61
+ print '!'
62
+ end
63
+
64
+ print prop_k
65
+
66
+ if prop_v.type
67
+ print ':' + prop_v.type
68
+ end
69
+
70
+ if prop_v.units
71
+ print ':' + prop_v.units
72
+ end
73
+
74
+ print "\n"
75
+
76
+ print_line prop_v, indent + s
77
+ end unless pp.nil?
78
+ end
79
+
80
+ def expand data
81
+ if data.definitions
82
+ data.definitions.each do |k, v|
83
+ if v['$ref']
84
+ v.merge! expand_ref v['$ref']
85
+ v.delete '$ref'
86
+ end
87
+ v = expand v
88
+ data.definitions[k] = v
89
+ end
90
+ end
91
+ if data.properties
92
+ data.properties.each do |k, v|
93
+ if v['$ref']
94
+ v.merge! expand_ref v['$ref']
95
+ v.delete '$ref'
96
+ end
97
+ v = expand v
98
+ data.properties[k] = v
99
+ end
100
+ end
101
+ if data.patternProperties
102
+ data.patternProperties.each do |k, v|
103
+ if v['$ref']
104
+ v.merge! expand_ref v['$ref']
105
+ v.delete '$ref'
106
+ end
107
+ v = expand v
108
+ data.patternProperties[k] = v
109
+ end
110
+ end
111
+
112
+ data
113
+ end
114
+
115
+ def expand_ref ref
116
+ if ref[0] == '#' # refers to current schema
117
+ path = ref.gsub(/[\/#]/, '.')
118
+ data = JsonPath.new(path).first @data
119
+ else
120
+ uri = (self.path + Pathname.new(ref)).to_s
121
+ tok = uri.split '#'
122
+ t_schema = Schema.load_from_file tok[0]
123
+
124
+ if tok[1]
125
+ path = tok[1].gsub(/\//, '.')
126
+ data = JsonPath.new(path).first t_schema.data
127
+ else
128
+ data = t_schema.data
129
+ end
130
+ end
131
+
132
+ data || {}
133
+ end
134
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: json-schema-reader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Tim Mathews
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-05 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Currently provides one function, printing a tree view of a schema
14
+ email: tim@signalk.org
15
+ executables:
16
+ - jsontree
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/jsontree
21
+ - lib/json-schema-reader.rb
22
+ homepage: https://github.com/timmathews/json-schema-reader
23
+ licenses:
24
+ - GPLv3
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.2.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Pretty print JSON Schemas
46
+ test_files: []