Lucky v0.24 is out. A few new features, bug fixes, improved performance, and more!
Lucky v0.24 is out now and updated to work with Crystal v0.35.1
See the UPGRADE_NOTES.
Or you can view the changes using LuckyDiff. This tool helps see what has changed between versions and will be included in upgrade notes from now on.
m
is now mount
(again)
Ok, so sometimes you get a great idea, and try it out, and then later realize maybe it wasn’t the best 😅.
When we changed mount
to be m
, we also changed the signature which paves the way for some pretty neat
future updates we have planned.
We realized that m
is hard to search for, and it’s a little confusing to newcomers, so we’ve reverted the
name back to mount
; however, we kept the same signature.
# in Lucky 0.23
m Shared::Footer, year: 2020
# in Lucky 0.24
mount Shared::Footer, year: 2020
A simple rename, and you’re good to go!
data
method
Your Action classes will always return some response whether it’s json()
for your API,
or html()
for your browser apps. Now we have data()
which can be used for responding with
the contents of a file or other data.
For anyone familiar with using Ruby on Rails, this is similar to the Rails
send_data
method.
class Reports::Show < BrowserAction
get "/reports/:id" do
info = gather_data(id)
data(info, disposition: "inline")
end
end
View the PR for more context.
redirect_back
In Lucky 0.23.0 we added the redirect_back
method to redirect a user back to the referer or a specified
fallback path. In this version, we’ve disallowed redirecting back to external hosts unless you specify.
redirect_back fallback: Home::Index, allow_external: true
PostgresURL
to Credentials
When configuring your database in config/database.cr
, you would set your URL string, or
pass a few options to PostgresURL
. We’ve renamed this to Avram::Credentials
which allows us
to validate your connection string at compile time.
Before this release, you could have this:
# in config/database.cr
settings.url = Avram::PostgresURL.build(
#...
username: `whoami`
)
Doing this would cause your username to be set as "myuser "
which could lead to some issues.
Now we can catch that, and have a better structure for adding future validations as other edge cases arise.
# in config/database.cr
settings.credentials = Avram::Credentials.new(
#...
username: "myuser"
)
Along with the better safety, we also now have a standard for apps to use that don’t need to connect to a database. (Like this website).
# in config/database.cr
settings.credentials = Avram::Credentials.void
build_attributes
When you’re writing your tests, you’ll use Boxes as factories for your models. In this release,
we’ve added in a method to return a NamedTuple
of the attributes without creating a new record.
class AdminBox < BaseBox
def initialize
name "Admin"
end
end
admin_attrs = AdminBox.build_attributes
admin_attrs[:name] == "Admin"
Starting with this release, we’ve decided to move our community forum over to Discord. This was by no means a quick decision, and has been in the works with the core team for quite some time. To clarify a few of our reasons for choosing an alternate platform:
We understand this is a big change, so please bear with us while we give this a test.
There’s plenty more updates in this release, so go and try them out! we appreciate all the support everyone has shown helping to make each release better and better. We’re really excited about getting closer to a 1.0 release!
Please give it a spin and help us find bugs so our next release is even more solid. If you find any issues, don’t hesitate to report the issue. If you’re unsure, just hop on Discord chat so we can help you out.
Thanks so much for the support!
If you haven’t already, give us a star on github, and be sure to follow us on Twitter.
For questions, or just to chat, come say hi on Discord.