Hello Hanami community! We're thrilled to announce the release of Hanami 2.0.0.alpha6!
With this new cycle of monthly based releases we have a smaller set of changes, but delivered more frequently.
This month we focused mainly on the internals of the framework. The work that Tim Riley is doing is epic. Hanami 2 is modeled around dry-system, which powers the booting process and the dependencies of an app.
Hanami Providers
First thing first, we renamed bootable compontents into providers. This change was reflected in the public API.
We also renamed the provider init
lifecycle step to prepare
.
Hanami.application.register_provider(:metrics) do
prepare do
require "datadog/statsd"
end
start do
# See application's config/settings.rb
settings = target[:settings].statsd
register "metrics", Datadog::Statsd.new(settings.host, settings.port)
end
stop do
# triggered when the application is shut down
metrics.close
end
end
module API
module Actions
module Users
class Create < API::Action
include Deps["application.metrics"]
def handle(req, res)
# ...
metrics.increment("user.create")
end
end
end
end
end
Read more about Provider's changes in CHANGELOG.
Partial Slice Import/Export
A Slice in your application can be used to provide a single responsibility functionality. You can think of it as having microservices in your monolith but without the complexity!
For instance, the search
Slice can expose the search functionality to other slices.
To ensure unwanted functionalities exports, you have the option of declaring which functionalities to export. Here's a few examples
Import from search
slice, uses search
as the imported key namespace:
# config/application.rb
module MyApp
class Application < Hanami::Application
config.slice(:admin) do
import(from: :search)
end
end
end
Import from search
slice with custom namespace:
# config/application.rb
module MyApp
class Application < Hanami::Application
config.slice(:admin) do
import(from: :search, as: :search_engine)
end
end
end
Import specific keys from search
slice
# config/application.rb
module MyApp
class Application < Hanami::Application
config.slice(:admin) do
import(keys: ["run_query"], from: :search)
end
end
end
Export only specific keys from search
slice, and import them in admin
# config/application.rb
module MyApp
class Application < Hanami::Application
config.slice(:admin) do
import(from: :search)
end
config.slice(:search) do
container.config.exports = %w[run_query index_item]
end
end
end
Ruby 3.0+ only
We took this decision for a clear cut with the past of Ruby. At the time of the writing (Feb 2022), Ruby 2.6 will reach End Of Life (EOL) in a month. It didn't make sense to still support it.
We want further than that, given the opportunity that we have with Hanami 2 to "start fresh" with the Ruby versions to support. We opted for taking 2.7 out as well.
There are a few inconsistencies that have been fixed in Ruby 3.0 and we want to take advantage of this.
What’s included?
Today we’re releasing the following gems:
hanami
v2.0.0.alpha6hanami-cli
v2.0.0.alpha6hanami-view
v2.0.0.alpha6hanami-controller
v2.0.0.alpha6hanami-router
v2.0.0.alpha6hanami-utils
v2.0.0.alpha6
How can I try it?
You can check out our Hanami 2 application template, which is up to date with this latest release and ready for you to use as the starting point for your own app.
We’d really love for you to give the tires a good kick for this release in particular: the more real-world testing we can have of our code loading changes, the better!
What’s coming next?
Thank you as always for supporting Hanami! We can’t wait to hear from you about this release, and we’re looking forward to checking in with you again next month. 🙇🏻♂️🌸