@seamapi/blueprint
Version:
Build tools for the Seam API using this blueprint.
38 lines • 1.6 kB
JavaScript
import { snakeCase } from 'change-case';
export const createRubyRequest = ({ request }, _context) => {
const parts = request.path.split('/');
const params = Object.entries(request.parameters)
.map(([key, value]) => `${snakeCase(key)}: ${formatRubyValue(value)}`)
.join(', ');
return `seam${parts.map((p) => snakeCase(p)).join('.')}(${params})`;
};
const formatRubyValue = (value) => value == null ? 'nil' : JSON.stringify(value);
export const createRubyResponse = ({ response, title }, context) => {
const { endpoint } = context;
if (endpoint.response.responseType === 'void')
return 'nil';
const { responseKey } = endpoint.response;
const responseValue = response?.body?.[responseKey];
if (responseValue == null) {
throw new Error(`Missing ${responseKey} for '${title}'`);
}
return Array.isArray(responseValue)
? formatRubyArrayResponse(responseValue, title)
: formatRubyResponse(responseValue);
};
const formatRubyArrayResponse = (responseArray, title) => {
const formattedItems = responseArray
.map((item) => {
if (item == null) {
throw new Error(`Null value in response array for '${title}'`);
}
return formatRubyResponse(item);
})
.join(',\n');
return `[${formattedItems}]`;
};
const formatRubyResponse = (responseParams) => {
const values = Object.entries(responseParams).map(([paramKey, paramValue]) => `"${snakeCase(paramKey)}" => ${formatRubyValue(paramValue)}`);
return `{${values.join(',')}}`;
};
//# sourceMappingURL=ruby.js.map