Tomograph

Convert API Blueprint to JSON Schema and search.
Installation
Add this line to your application's Gemfile:
gem 'tomograph'
And then execute:
$ bundle
Or install it yourself as:
$ gem install tomograph
Usage
require 'tomograph'
tomogram = Tomograph::Tomogram.new(apib_path: '/path/to/doc.apib')
Command line tool
The command line tool allows you to convert files from API Blueprint or API Elements to JSON Schema.
tomograph doc.apib doc.json
See
tomograph -h
for details on usage.
Convert
tomogram.to_json
Example input:
FORMAT: 1A
HOST: http://test.local
# project
# Group project
Project
## Authentication [/sessions]
### Sign In [POST]
+ Request (application/json)
+ Attributes
+ login (string, required)
+ password (string, required)
+ captcha (string, optional)
+ Response 401 (application/json)
+ Response 429 (application/json)
+ Response 201 (application/json)
+ Attributes
+ confirmation (Confirmation, optional)
+ captcha (string, optional)
+ captcha_does_not_match (boolean, optional)
# Data Structures
## Confirmation (object)
+ id (string, required)
+ type (string, required)
+ operation (string, required)
Example output:
[
{
"path": "/sessions",
"method": "POST",
"content-type": "application/json",
"request": {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"login": {
"type": "string"
},
"password": {
"type": "string"
},
"captcha": {
"type": "string"
}
},
"required": [
"login",
"password"
]
},
"responses": [
{
"status": "401",
"content-type": "application/json",
"body": {}
},
{
"status": "429",
"content-type": "application/json",
"body": {}
},
{
"status": "201",
"content-type": "application/json",
"body": {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"confirmation": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"operation": {
"type": "string"
}
},
"required": [
"id",
"type",
"operation"
]
},
"captcha": {
"type": "string"
},
"captcha_does_not_match": {
"type": "boolean"
}
}
}
}
]
}
]
Search
find_request
request = tomogram.find_request(method: 'GET', path: '/status/1?qwe=rty')
find_request
request = tomogram.find_request_with_content_type(method: 'GET', path: '/status/1?qwe=rty', content_type: 'application/json')
find_responses
responses = request.find_responses(status: '200')
Other methods
prefix_match?
This can be useful if you use a prefix.
tomogram.prefix_match?('http://local/api/v2/users')
Params
Example:
Tomograph::Tomogram.new(prefix: '/api/v2', apib_path: '/path/to/doc.apib')
or
Tomograph::Tomogram.new(prefix: '/api/v2', drafter_yaml_path: '/path/to/doc.yaml')
or
Tomograph::Tomogram.new(prefix: '/api/v2', tomogram_json_path: '/path/to/doc.json')
apib_path
Path to API Blueprint documentation. There must be an installed drafter to parse it.
drafter_yaml_path
Path to API Blueprint documentation pre-parsed with drafter and saved to a YAML file.
tomogram_json_path
Path to API Blueprint documentation converted with tomograph to a JSON file.
prefix
Default empty String. Prefix of API requests. Example: '/api'.
to_resources
Hash resource with requests. The result for the example above:
{
'/sessions' => ['POST /sessions']
}
License
The gem is available as open source under the terms of the MIT License.