UNPKG

@seamapi/blueprint

Version:

Build tools for the Seam API using this blueprint.

38 lines 1.6 kB
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