cdwv / oas3-api-snippet-enricher

Enrich your OpenAPI 3.0 JSON with code samples
MIT License
90 stars 13 forks source link

Add Ruby support #20

Open bparanj opened 1 year ago

bparanj commented 1 year ago

Adding ruby to the targets array generates Ruby code snippets. Tested it on Mac and Ubuntu. Code:

'use strict';

const fs = require('fs');
const OpenAPISnippet = require('openapi-snippet');
const yaml = require('js-yaml');
const args = require('yargs').argv;

let targets = ['node_request','shell_curl', 'shell_httpie', 'python_python3', 'php_curl', 'php_http1', 'php_http2', 'ruby'];

if (args.targets) {
    targets = args.targets.split(',');
}

function enrichSchema(schema){
    for(var path in schema.paths){
        for(var method in schema.paths[path]){
            var generatedCode = OpenAPISnippet.getEndpointSnippets(schema, path, method, targets);
            schema.paths[path][method]["x-codeSamples"] = [];
            for(var snippetIdx in generatedCode.snippets){
                var snippet = generatedCode.snippets[snippetIdx];
                schema.paths[path][method]["x-codeSamples"][snippetIdx] = { "lang": snippet.title, "source": snippet.content };
            }
        }
    }
    return schema;
}

if(!args.input){
    throw new Error("Please pass the OpenAPI JSON schema as argument.");
}

// Try to interpret as YAML first, based on file extension
if(args.input.indexOf('yml') !== -1 || args.input.indexOf('yaml') !== -1){
    try {
        let schema = yaml.safeLoad(fs.readFileSync(args.input, 'utf8'));
        schema = enrichSchema(schema);
        console.log(JSON.stringify(schema));
    } catch (e) {
        console.log(e);
    }
} else {
    fs.readFile(args.input, (err, data) => {
        if (err) throw err;
        let schema = JSON.parse(data);
        schema = enrichSchema(schema);
        console.log(JSON.stringify(schema));
    });
}
andrzejwp commented 11 months ago

@bparanj Thanks for this issue, but is it something you could formulate as a pull request?