diff --git a/README.md b/README.md index 5255e97..fc5f251 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,7 @@ Some conventions are adopted and enforced, in no particular order: To release this very gem: -1. Bump its version number in -[`lib/alpine_lab/code_style/version.rb`](lib/alpine_lab/code_style/version.rb) -according to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) +1. Bump its version number in [`version.rb`] respecting [Semantic Versioning 2] 2. Use Bundler Rake task to build, tag and push the gem: @@ -70,13 +68,21 @@ according to [Semantic Versioning 2.0.0](https://semver.org/spec/v2.0.0.html) rake release ``` - _(with Docker, you need to have configured both - [Git authentication](https://github.com/alpinelab/docker-ruby-dev/blob/latest/RECIPES.md#git-authentication) - and [Rubygems authentication](https://github.com/alpinelab/docker-ruby-dev/blob/latest/RECIPES.md#rubygems-authentication) - then you can run the same command with `docker-compose run app rake release`)_ + _(using Docker, both [Git authentication] and [Rubygems authentication] must + be configured to run `docker-compose run app rake release`)_ ## License -This project is developed by [Alpine Lab](https://www.alpine-lab.com) and released under the terms of the [MIT license](LICENSE.md). +This project is developed by [Alpine Lab] and released under the terms of the +[MIT license]. - + + + + +[Alpine Lab]: https://www.alpine-lab.com +[git authentication]: https://github.com/alpinelab/docker-ruby-dev/blob/latest/RECIPES.md#git-authentication +[MIT license]: LICENSE.md +[RubyGems authentication]: https://github.com/alpinelab/docker-ruby-dev/blob/latest/RECIPES.md#rubygems-authentication +[Semantic Versioning 2]: https://semver.org/spec/v2.0.0.html +[`version.rb`]: lib/alpine_lab/code_style/version.rb diff --git a/docs/http-api.md b/docs/http-api.md index a2e2272..96db0a2 100644 --- a/docs/http-api.md +++ b/docs/http-api.md @@ -2,22 +2,20 @@ ## API description -We use [OpenAPI Specification 2.0](https://swagger.io/specification/v2/) -to describe our API. +We use [OpenAPI Specification 2.0] to describe our API. This OAS 2.0 description is then used by: -* [Dredd](https://github.com/apiaryio/dredd) to check our implementation -* [Committee](https://github.com/interagent/committee) to validate input data -* [SwaggerUI](https://swagger.io/tools/swagger-ui) to generate documentation +* [Dredd] to check our implementation +* [Committee] to validate input data +* [SwaggerUI] to generate documentation ## JSON generation -We use [jBuilder](https://github.com/rails/jbuilder) to write our JSON views. +We use [jBuilder] to write our JSON views. -We may use [Oj](https://github.com/ohler55/oj) to parse and marshall -JSON on performance-demanding projects (`jBuilder` uses -[MultiJSON](https://github.com/intridea/multi_json) that uses `Oj` as soon as -it is required, so we simply have to add it to the project `Gemfile`). +We may use [Oj] to parse and marshall JSON on performance-demanding projects +([jBuilder] uses [MultiJSON] that uses [Oj] as soon as it is required, +so we simply have to add it to the project `Gemfile`). ## Controllers segregation @@ -28,9 +26,18 @@ Instead, we favour an approach where API controllers are namespaced in a module named `API` (_e.g._ `ResourcesController` processes HTML requests while `API::ResourcesController` processes JSON requests). -It avoids unreadable controller actions with many `respond_to` and `format`, -but is a bit less [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) -because we basically need 2 controllers per resource. -This should incentivise us to keep business logic separated in external modules -like service classes, thus enforcing the -[SRP](https://en.wikipedia.org/wiki/Single_responsibility_principle). +It avoids unreadable controller actions with many calls to `respond_to` and +`format`, but is a bit less [Don't Repeat Yourself] because we basically need +two controllers per resource. On the other hand, it incentivises us to keep +business logic separated in external modules like service classes, +thus enforcing the [Single Responsibility Principle]. + +[Committee]: https://github.com/interagent/committee +[Don't Repeat Yourself]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself +[Dredd]: https://github.com/apiaryio/dredd +[jBuilder]: https://github.com/rails/jbuilder +[MultiJSON][https://github.com/intridea/multi_json] +[Oj]: https://github.com/ohler55/oj +[OpenAPI Specification 2.0]: https://swagger.io/specification/v2/ +[Single Responsibility Principle]: https://en.wikipedia.org/wiki/Single_responsibility_principle +[SwaggeUI]: https://swagger.io/tools/swagger-ui