prmd 0.11.9 → 0.14.0
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 +5 -5
- data/.travis.yml +6 -4
- data/README.md +2 -1
- data/docs/schemata.md +7 -1
- data/lib/prmd.rb +1 -0
- data/lib/prmd/cli/base.rb +4 -4
- data/lib/prmd/cli/combine.rb +5 -1
- data/lib/prmd/cli/generate.rb +6 -1
- data/lib/prmd/commands/combine.rb +4 -4
- data/lib/prmd/core/combiner.rb +2 -1
- data/lib/prmd/core/renderer.rb +2 -1
- data/lib/prmd/rake_tasks/doc.rb +7 -0
- data/lib/prmd/schema.rb +13 -6
- data/lib/prmd/templates/schema.erb +10 -1
- data/lib/prmd/templates/schemata.md.erb +9 -1
- data/lib/prmd/templates/schemata/helper.erb +8 -4
- data/lib/prmd/templates/schemata/link.md.erb +6 -0
- data/lib/prmd/templates/table_of_contents.erb +11 -0
- data/lib/prmd/utils.rb +19 -0
- data/lib/prmd/version.rb +1 -1
- data/prmd.gemspec +2 -2
- data/schemas/interagent-hyper-schema.json +1 -5
- data/test/cli/combine_test.rb +1 -1
- data/test/cli/doc_test.rb +1 -1
- data/test/cli/generate_test.rb +1 -1
- data/test/cli/render_test.rb +1 -1
- data/test/cli/verify_test.rb +1 -1
- data/test/commands/combine_test.rb +1 -1
- data/test/commands/init_test.rb +1 -1
- data/test/commands/render_test.rb +39 -15
- data/test/commands/verify_test.rb +1 -1
- data/test/core/reference_localizer_test.rb +1 -1
- data/test/link_test.rb +3 -2
- data/test/multi_loader/common.rb +1 -1
- data/test/multi_loader/json_test.rb +1 -1
- data/test/multi_loader/toml_test.rb +1 -1
- data/test/multi_loader/yajl_test.rb +1 -1
- data/test/multi_loader/yaml_test.rb +1 -1
- data/test/rake_tasks/combine_test.rb +1 -1
- data/test/rake_tasks/doc_test.rb +1 -1
- data/test/rake_tasks/verify_test.rb +1 -1
- data/test/schema_test.rb +1 -1
- data/test/utils_test.rb +16 -0
- metadata +13 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7d549096116bdd614f84c9956e2de37d34d09721c8d67be4d189beab98787934
|
4
|
+
data.tar.gz: ecbd1909e6258876c49165bfdaaab02a6fcd99397bdd7470ec6b033c99381113
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92c5e9081ae01609eac6223fe89e1a487bf9924001d60ef14baf3557c7ea053ecefe010ab4ae2ba7f771c82266abc6c891cb610662c1d5d32b426331bb2dce0b
|
7
|
+
data.tar.gz: 9874013f4b85083bf9405dad926be63584a5856fa6810463f727bec82a81d363d350117a122db2fd90e865306f3dc3ec9f29e8a8de57d74d7c9512414dcb8d55
|
data/.travis.yml
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
3
|
+
- 2.3.8
|
4
|
+
- 2.4.10
|
5
|
+
- 2.5.8
|
6
|
+
- 2.6.6
|
7
|
+
- 2.7.2
|
6
8
|
- ruby-head
|
7
9
|
before_install:
|
8
|
-
- gem install bundler -v '~>
|
10
|
+
- gem install bundler -v '~> 2.0'
|
9
11
|
script: "bundle exec rake"
|
10
12
|
notifications:
|
11
13
|
email: false
|
data/README.md
CHANGED
@@ -129,7 +129,8 @@ Available options (and their defaults)
|
|
129
129
|
{
|
130
130
|
"doc": {
|
131
131
|
"url_style": "default", // can also be "json"
|
132
|
-
"disable_title_and_description": false // remove the title and the description, useful when using your own custom header
|
132
|
+
"disable_title_and_description": false, // remove the title and the description, useful when using your own custom header
|
133
|
+
"toc": false // insert the table of content for json scheme documentation to the top of the file. (default disable)
|
133
134
|
}
|
134
135
|
}
|
135
136
|
```
|
data/docs/schemata.md
CHANGED
@@ -42,7 +42,7 @@ Each attribute MUST include the following properties:
|
|
42
42
|
Each attribute MAY include the following properties:
|
43
43
|
|
44
44
|
* `pattern` - a javascript regex encoded in a string that the valid values MUST match
|
45
|
-
* `format` - format of the value. MUST be one of spec defined `["date-time", "email", "hostname", "ipv4", "ipv6", "uri"]` or defined by us `["uuid"]`
|
45
|
+
* `format` - format of the value. MUST be one of spec defined `["date", "date-time", "email", "hostname", "ipv4", "ipv6", "uri"]` or defined by us `["uuid"]`
|
46
46
|
|
47
47
|
Examples:
|
48
48
|
|
@@ -55,6 +55,11 @@ Examples:
|
|
55
55
|
"format": "uuid",
|
56
56
|
"type": ["string"]
|
57
57
|
},
|
58
|
+
"identity": {
|
59
|
+
"anyOf": [
|
60
|
+
{ "$ref": "/schemata/example#/definitions/id" }
|
61
|
+
]
|
62
|
+
},
|
58
63
|
"url": {
|
59
64
|
"description": "URL of resource",
|
60
65
|
"example": "http://example.com",
|
@@ -138,6 +143,7 @@ Links that expect a custom http header MUST include the following attributes:
|
|
138
143
|
},
|
139
144
|
"title": "Update"
|
140
145
|
}
|
146
|
+
]
|
141
147
|
}
|
142
148
|
```
|
143
149
|
|
data/lib/prmd.rb
CHANGED
@@ -3,6 +3,7 @@ require_relative 'prmd/load_schema_file'
|
|
3
3
|
require_relative 'prmd/commands'
|
4
4
|
require_relative 'prmd/schema'
|
5
5
|
require_relative 'prmd/link'
|
6
|
+
require_relative 'prmd/utils'
|
6
7
|
require_relative 'prmd/template'
|
7
8
|
require_relative 'prmd/url_generator'
|
8
9
|
require_relative 'prmd/hash_helpers'
|
data/lib/prmd/cli/base.rb
CHANGED
@@ -33,8 +33,8 @@ module Prmd
|
|
33
33
|
# @param [Array<String>] argv
|
34
34
|
# @return [Array<String>] remaining arguments
|
35
35
|
# @private
|
36
|
-
def execute_parser(
|
37
|
-
parser.parse(argv)
|
36
|
+
def execute_parser(argv)
|
37
|
+
@parser.parse(argv)
|
38
38
|
end
|
39
39
|
|
40
40
|
# Set the given key and value in the given options Hash.
|
@@ -66,10 +66,10 @@ module Prmd
|
|
66
66
|
# @return [Hash<Symbol, Object>] parsed options
|
67
67
|
def parse_options(argv, options = {})
|
68
68
|
opts = {}
|
69
|
-
parser = make_parser(options) do |key, value|
|
69
|
+
@parser = make_parser(options) do |key, value|
|
70
70
|
set_option(opts, key, value)
|
71
71
|
end
|
72
|
-
argv = execute_parser(
|
72
|
+
argv = execute_parser(argv)
|
73
73
|
opts[:argv] = argv
|
74
74
|
opts
|
75
75
|
end
|
data/lib/prmd/cli/combine.rb
CHANGED
@@ -22,6 +22,9 @@ module Prmd
|
|
22
22
|
opts.on('-o', '--output-file FILENAME', String, 'File to write result to') do |n|
|
23
23
|
yield :output_file, n
|
24
24
|
end
|
25
|
+
opts.on('-t', '--type-as-string', 'Allow type as string') do |t|
|
26
|
+
options[:type_as_string] = t
|
27
|
+
end
|
25
28
|
end
|
26
29
|
end
|
27
30
|
|
@@ -30,7 +33,8 @@ module Prmd
|
|
30
33
|
# @example Usage
|
31
34
|
# Prmd::CLI::Combine.execute(argv: ['schema/schemata/api'],
|
32
35
|
# meta: 'schema/meta.json',
|
33
|
-
# output_file: 'schema/api.json'
|
36
|
+
# output_file: 'schema/api.json',
|
37
|
+
# type-as-string)
|
34
38
|
#
|
35
39
|
# @param (see Prmd::CLI::Base#execute)
|
36
40
|
# @return (see Prmd::CLI::Base#execute)
|
data/lib/prmd/cli/generate.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
require_relative '../commands/init'
|
3
|
+
require_relative '../utils'
|
3
4
|
|
4
5
|
module Prmd
|
5
6
|
module CLI
|
@@ -40,7 +41,11 @@ module Prmd
|
|
40
41
|
# @return (see Prmd::CLI::Base#execute)
|
41
42
|
def self.execute(options = {})
|
42
43
|
name = options.fetch(:argv).first
|
43
|
-
|
44
|
+
if Prmd::Utils.blank?(name)
|
45
|
+
abort @parser
|
46
|
+
else
|
47
|
+
write_result Prmd.init(name, options), options
|
48
|
+
end
|
44
49
|
end
|
45
50
|
end
|
46
51
|
end
|
@@ -32,8 +32,7 @@ module Prmd
|
|
32
32
|
end
|
33
33
|
files.flatten!
|
34
34
|
files.delete(options[:meta])
|
35
|
-
|
36
|
-
files.sort_by {|file| file.split('.', 2).first}
|
35
|
+
files
|
37
36
|
end
|
38
37
|
|
39
38
|
# @api private
|
@@ -64,7 +63,8 @@ module Prmd
|
|
64
63
|
# @return (see .load_files)
|
65
64
|
def self.load_schemas(paths, options = {})
|
66
65
|
files = crawl_map(paths, options)
|
67
|
-
|
66
|
+
# sort for stable loading across platforms
|
67
|
+
schemata = load_files(files.sort, options)
|
68
68
|
handle_faulty_load(schemata, files) unless options[:faulty_load]
|
69
69
|
schemata
|
70
70
|
end
|
@@ -119,7 +119,7 @@ module Prmd
|
|
119
119
|
end
|
120
120
|
meta ||= {}
|
121
121
|
end
|
122
|
-
combiner = Prmd::Combiner.new(meta: meta, base: base, schema: schema)
|
122
|
+
combiner = Prmd::Combiner.new(meta: meta, base: base, schema: schema, options: options)
|
123
123
|
combiner.combine(*schemata)
|
124
124
|
end
|
125
125
|
|
data/lib/prmd/core/combiner.rb
CHANGED
@@ -13,6 +13,7 @@ module Prmd
|
|
13
13
|
@schema = properties.fetch(:schema)
|
14
14
|
@base = properties.fetch(:base, {})
|
15
15
|
@meta = properties.fetch(:meta, {})
|
16
|
+
@options = properties.fetch(:options, {})
|
16
17
|
end
|
17
18
|
|
18
19
|
# @param [Object] datum
|
@@ -53,7 +54,7 @@ module Prmd
|
|
53
54
|
reference_localizer(data['definitions'][id_ary])
|
54
55
|
end
|
55
56
|
|
56
|
-
Prmd::Schema.new(data)
|
57
|
+
Prmd::Schema.new(data, @options)
|
57
58
|
end
|
58
59
|
|
59
60
|
private :reference_localizer
|
data/lib/prmd/core/renderer.rb
CHANGED
data/lib/prmd/rake_tasks/doc.rb
CHANGED
@@ -5,6 +5,7 @@ require 'prmd/url_generator'
|
|
5
5
|
require 'prmd/template'
|
6
6
|
require 'prmd/schema'
|
7
7
|
require 'prmd/link'
|
8
|
+
require_relative '../hash_helpers'
|
8
9
|
|
9
10
|
# :nodoc:
|
10
11
|
module Prmd
|
@@ -21,6 +22,8 @@ module Prmd
|
|
21
22
|
# @return [Array<String>, Hash<String, String>] list of files
|
22
23
|
attr_accessor :files
|
23
24
|
|
25
|
+
attr_accessor :toc
|
26
|
+
|
24
27
|
# Creates a new task with name +name+.
|
25
28
|
#
|
26
29
|
# @overload initialize(name)
|
@@ -32,6 +35,10 @@ module Prmd
|
|
32
35
|
options = legacy_parameters(*args)
|
33
36
|
@files = options.fetch(:files) { [] }
|
34
37
|
super options, &block
|
38
|
+
if @options[:settings].is_a? String
|
39
|
+
settings = Prmd.load_schema_file(@options[:settings])
|
40
|
+
@options.merge! HashHelpers.deep_symbolize_keys(settings)
|
41
|
+
end
|
35
42
|
@options[:template] ||= Prmd::Template.template_dirname
|
36
43
|
end
|
37
44
|
|
data/lib/prmd/schema.rb
CHANGED
@@ -10,6 +10,7 @@ module Prmd
|
|
10
10
|
"number" => 42.0,
|
11
11
|
"string" => "example",
|
12
12
|
|
13
|
+
"date" => "2015-01-01",
|
13
14
|
"date-time" => "2015-01-01T12:00:00Z",
|
14
15
|
"email" => "username@example.com",
|
15
16
|
"hostname" => "example.com",
|
@@ -24,24 +25,28 @@ module Prmd
|
|
24
25
|
attr_reader :data
|
25
26
|
|
26
27
|
# @param [Hash<String, Object>] new_data
|
27
|
-
def initialize(new_data = {})
|
28
|
-
@data = convert_type_to_array(new_data)
|
28
|
+
def initialize(new_data = {}, options = {})
|
29
|
+
@data = convert_type_to_array(new_data, options)
|
29
30
|
@schemata_examples = {}
|
30
31
|
end
|
31
32
|
|
32
33
|
#
|
33
34
|
# @param [Object] datum
|
34
35
|
# @return [Object] same type as the input object
|
35
|
-
def convert_type_to_array(datum)
|
36
|
+
def convert_type_to_array(datum, options)
|
36
37
|
case datum
|
37
38
|
when Array
|
38
|
-
datum.map { |element| convert_type_to_array(element) }
|
39
|
+
datum.map { |element| convert_type_to_array(element, options) }
|
39
40
|
when Hash
|
40
|
-
if datum.key?('type') && datum['type'].is_a?(String)
|
41
|
+
if datum.key?('type') && datum['type'].is_a?(String) && !options[:type_as_string]
|
41
42
|
datum['type'] = [*datum['type']]
|
42
43
|
end
|
43
44
|
datum.each_with_object({}) do |(k, v), hash|
|
44
|
-
|
45
|
+
if k != 'example'
|
46
|
+
hash[k] = convert_type_to_array(v, options)
|
47
|
+
else
|
48
|
+
hash[k] = v
|
49
|
+
end
|
45
50
|
end
|
46
51
|
else
|
47
52
|
datum
|
@@ -113,6 +118,8 @@ module Prmd
|
|
113
118
|
end
|
114
119
|
ref = id_ref || value['anyOf'].first
|
115
120
|
schema_example(ref)
|
121
|
+
elsif value.key?('allOf')
|
122
|
+
value['allOf'].map { |ref| schema_example(ref) }.reduce({}, &:merge)
|
116
123
|
elsif value.key?('properties') # nested properties
|
117
124
|
schema_example(value)
|
118
125
|
elsif value.key?('items') # array of objects
|
@@ -1,7 +1,16 @@
|
|
1
|
+
<%- if options[:doc][:toc] -%>
|
2
|
+
<%=
|
3
|
+
Prmd::Template::load('table_of_contents.erb', options[:template]).result({
|
4
|
+
options: options,
|
5
|
+
schema: schema
|
6
|
+
})
|
7
|
+
%>
|
8
|
+
<%- end -%>
|
1
9
|
<%=
|
2
10
|
schemata_template = Prmd::Template::load('schemata.md.erb', options[:template])
|
3
11
|
|
4
|
-
schema['properties'].map do |
|
12
|
+
schema['properties'].keys.sort.map do |key|
|
13
|
+
resource, property = key, schema['properties'][key]
|
5
14
|
begin
|
6
15
|
_, schemata = schema.dereference(property)
|
7
16
|
schemata_template.result({
|
@@ -9,7 +9,8 @@
|
|
9
9
|
title = schemata['title'].split(' - ', 2).last
|
10
10
|
-%>
|
11
11
|
<%- unless options[:doc][:disable_title_and_description] %>
|
12
|
-
|
12
|
+
<a name="#resource-<%= resource %>"></a>
|
13
|
+
## <%= title %>
|
13
14
|
|
14
15
|
<%- if schemata['stability'] && !schemata['stability'].empty? %>
|
15
16
|
Stability: `<%= schemata['stability'] %>`
|
@@ -19,8 +20,13 @@ Stability: `<%= schemata['stability'] %>`
|
|
19
20
|
<%- end -%>
|
20
21
|
|
21
22
|
<%- if schemata['properties'] && !schemata['properties'].empty? %>
|
23
|
+
|
22
24
|
### Attributes
|
23
25
|
|
26
|
+
<details>
|
27
|
+
<summary>Details</summary>
|
28
|
+
|
29
|
+
|
24
30
|
| Name | Type | Description | Example |
|
25
31
|
| ------- | ------- | ------- | ------- |
|
26
32
|
<%- refs = extract_schemata_refs(schema, schemata['properties']).map {|v| v && v.split("/")} %>
|
@@ -33,6 +39,8 @@ Stability: `<%= schemata['stability'] %>`
|
|
33
39
|
| **<%= name %>** | *<%= type %>* | <%= description %> | <%= example %> |
|
34
40
|
<%- end %>
|
35
41
|
|
42
|
+
</details>
|
43
|
+
|
36
44
|
<%- end %>
|
37
45
|
<%- (schemata['links'] || []).each do |link, datum| %>
|
38
46
|
<%=
|
@@ -81,7 +81,8 @@
|
|
81
81
|
|
82
82
|
def extract_schemata_refs(schema, properties)
|
83
83
|
ret = []
|
84
|
-
properties.each do |
|
84
|
+
properties.keys.sort.each do |key|
|
85
|
+
value = properties[key]
|
85
86
|
ref, value = schema.dereference(value)
|
86
87
|
if value['properties']
|
87
88
|
refs = extract_schemata_refs(schema, value['properties'])
|
@@ -136,7 +137,10 @@
|
|
136
137
|
end
|
137
138
|
|
138
139
|
if value['pattern']
|
139
|
-
|
140
|
+
# Prevent the pipe regex pattern characters from being interpreted as markdown table:
|
141
|
+
pattern = value['pattern'].gsub(/\|/, '|')
|
142
|
+
|
143
|
+
description += "<br/> **pattern:** <pre>#{pattern}</pre>"
|
140
144
|
end
|
141
145
|
|
142
146
|
if value['minLength'] || value['maxLength']
|
@@ -174,7 +178,7 @@
|
|
174
178
|
else
|
175
179
|
''
|
176
180
|
end
|
177
|
-
type += (value['format'] || (value['type'] - ['null']).
|
181
|
+
type += (value['format'] || (value['type'] - ['null']).join(' or '))
|
178
182
|
[key, type, description, example]
|
179
183
|
end
|
180
184
|
|
@@ -182,8 +186,8 @@
|
|
182
186
|
def build_link_path(schema, link)
|
183
187
|
link['href'].gsub(%r|(\{\([^\)]+\)\})|) do |ref|
|
184
188
|
ref = ref.gsub('%2F', '/').gsub('%23', '#').gsub(%r|[\{\(\)\}]|, '')
|
185
|
-
ref_resource = ref.split('#/definitions/').last.split('/').first.gsub('-','_')
|
186
189
|
identity_key, identity_value = schema.dereference(ref)
|
190
|
+
ref_resource = identity_key.split('#/definitions/').last.split('/').first.gsub('-','_')
|
187
191
|
if identity_value.has_key?('anyOf')
|
188
192
|
'{' + ref_resource + '_' + identity_value['anyOf'].map {|r| r['$ref'].split('/').last}.join('_or_') + '}'
|
189
193
|
else
|
@@ -3,8 +3,12 @@
|
|
3
3
|
response_example = link['response_example']
|
4
4
|
link_schema_properties_template = Prmd::Template.load_template('link_schema_properties.md.erb', options[:template])
|
5
5
|
-%>
|
6
|
+
<a name="link-<%= link['method'] %>-<%= resource %>-<%= link['href'] %>"></a>
|
6
7
|
### <%= title %> <%= link['title'] %>
|
7
8
|
|
9
|
+
<details>
|
10
|
+
<summary>Details</summary>
|
11
|
+
|
8
12
|
<%= link['description'] %>
|
9
13
|
|
10
14
|
```
|
@@ -78,3 +82,5 @@ HTTP/1.1 <%=
|
|
78
82
|
<%- end %>
|
79
83
|
```
|
80
84
|
<%- end %>
|
85
|
+
|
86
|
+
</details>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<%- Prmd::Template.render('schemata/helper.erb', options[:template]) -%>
|
2
|
+
## The table of contents
|
3
|
+
|
4
|
+
<% schema['properties'].keys.sort.map do |key| %>
|
5
|
+
<% resource, property = key, schema['properties'][key] %>
|
6
|
+
<% _, schemata = schema.dereference(property) %>
|
7
|
+
- <a href="#resource-<%= resource %>"><%= schemata['title'].split(' - ', 2).last %></a>
|
8
|
+
<% schemata.fetch('links', []).each do |l| %>
|
9
|
+
- <a href="#link-<%= l['method'] %>-<%= resource %>-<%= l['href'] %>"><%= l['method'] %> <%= build_link_path(schema, l) %></a>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
data/lib/prmd/utils.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
module Prmd
|
2
|
+
# For any tid bits, or core extension methods, without the "core" extension
|
3
|
+
module Utils
|
4
|
+
# For checking if the string contains only spaces
|
5
|
+
BLANK_REGEX = /\A\s+\z/
|
6
|
+
|
7
|
+
def self.blank?(obj)
|
8
|
+
if obj.nil?
|
9
|
+
true
|
10
|
+
elsif obj.is_a?(String)
|
11
|
+
obj.empty? || !!(obj =~ BLANK_REGEX)
|
12
|
+
elsif obj.respond_to?(:empty?)
|
13
|
+
obj.empty?
|
14
|
+
else
|
15
|
+
false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/prmd/version.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
module Prmd
|
3
3
|
# Well, duh, its a Version module, what did you expect?
|
4
4
|
module Version
|
5
|
-
MAJOR, MINOR, TEENY, PATCH = 0,
|
5
|
+
MAJOR, MINOR, TEENY, PATCH = 0, 14, 0, nil
|
6
6
|
# version string
|
7
7
|
# @return [String]
|
8
8
|
STRING = [MAJOR, MINOR, TEENY, PATCH].compact.join('.').freeze
|
data/prmd.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'erubis', '~> 2.7'
|
22
22
|
spec.add_dependency 'json_schema', '~> 0.3', '>= 0.3.1'
|
23
23
|
|
24
|
-
spec.add_development_dependency 'bundler', '~>
|
25
|
-
spec.add_development_dependency 'rake', '
|
24
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
25
|
+
spec.add_development_dependency 'rake', '>= 12.3.3'
|
26
26
|
spec.add_development_dependency 'minitest', '~> 5.4'
|
27
27
|
end
|
@@ -66,7 +66,7 @@
|
|
66
66
|
},
|
67
67
|
"properties": {
|
68
68
|
"patternProperties": {
|
69
|
-
"^[a-
|
69
|
+
"^[a-z0-9][a-zA-Z0-9_]*[a-zA-Z0-9]$": {
|
70
70
|
"$ref": "#/definitions/resourceProperty"
|
71
71
|
}
|
72
72
|
},
|
@@ -90,10 +90,6 @@
|
|
90
90
|
{
|
91
91
|
"required": ["example", "type"]
|
92
92
|
},
|
93
|
-
{
|
94
|
-
"required": ["type"],
|
95
|
-
"type": ["array"]
|
96
|
-
},
|
97
93
|
{
|
98
94
|
"required": ["type"],
|
99
95
|
"type": ["object"]
|
data/test/cli/combine_test.rb
CHANGED
data/test/cli/doc_test.rb
CHANGED
data/test/cli/generate_test.rb
CHANGED
data/test/cli/render_test.rb
CHANGED
data/test/cli/verify_test.rb
CHANGED
data/test/commands/init_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative '../helpers'
|
2
2
|
|
3
3
|
require 'json_pointer'
|
4
4
|
|
@@ -6,7 +6,7 @@ class InteragentRenderTest < Minitest::Test
|
|
6
6
|
def test_render_for_valid_schema
|
7
7
|
markdown = render
|
8
8
|
|
9
|
-
assert_match
|
9
|
+
assert_match(/An app in our PaaS ecosystem./, markdown)
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_render_for_schema_with_property_defined_with_anyOf
|
@@ -21,18 +21,27 @@ class InteragentRenderTest < Minitest::Test
|
|
21
21
|
}
|
22
22
|
})
|
23
23
|
markdown = render
|
24
|
-
assert_match
|
24
|
+
assert_match(/version.*v10\.9\.rc1/, markdown)
|
25
25
|
end
|
26
26
|
|
27
27
|
|
28
28
|
def test_render_for_schema_with_property_defined_with_oneOf
|
29
29
|
markdown = render
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
assert_match(/\*\*options\/\[OPTION1\]\.type\*\*/, markdown)
|
32
|
+
assert_match(/\*\*options\/\[OPTION2\]\.type\*\*/, markdown)
|
33
33
|
end
|
34
34
|
|
35
|
+
def test_render_for_toc
|
36
|
+
schema = Prmd::Schema.new(data)
|
37
|
+
template = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'prmd', 'templates'))
|
38
|
+
markdown = Prmd.render(schema, template: template, doc: { toc: true })
|
35
39
|
|
40
|
+
assert_match /^## The table of contents/, markdown
|
41
|
+
assert_match '<a href="#resource-app"', markdown
|
42
|
+
assert_match '- <a href="#link-POST-app-/apps">POST /apps', markdown
|
43
|
+
assert_match '<a name="link-POST-app-/apps"></a>', markdown
|
44
|
+
end
|
36
45
|
|
37
46
|
def test_render_for_example_as_an_array
|
38
47
|
# matches -d '[{...}]' taking into account line breaks and spacing
|
@@ -41,6 +50,12 @@ class InteragentRenderTest < Minitest::Test
|
|
41
50
|
assert_match expression, markdown
|
42
51
|
end
|
43
52
|
|
53
|
+
def test_render_for_regex_patterns_with_pipes
|
54
|
+
expression = /<pre>\(\^first\$|\^second\$\)<\/pre> \| \`"second"\` \|\n/
|
55
|
+
markdown = render
|
56
|
+
assert_match expression, markdown
|
57
|
+
end
|
58
|
+
|
44
59
|
private
|
45
60
|
|
46
61
|
def data
|
@@ -95,37 +110,43 @@ class InteragentRenderTest < Minitest::Test
|
|
95
110
|
'example' => 'example'
|
96
111
|
},
|
97
112
|
'option-type1' => {
|
98
|
-
'type' => 'string',
|
99
|
-
'example' => 'OPTION1',
|
100
|
-
'enum' => 'OPTION1'
|
113
|
+
'type' => 'string',
|
114
|
+
'example' => 'OPTION1',
|
115
|
+
'enum' => 'OPTION1'
|
101
116
|
},
|
102
117
|
'option-type2' => {
|
103
|
-
'type' => 'string',
|
118
|
+
'type' => 'string',
|
104
119
|
'example' => 'OPTION2',
|
105
120
|
'enum' => 'OPTION2'
|
106
121
|
},
|
122
|
+
'patterned-string' => {
|
123
|
+
'description' => 'A string with a regex pattern applied to it.',
|
124
|
+
'type' => 'string',
|
125
|
+
'example' => 'second',
|
126
|
+
'pattern' => '(^first$|^second$)'
|
127
|
+
},
|
107
128
|
'option1' => {
|
108
129
|
'properties' => {
|
109
130
|
'type' => {
|
110
|
-
'$ref' => '#/definitions/config-var/definitions/option-type1'
|
131
|
+
'$ref' => '#/definitions/config-var/definitions/option-type1'
|
111
132
|
}
|
112
133
|
}
|
113
134
|
},
|
114
135
|
'option2' => {
|
115
136
|
'properties' => {
|
116
137
|
'type' => {
|
117
|
-
'$ref' => '#/definitions/config-var/definitions/option-type2'
|
138
|
+
'$ref' => '#/definitions/config-var/definitions/option-type2'
|
118
139
|
}
|
119
140
|
}
|
120
141
|
},
|
121
|
-
'options' => {
|
142
|
+
'options' => {
|
122
143
|
'items' => {
|
123
144
|
'example'=> 'CHOICE1',
|
124
145
|
'oneOf' => [
|
125
|
-
{
|
146
|
+
{
|
126
147
|
'$ref' => '#/definitions/config-var/definitions/option1'
|
127
148
|
},
|
128
|
-
{
|
149
|
+
{
|
129
150
|
'$ref' => '#/definitions/config-var/definitions/option2'
|
130
151
|
}
|
131
152
|
]
|
@@ -166,7 +187,10 @@ class InteragentRenderTest < Minitest::Test
|
|
166
187
|
},
|
167
188
|
'options' => {
|
168
189
|
'$ref' => '#/definitions/config-var/definitions/options'
|
169
|
-
}
|
190
|
+
},
|
191
|
+
'patterned-string' => {
|
192
|
+
'$ref' => '#/definitions/config-var/definitions/patterned-string'
|
193
|
+
},
|
170
194
|
}
|
171
195
|
}
|
172
196
|
},
|
data/test/link_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
2
3
|
module Prmd
|
3
4
|
class LinkTest < MiniTest::Test
|
4
5
|
include PrmdLinkTestHelpers
|
@@ -22,7 +23,7 @@ module Prmd
|
|
22
23
|
{
|
23
24
|
title: "multiple_nested_required" ,
|
24
25
|
optional: {"user:name" => "string"},
|
25
|
-
required: {"user:email" => "string",
|
26
|
+
required: {"user:email" => "string",
|
26
27
|
"address:street" => "string",
|
27
28
|
"address:zip" => "string"}
|
28
29
|
}
|
data/test/multi_loader/common.rb
CHANGED
data/test/rake_tasks/doc_test.rb
CHANGED
data/test/schema_test.rb
CHANGED
data/test/utils_test.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'helpers'
|
2
|
+
|
3
|
+
class UtilsTest < Minitest::Test
|
4
|
+
def test_blank?
|
5
|
+
assert_equal true, Prmd::Utils.blank?(nil)
|
6
|
+
assert_equal true, Prmd::Utils.blank?([])
|
7
|
+
assert_equal true, Prmd::Utils.blank?({})
|
8
|
+
assert_equal true, Prmd::Utils.blank?("")
|
9
|
+
assert_equal true, Prmd::Utils.blank?(" ")
|
10
|
+
assert_equal true, Prmd::Utils.blank?(" ")
|
11
|
+
assert_equal false, Prmd::Utils.blank?([nil])
|
12
|
+
assert_equal false, Prmd::Utils.blank?({ a: nil })
|
13
|
+
assert_equal false, Prmd::Utils.blank?("A")
|
14
|
+
assert_equal false, Prmd::Utils.blank?(Object.new)
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prmd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- geemus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erubis
|
@@ -50,28 +50,28 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '
|
53
|
+
version: '2.0'
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
60
|
+
version: '2.0'
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
62
|
name: rake
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
|
-
- - "
|
65
|
+
- - ">="
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 12.3.3
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
|
-
- - "
|
72
|
+
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
74
|
+
version: 12.3.3
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: minitest
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -149,9 +149,11 @@ files:
|
|
149
149
|
- lib/prmd/templates/schemata/helper.erb
|
150
150
|
- lib/prmd/templates/schemata/link.md.erb
|
151
151
|
- lib/prmd/templates/schemata/link_curl_example.md.erb
|
152
|
+
- lib/prmd/templates/table_of_contents.erb
|
152
153
|
- lib/prmd/url_generator.rb
|
153
154
|
- lib/prmd/url_generators/generators/default.rb
|
154
155
|
- lib/prmd/url_generators/generators/json.rb
|
156
|
+
- lib/prmd/utils.rb
|
155
157
|
- lib/prmd/version.rb
|
156
158
|
- prmd.gemspec
|
157
159
|
- schemas/hyper-schema.json
|
@@ -189,6 +191,7 @@ files:
|
|
189
191
|
- test/schemata/input/rake_doc.json
|
190
192
|
- test/schemata/input/rake_verify.json
|
191
193
|
- test/schemata/input/user.json
|
194
|
+
- test/utils_test.rb
|
192
195
|
homepage: https://github.com/heroku/prmd
|
193
196
|
licenses:
|
194
197
|
- MIT
|
@@ -208,8 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
211
|
- !ruby/object:Gem::Version
|
209
212
|
version: '0'
|
210
213
|
requirements: []
|
211
|
-
|
212
|
-
rubygems_version: 2.5.1
|
214
|
+
rubygems_version: 3.1.4
|
213
215
|
signing_key:
|
214
216
|
specification_version: 4
|
215
217
|
summary: JSON Schema tooling
|
@@ -246,3 +248,4 @@ test_files:
|
|
246
248
|
- test/schemata/input/rake_doc.json
|
247
249
|
- test/schemata/input/rake_verify.json
|
248
250
|
- test/schemata/input/user.json
|
251
|
+
- test/utils_test.rb
|