Current section

Files

Jump to
retort CHANGELOG.md
Raw

CHANGELOG.md

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
- [Changelog](#changelog)
- [v2.6.0](#v260)
- [Enhancements](#enhancements)
- [Bug Fixes](#bug-fixes)
- [v2.5.0](#v250)
- [Enhancements](#enhancements-1)
- [Bug Fixes](#bug-fixes-1)
- [v2.4.0](#v240)
- [Enhancements](#enhancements-2)
- [Bug Fixes](#bug-fixes-2)
- [v2.3.0](#v230)
- [Enhancements](#enhancements-3)
- [Bug Fixes](#bug-fixes-3)
- [v2.2.0](#v220)
- [Enhancements](#enhancements-4)
- [Bug Fixes](#bug-fixes-4)
- [v2.1.0](#v210)
- [Enhancements](#enhancements-5)
- [Bug Fixes](#bug-fixes-5)
- [Deprecations](#deprecations)
- [v2.0.0](#v200)
- [Enhancements](#enhancements-6)
- [Bug Fixes](#bug-fixes-6)
- [Incompatible Changes](#incompatible-changes)
- [v1.3.2](#v132)
- [Bug Fixes](#bug-fixes-7)
- [v1.3.1](#v131)
- [Bug Fixes](#bug-fixes-8)
- [v1.3.0](#v130)
- [Enhancements](#enhancements-7)
- [Bug Fixes](#bug-fixes-9)
- [v1.2.0](#v120)
- [Enhancements](#enhancements-8)
- [Bug Fixes](#bug-fixes-10)
- [v1.1.0](#v110)
- [Enhancements](#enhancements-9)
- [Bug Fixes](#bug-fixes-11)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Changelog
## v2.6.0
### Enhancements
* [#21](https://github.com/C-S-D/retort/pull/21) - Alias `compile` as `compile --warnings-as-errors` to prevent another regression in `@impl` usage. - [@KronicDeth](https://github.com/KronicDeth)
### Bug Fixes
* [#21](https://github.com/C-S-D/retort/pull/21) - [@KronicDeth](https://github.com/KronicDeth)
* Fix incorrect `@impl modules` where `@impl Retort.Resources` was being used for `Calcinator.Resources` callbacks.
* Add missing `@impl` to test support modules
## v2.5.0
### Enhancements
* [#20](https://github.com/C-S-D/retort/pull/20) - [@KronicDeth](https://github.com/KronicDeth)
* Update dependencies
* `calcinator` `4.0.0`
* `credo` `0.8.6`
* `ex_doc` `0.16.3`
* `excoveralls` `0.7.2`
* `timex` `3.1.24`
* `amqp` `0.2.3`
* Use Elixir 1.5.1 for CircleCI build
* Use `@impl` for callbacsk
### Bug Fixes
* [#18](https://github.com/C-S-D/retort/pull/18) - [@KronicDeth](https://github.com/KronicDeth)
* Query for `TestTag`s used variable named for credentials, which was confusing.
* Test of many-to-many update should only use resource identifiersĀ as in JSONAPI, resource identifiers will have type and id with string keys and nothing else, so the update test should not include extra information, such as the name of the TestTag, as the many-to-many support uses `put_assoc`, not `cast_assoc`, so the IDs is all that matters and is supported. We don't want people copying the tests as example code and wondering why it doesn't work like `cast_assoc`.
* Previously, `TestPost.changeset_to_id` was handling `Ecto.Changeset.t` `data` or `changes` having string and atom keys and string or integer values, but [`Ecto.Changeset.t`'s type definition](https://hexdocs.pm/ecto/2.1.6/Ecto.Changeset.html#t:t/0) says that `changes` is `%{optional(atom) => term}` with the added restriction from [`Ecto.Changeset.cast/3`](https://hexdocs.pm/ecto/2.1.6/Ecto.Changeset.html#cast/3) that changes have undergone type casting, which means that field should be `:id` and the type should be the type of the `id` field in the schema. By casting the values for the `many_to_many` association, `changeset_to_id` becomes `get_field(changeset, :id)` and the type definitions in Ecto are honored.
* Use `:erlang.trace/3` to check for multi-backoff instead of `capture_log`
## v2.4.0
### Enhancements
* [#17](https://github.com/C-S-D/retort/pull/17) - `Retort.Client.Generic.create` and `Retort.Client.Generic.update` can convert `many_to_many` associations into collection of resource identifiers for relationship in JSONAPI resource. - [@jeffutter](https://github.com/jeffutter)
### Bug Fixes
* [#17](https://github.com/C-S-D/retort/pull/17) - Use `dockerize` to wait for Postgres before running `mix test` to prevent connection errors due to postgres container not being started completely - [@KronicDeth](https://github.com/KronicDeth)
## v2.3.0
### Enhancements
* [#16](https://github.com/C-S-D/retort/pull/16) - Regression test for VPP-2665 - [@KronicDeth](https://github.com/KronicDeth)
### Bug Fixes
* [#16](https://github.com/C-S-D/retort/pull/16) - [@KronicDeth](https://github.com/KronicDeth)
* Rescue exceptions in `Retort.Server.Generic.handle_info({:basic_deliver, _, _}, state)` caused by processing the message, such as in the `callback_module`'s `handle_method/1`. When the exception occurs
1. The exception will be logged as an error with its stacktrace.
2. The message will be rejected instead of ack'd, so that the exception won't keep repeating.
## v2.2.0
### Enhancements
* [13](https://github.com/C-S-D/retort/pull/13) - [@KronicDeth](https://github.com/KronicDeth)
* Allow a different `Retort.Client.Generic` pid for each transition that a `Retort.Client.StateMachine` can make. If transition is not in `pid_by_transition`, the older, `pid` key is used as a fallback. `pid_by_transition` is not required. If it is not given, `pid` is always used, which mimics the older behavior.
* `Retort.Client.StateMachine` has full test coverage.
### Bug Fixes
* [13](https://github.com/C-S-D/retort/pull/13) - Add `config :retort, :ecto_repos: []` to `config/dev.exs` to suppress warning in dev. - [@KronicDeth](https://github.com/KronicDeth)
## v2.1.0
### Enhancements
* [#12](https://github.com/C-S-D/retort/pull/12) - [@KronicDeth](https://github.com/KronicDeth)
* Extract `Retort.Resources.timeout/2` to `Retort.Resources.Timeout.get_or_default(module, function)`. `Retort.Resources.Timeout` also has functions for deleting and putting module-wide and function name specific timeouts, to make testing easier and less boiler plate needed in override examples.
* `Retort.Resources.Timeout.delete(module)` will delete `timeout`s set by `Retort.Resources.Timeout.put(module, timeout)` OR `Retort.Resources.Timeout.put(module, function_name, timeout)`.
* `Retort.Resources.Timeout.delete(module, timeout)` will delete `timeout` set by `Retort.Resources.Timeout.put(module, function_name, timeout)` OR remove the `timeout` for `function_name` and leave it for the other function names when `Retort.Resources.Timeout.put(module, timeout)` is called.
* `Retort.Resources.Timeout.put(module, timeout)` will set the `timeout` for all `Retort.Client.Generic` calls by `module` that called `use Retort.Resources`.
* `Retort.Resources.Timeout.put(module, function_name, timeout)` will set the `timeout` for all `Retort.Client.Generic` `function_name` calls by `module` that called `use Retort.Resources`.
* `Retort.Resources.Timeout.put(module, function_name, timeout, func)` will only temporarily `Retort.Resources.Timeout.put/3`, but for the duration passed function only. This can be used to test timeout handling.
* Update to `credo` `0.7.4`.
### Bug Fixes
* [#12](https://github.com/C-S-D/retort/pull/12) - Fix formatting of timeout override example code. - [@KronicDeth](https://github.com/KronicDeth)
### Deprecations
* [#12](https://github.com/C-S-D/retort/pull/12) - `Retort.Resources.timeout(module, function_name)` is deprecated; use `Retort.Resources.Timeout.get_or_default(module, function_name)` instead. - [@KronicDeth](https://github.com/KronicDeth)
## v2.0.0
### Enhancements
* [#9](https://github.com/C-S-D/retort/pull/9) - Document `Retort.Resources`. - [@KronicDeth](https://github.com/KronicDeth)
* [#10](https://github.com/C-S-D/retort/pull/10) - [@KronicDeth](https://github.com/KronicDeth)
* Update to `alembic` `3.3.0`
* Drop the need for `changeset_render` by using `JaSerializer.Formatter.Utils.format_key` directly to make it the same as `calcinator`.
* Update to `calcinator` `3.0.0`
* `Retort.Response.Error.to_calcinator_error(Retort.Response.t, Ecto.Changeset.t)` will convert `Retort.Response.t` `data` `Alembic.Document.t` `errors` to a `Calcinator` error. If the `Alembic.Error.t` format is unrecognized, it is assumed to be convertable to `Ecto.Changeset.t` errors using `Retort.Response.Error.Ecto.Changeset.add_alembic_errors(changeset, errors)`
* Error message instead of missing clause for unknown Poison version during tests.
* Update dependencies
* `amqp` `0.2.2`
* `faker` `0.8.0`
* `timex` `3.1.15`
* [#11](https://github.com/C-S-D/retort/pull/11) - [@KronicDeth](https://github.com/KronicDeth)
* Update CircleCI
* Erlang `19.3`
* Elixir `1.4.2`
### Bug Fixes
* [#9](https://github.com/C-S-D/retort/pull/9) - [@KronicDeth](https://github.com/KronicDeth)
* A missed rename left the application name used for `Application.get_env` as the original `:interpreter_server_rpc` instead of `:retort` in `Retort.Resources.timeout/2`.
* Fix (`Map` -> `map`) typo in `Retort.Client.Generic.start_link` options.
* `Retort.Resources.client_start_link` should not have been 0-arity, but 1-arity, so it can take in the `client_start_link_options` as an argument instead of depending on lookup by `module` to retrieve some hidden state.
* [#10](https://github.com/C-S-D/retort/pull/10) - [@KronicDeth](https://github.com/KronicDeth)
* `Retort.Meta.valid!/2` checked if the Ecto.Repo was sandboxed with `Application.get_env(:retort, Retort.Repo)`, which is a faithful translation of the original in `:interpreter_server_rpc`, but has the
problem that it only works in `retort` itself. To allow the repo to be check to be configured, `Retort.Meta.valid!/2` now takes an `:ecto_repo_module` option, which is check if its sandboxed if any of the `:ecto_schema_modules` are database-backed (have a non-blank `__schema__(:source)`).
* `Retort.Server.Generic.Resources.handle_method/2` converts `{:error, :sandbox_token_missing}` into RPC response errors instead of a `CaseClauseError` exception.
* Use `alias Retort.Request` in `Retort.RequestTest`.
* Increased allowed Cyclomatic Complexity for `credo` as it must be at least 10 (instead of default 9) for `Retort.Server.Generic.Resources.put_calcinator_error`.
### Incompatible Changes
* [#9](https://github.com/C-S-D/retort/pull/9) - `Retort.Resources.client_start_link` callback changes arity from `0` to `1` and now should take in `options` instead of calling `Retort.Resources.client_start_link_options/0`. - [@KronicDeth](https://github.com/KronicDeth)
* [#10](https://github.com/C-S-D/retort/pull/10) - [@KronicDeth](https://github.com/KronicDeth)
* `Retort.Client.Generic.start_link` calls where the `ecto_schema_module_by_type` `ecto_schema_module`s are database-backed will now require `:ecto_repo_module` to check if the `Ecto.Repo.t` is sandboxed.
* Require `alembic` `~> 3.3`
* `changeset_render` is no longer needed for `Retort.Server.Generic.Resources`, so `Retort.Server.Generic.Resources.t` has been removed and a `Calcinator.t` should be used as the state instead.
* Require to `calcinator` `~> 3.0`
* `Retort.Response.Error.Ecto.Changeset.add_alembic_errors(changeset, [Alembic.Error.t])` will convert the `Alembic.Error.t`s to validation errors added to the `changeset`. It's a way to reverse the conversion done by `Alembic.Document.from_ecto_changeset` in `alembic` `3.3.0`.
* `Retort.Response.Error.to_calcinator_error(Retort.Response.t, Ecto.Changeset.t)` will convert `Retort.Response.t` `data` `Alembic.Document.t` `errors` to a `Calcinator` error. If the `Alembic.Error.t` format is unrecognized, it is assumed to be convertable to `Ecto.Changeset.t` errors using `Retort.Response.Error.Ecto.Changeset.add_alembic_errors(changeset, errors)`
* `Retort.Server.Generic.Resoruces.handle_method/2` is simplified using `put_rendered_or_error/2`, so that the large, duplicate `case`s are eliminated and error handling remains consistent across actions. For error, `put_calcinator_error` is called.
* `use Retort.Resources` generates `delete(changeset, query_options)` to match the updated `Calcinator.Resources.delete/2`.
* `Retort.Resources.client_start_link_options` now takes `(module, query_options)`, so that if `:meta` exists in `query_options` and "beam" is set, then the pre-existing "beam" will be reused.
* All action callbacks in `Retort.Resources` catch `{:exit, {:timeout, _}}` from the `Retort.Client.Generic` calls, log them, and then return `{:error, :timeout}`, so that `Calcinator.Controller` can turn it into a 504 Gateway Timeout instead of crashing the calling process.
* All action callbacks in `Retort.Resources` can transform `{:error, %Retort.Response.Error{}}` to `Calcinator` errors using `Retort.Client.Generic.error_to_calcinator_error`.
* `meta` in query_options is put back into the mergable params passed to `Retort.Client.Generic` calls in `Retort.Resources`
* Coverage of all error returns from both `Calcinator.Resources.Ecto.Repo` and `Retort.Client.Generic` in tests.
## v1.3.2
### Bug Fixes
* [#7](https://github.com/C-S-D/retort/pull/7) - It was a bug that Calcinator allowed a list for filters instead of a map, so correct Retort to follow. - [@KronicDeth](https://github.com/KronicDeth)
## v1.3.1
### Bug Fixes
* [#6](https://github.com/C-S-D/retort/pull/6) - Restore poison 2.0 compatibility: `Retort.Request.from_string/1`'s return types only included the Poison 3.0 patterns, so `Retort.Server.Generic.RPC.decode_request/1` was only handling Poison 3.0 patterns. Have `Retort.Request.from_string/1` return both Poison 2.0 and 3.0 patterns and have `Retort.Server.Generic.RPC.decode_request/1` handle both sets of patterns. - [@KronicDeth](https://github.com/KronicDeth)
## v1.3.0
### Enhancements
* [#5](https://github.com/C-S-D/retort/pull/5) - [@KronicDeth](https://github.com/KronicDeth)
* Dependency updates
* `alembic` to `3.2.0`
* `calcinator` to `2.2.0`
* `amqp` to `0.2.0` (Native support for Erlang 19! No more need for the git dependency for Erlang 19 support.)
* `ex_doc` `0.15.1`
* `ex_machina` `2.0.0`
* `ja_serializer` `0.12.0`
* `junit_formatter` `1.3.0`
* `timex` `3.1.13`
* `uuid` `1.1.7`
* `poison` `3.1.0`
* `credo` `0.7.3`
* Add CircleCI badge
* Add HexFaktor badge
* Add InchEx
### Bug Fixes
* [#5](https://github.com/C-S-D/retort/pull/5) - Fix Elixir 1.4 warnings - [@KronicDeth](https://github.com/KronicDeth)
## v1.2.0
### Enhancements
* [#3](https://github.com/C-S-D/retort/pull/3) - Regression test for `use Retort.Resources` in dialyzer - [@KronicDeth](https://github.com/KronicDeth)
### Bug Fixes
* [#3](https://github.com/C-S-D/retort/pull/3) - [@KronicDeth](https://github.com/KronicDeth)
* De-alias spec types in `Retort.Resources.__using__` because spec types had no `alias` to setup correct alias names and `alias`es should not be used in `quote` block because they'll leak into module where `use` occurs.
* Had to use `map` instead of `Alembic.Pagination.t` because `Alembic.Pagination.t` is not a subtype of `map` needed by `Calcinator.Resources.list` callback.
* [#4](https://github.com/C-S-D/retort/pull/4) - `|` has higher precedence than `->` so the `|` ends up being interpreted as `t -> {:ok, data}` OR `Retort.Client.Generic.error` instead of the correct `t ->` EITHER `{:ok, data}` OR `Retort.Client.Generic.error`. - [@KronicDeth](https://github.com/KronicDeth)
## v1.1.0
### Enhancements
* [#2](https://github.com/C-S-D/retort/pull/2) - [@KronicDeth](https://github.com/KronicDeth)
* Ignore IntelliJ project files
* Update to `calcinator` `2.1.0`
* Update to `credo` `0.6.0`
* Update to `timex` `3.1.8`
* Update to `uuid` `1.1.6`
### Bug Fixes
* [#2](https://github.com/C-S-D/retort/pull/2) - [@KronicDeth](https://github.com/KronicDeth)
* Fix `credo` `0.6.0` errors
* Add missing `@spec`s
* Remove extra blank lines
* Fix Elixir 1.4 warnings about missing `()` on 0-arity function calls.
* Use correct `rabbit_common` in `mix.lock` for Erlang 19+.