Necessary to prevent the API design from infecting this implementation by clarifying the difference between data and metadata information (like how a basic JSON Data API response should be structured).
Milestone: minor
Necessary to add clarity to what this model represents as `Entry` was slightly confusing, and now that there is no conflict with native `Data` objects, we can use `Data` for the model name.
Milestone: minor
Necessary to handle API response metadata so we can have distinct models for data and metadata.
RuboCop has been updated to ignore the parameters because RuboCop still doesn't have the ability to distinguish between whole value objects and standard objects (and we need safe defaults in this case).
Milestone: minor
Necessary to ensure each endpoint is properly configured with settings unique to the client instance instead of sharing global settings. This cropped up due to needing to deal with multiple TRMNL API server routes when they should be a single route.
Milestone: minor
Necessary to perform API requests and acquire models for further processing. This also wires up the client and exposes the endpoint for immediate use.
Milestone: minor
Necessary to model the data from the Recipes API. This leverages the `Entry` model which encapsulates the `data` attribute while the other keys are pagination related.
Milestone: minor
Necessary to model a recipe author. A `Struct` is used because some keys are optional. This injects the `LocaleReducer` in order to convert all description locales to a hash for quick lookup rather than use the redundant keys provided by the API. Will soon be used by the recipe model (soon to be added).
Milestone: minor
Necessary to provide a reusable function to process locales by dealing with the unnecessary duplication of locale key prefixes in the API responses. This will soon be used by the models.
Milestone: minor
Necessary to account for bad requests. This also removes the private attribute accessors since they are automatically made available via Infusible.
Milestone: minor
Necessary to request IP address data.
As addressed in the previous contract and model commits, RuboCop is updated to ignore the IP addresses in the specs since this can't be avoided.
Milestone: minor
Necessary to model the response.
RuboCop is updated to ignore the variable name issues since this stems from the API design. The model translates the keys to prevent this design flaw from permeating further downstream at least.
Milestone: minor
Necessary to pick up latest additions to the API which picks up the `palette_ids` and `css` attributes. This also removes the `published_at` date/time since it's used and provides little value since Core never records the exact publish date of when the model/device was released.
Milestone: minor
Necessary to validate and cast custom types in Dry Schema objects.
RuboCop was updated to ignore IP addresses in the spec since we need to confirm the IP addresses are properly cast.
Milestone: minor
Necessary to switch to our main domain because nothing is automated for `trmnl.app` and always is behind the changes found on `usetrmnl.com`. This'll help reduce confusion and allow for updates to be tested more quickly for this project.
Milestone: minor
Necessary to ensure repeatable sequences of pseudo-random numbers between different runs of the test suite is used for the seed. This improves the ability to reliable rerun specs by using a more deterministic seed value.
Milestone: patch
The original `NO_COVERAGE` environment variable was awkward to read due to the double negative so `COVERAGE` is being used with an explicit "no" to disable. A message is printed to the console, when disabled, so there are no surprises.
Milestone: minor
Necessary to log debug information and gracefully handle failures. Other errors might need to be tracked in the future but, for now, these are the most common.
Reek has been updated to ignore the logger `#call` method because keeping exception logic in a single place is nice for quick lookup. The data clump smell is also being ignored because we have to repeat passing in custom headers (at least for now).
RuboCop has also been updated to ignore the longer parameter list. This is an unfortunte side effect of the HTTP gem which uses multiple keyword arguments for making requests and so this design carries over into our implementation. Ignoring for now.
Milestone: minor