Basketry generator for generating Rails routes and controllers. This generator can be coupled with any Basketry pipeline. It is recommended to use this generator alongside the @basketry/sorbet
generator.
The following example converts a "Swagger" doc into Sorbet types:
- Save
https://petstore.swagger.io/v2/swagger.json
aspetstore.json
in the root of your project. - Install packages:
npm install -g basketry @basketry/swagger-2 @basketry/sorbet @basketry/rails
- Generate code:
basketry --source petstore.json --parser @basketry/swagger-2 --generators @basketry/sorbet @basketry/rails --output src
When the last step is run, basketry will parse the source file (petstore.json
) using the specified parser (@basketry/swagger-2
) and then run each specified generator writing the output folder (src
).
The generator writes a routes file within config/routes/
and routers within app/controllers/
.
Example config without options:
{
"source": "petstore.json",
"parser": "@basketry/swagger-2",
"generators": ["@basketry/sorbet", "@basketry/rails"],
"output": ""
}
Resulting output (including files from @basketry/sorbet
):
my_project/
├─ app/
│ ├─ controllers/
│ │ ├─ petstore/
│ │ │ ├─ v1/
│ │ │ │ ├─ controller_helpers.rb
│ │ │ │ ├─ pets_controller.rb
│ │ │ │ ├─ stores_controller.rb
│ │ │ │ ├─ users_controller.rb
├─ config/
│ ├─ routes/
│ │ ├─ petstore_v1.rb
├─ .gitattributes
├─ basketry.config.json
├─ petstore.json
All Rails generator options are namespaced within a sorbet
property. This generator's options include all options accepted by @basketry/sorbet
. For this reason, it is recommended that all sorbet
options be defined as common options to ensure that code generated by all sorbet-related generators use the same module and folder structure conventions.
Example config:
{
"source": "petstore.json",
"parser": "@basketry/swagger-2",
"generators": ["@basketry/sorbet", "@basketry/sorbet-validators"],
"output": "",
"options": {
"sorbet": {
"baseController": "Petstore::MyBaseController"
}
}
}
This setting lets you specify the base controller inherited by the generated controllers. If not specified, the default is ActionController::Base
.
Example usage:
{
"options": {
"sorbet": {
"baseController": "Petstore::MyBaseController"
}
}
}
An example of generated Rails code can be found as a test snapshot at /src/snapshot/
.
- Install packages:
npm ci
- Build the code:
npm run build
- Run it!
npm start
Note that the lint
script is run prior to build
. Auto-fixable linting or formatting errors may be fixed by running npm run fix
.
- Add tests by creating files with the
.test.ts
suffix - Run the tests:
npm t
- Test coverage can be viewed at
/coverage/lcov-report/index.html
- Ensure latest code is published on the
main
branch. - Create the new version number with
npm version {major|minor|patch}
- Push the branch and the version tag:
git push origin main --follow-tags
The publish workflow will build and pack the new version then push the package to NPM. Note that publishing requires write access to the main
branch.
Generated with generator-ts-console