All Versions
14
Latest Version
Avg Release Cycle
50 days
Latest Release
1611 days ago
Changelog History
Page 1
Changelog History
Page 1
-
v0.11.0 Changes
October 17, 2020🆕 New Dependencies
➕ Additions
- ↔ integrates Athena::Validator into
Athena
- Provides a robust and flexible validation framework
- See the API Docs for more information
- 👌 Support user defined annotation configurations
- Allows applying/accessing custom annotations to controllers and/or action methods
- See ART::Events::RequestAware for more information
- ➕ Adds a new ART::Events::Action event that is emitted after the
Request
event, but before the action is executed- Useful for listeners that require information about the resolved route, such as reading custom annotation configurations
- ➕ Adds a setter for the
action_result
property within the ART::Events::View event- Allows listeners to override the return value of the related controller action, such as for pagination
- ➕ Adds a wiki
- Contains a cookbook that includes various types, such as event listeners, param converters, and exclusion strategies that may be useful to your project, but are too specific to be included in Athena itself
🔄 Changes
- (breaking) Rename
HTTP::Request#route
toHTTP::Request#action
- ↔ integrates Athena::Validator into
-
v0.10.0 Changes
July 06, 2020🆕 New Dependencies
⬆️ Dependency Upgrades
➕ Additions
- ➕ Add a startup log message
- Includes the host and port the server will be listening on
- ➕ Add a
POST
endpoint example to theGetting Started
documentation - ↔ Integrates Athena::Serializer into
Athena
- Supports enhanced (de)serialization features while retaining backwards compatibility with
JSON::Serializable
- See the API Docs for more information
- Supports enhanced (de)serialization features while retaining backwards compatibility with
- ➕ Adds support for Link, Unlink, and Custom
HTTP
verbs - ➕ Adds ART::View annotation to configures how the endpoint should be rendered, such as:
- The
HTTP::Status
response code - The serialization groups to use for this route as part of the Group serializer exclusion strategy
- If
nil
values should be serialized or not
- The
🔄 Changes
- 📇 Renames
ART::Route
toART::Action
andART::Action
toART::ActionBase
- (breaking-change) Refactors the previous
ART::View
type to be an implementation detail- The controller action result within
ART::Events::View
is now accessed via.action_result
instead of.view.data
- The controller action result within
- ➕ Add a startup log message
-
v0.9.1 Changes
June 16, 2020🛠 Fixes
- Reinitialize the container on each request to ensure it is unique, even if the fiber is reused on
keep-alive
connections
- Reinitialize the container on each request to ensure it is unique, even if the fiber is reused on
-
v0.9.0 Changes
June 10, 2020📚 This release focuses on refining the foundational concepts of Athena as well as some QoL improvements and bug fixes along the way. See the linked sections in the API documentation for more details/examples.
⬆️ Dependency Upgrades
- 🚀 https://github.com/crystal-ameba/ameba/releases/tag/v0.12.0
- 🚀 https://github.com/athena-framework/dependency-injection/releases/tag/v0.2.0
➕ Additions
- ➕ Add
NotImplemented
andBadGateway
exception classes - 👍 Allow layouts to be used with ECR (#52)
- Introduce concept of ART::Response::Writer to control how the response content is written to the response IO
- By default it is written directly, but can be changed to enable compression for example
- 🌲 Implement logging based on the new
Log
module- Logs matched routes are logged with the route, method, and path/query arguments via the
RoutingListener
- Logs any exceptions that happen via the
ErrorListener
- Logs matched routes are logged with the route, method, and path/query arguments via the
- Introduce concept of Arguments::Resolvers::ArgumentValueResolverInterface
- Handle resolving the arguments for a controller action from a request, or other source.
- Introduce route collision detection
- A compile time error is raised if two routes share the same path; either statically, or with path arguments in the same locations.
- ➕ Add a built in ART::TimeConverter that converts a date(time) string into a Time instance
🔄 Changes
- 🔨 Refactor
ART::Response
to allow writing directly to the response IO- Use ART::Response.new with a block
- (breaking-change) Change
ART::Exceptions::HTTPException
order- Makes
message
required and first
- Makes
- (breaking-change) Updates for the new Athena::DependencyInjection version
include ADI::Service
is no longer required within custom listeners- Arguments are now resolved automatically
- See the DI changelog for more details
- Manually defines initializers for child
HTTPException
types- Makes it easier to extend non
ART::Exceptions::HTTPException
s for custom exception types
- Makes it easier to extend non
- (breaking-change) Changed the implementation of
HTTP::Request#attributes
monkey patch to use ART::ParameterBag- The parameter bag is more flexible, allowing the storage of arbitrary data, not restricted to the union of the hash
- An optional type can be provided when setting a value to get type safety on the value
- (breaking-change) Refactored how ART::ParamConverterInterface work
- Param converters no longer return the converted value
- It should most commonly be stored within the request's
ART::ParameterBag
- An additional ART::ParamConverterInterface::ConfigurationInterface argument is also provided to support variable configuration on a per converter basis
- Param converters are now services and can now use other services as dependencies
Removals
- (breaking-change) Removed
HTTP::Request#path_params
monkey-patch- This data is now stored within the the request's
ART::ParameterBag
- This data is now stored within the the request's
- (breaking-change) The
ADI::Injectable
module is now removed in favor of directly registering controllers as services in order to use other service dependencies- Allows making use of more advanced DI features
- Controllers MUST be declared as public services, e.x.
@[ADI::Register(public: true)]
- A compile time error is raised if they are not
- (breaking-change) Removed the
ssl
option fromART.run
- Would be better to have
nginx
, or something similar, sitting in front of the server - Could be reimplemented in the future if so desired
- Would be better to have
🛠 Fixes
- Correctly return a
405
if the route exists but not for the used HTTP method - 👉 Use
HTTP::Headers#[]=
versus#add
to avoid creating an array of the same header - 👉 Use correct
#to_json
overload forART::Exceptions::HTTPException
-
v0.8.0 Changes
February 07, 2020After nearly a year, a rewrite, and a lot of thinking/planning; I'm happy to introduce the rebirth of Athena, aka version
0.8.0
TODO Create the changelog
-
v0.7.0 Changes
June 09, 2019🆕 New Features
Global
- Dependency Injection/Service Layer module.
- See the docs for additional information.
- 🌲 Implemented Crylog as the logging framework for Athena.
- Logs matched routes, validation/parse errors, and 500 errors by default.
- See the docs for additional information.
🔄 Changes
Routing
- 💥 breaking Param converters'
convert
methods are now instance methods. Also removed the ctx from the method signature. - 💥 breaking The
handle_exception
method now requires a thirdlocation
parameter - 💥 breaking The structure of
athena.yml
has changed to support environment specific configuration.- See the docs for additional information.
- 💥 breaking The current request/response/action is now accessed from
RequestStack
via DI as opposed toget_request
/get_response
.- See the docs for additional information.
- Dependency Injection/Service Layer module.
-
v0.6.2 Changes
May 22, 2019🆕 New Features
Routing
- The
reuse_port
option can now be used onAthena::Routing.run
.
- The
-
v0.6.1 Changes
April 23, 2019🐛 Bug Fixes
Routing
- Only set response status to
204 no content
if the response status was not changed within the action. - Raise a
404 not found
error if the granite model was deleted. - 🛠 Fix issue with action handler not running when using CORS (#21)
- Only set response status to
-
v0.6.0 Changes
April 20, 2019🆕 New Features
Global
- 👍 Crystal 0.28.0 support.
Routing
- Multiple
ParamConverter
can now be used on a route.
🔄 Changes
Routing
- Route actions with a return type of
Nil
will return as a204 No Content
.
-
v0.5.0 Changes
April 16, 2019🆕 New Features
Global
- 🔧 YAML based config file. Currently only used for CORS, but future configuration would live within it
- 📄 The
athena
executable will be added to the project'sbin/
directory on install
Routing
CLI
- Commands are grouped based on the first part of the command name, separated by
:
- The
-e NAME
or--explain NAME
can be used to get more detailed information about a given command
🔄 Changes
Routing
- 💥 Breaking Controllers now are
class
based - 💥 Breaking Route actions are now instance methods
🐛 Bug Fixes
Routing