Skip to content

Releases: kemalcr/kemal

v0.18.3

07 Mar 16:52
Compare
Choose a tag to compare
  • Remove Gzip::Header monkey patch since it's fixed in Crystal 0.21.1.

v0.18.2

24 Feb 07:30
Compare
Choose a tag to compare

v0.18.1

21 Feb 19:28
Compare
Choose a tag to compare
  • Crystal 0.21.0 support
  • Drop multipart.cr dependency. multipart support is now built-into Crystal <3
  • Since Crystal 0.21.0 comes built-in with multipart there are some improvements and deprecations.

meta has been removed from FileUpload and it has the following properties

  • tmpfile: This is temporary file for file upload. Useful for saving the upload file.
  • filename: File name of the file upload. (logo.png, images.zip e.g)
  • headers: Headers for the file upload.
  • creation_time: Creation time of the file upload.
  • modification_time: Last Modification time of the file upload.
  • read_time: Read time of the file upload.
  • size: Size of the file upload.

v0.18.0

11 Feb 13:55
Compare
Choose a tag to compare
  • Simpler file upload. File uploads can now be accessed from HTTP::Server::Context like env.params.files["filename"].

env.params.files["filename"] has 5 methods

  • tmpfile: This is temporary file for file upload. Useful for saving the upload file.
  • tmpfile_path: File path of tmpfile.
  • filename: File name of the file upload. (logo.png, images.zip e.g)
  • meta: Meta information for the file upload.
  • headers: Headers for the file upload.

Here's a fully working sample for reading a image file upload image1 and saving it under public/uploads.

post "/upload" do |env|
  file = env.params.files["image1"].tmpfile
  file_path = ::File.join [Kemal.config.public_folder, "uploads/", file.filename]
  File.open(file_path, "w") do |f|
    IO.copy(file, f)
  end
  "Upload ok"
end

To test

curl -F "image1=@/Users/serdar/Downloads/kemal.png" http://localhost:3000/upload

v0.17.5

08 Jan 08:55
Compare
Choose a tag to compare

v0.17.4

24 Dec 11:46
Compare
Choose a tag to compare

v0.17.3

03 Dec 14:38
Compare
Choose a tag to compare

v0.17.2

25 Nov 14:41
Compare
Choose a tag to compare
  • Use body.gets_to_end for parse_json. Fixes #260.
  • Update Radix to 0.3.5 and lock pessimistically. (thanks @luislavena)

v0.17.1

24 Nov 09:31
Compare
Choose a tag to compare

This is a bug fix release with the following changes

  • Treat HTTP::Request body as an IO. Fixes #257

v0.17.0

23 Nov 17:49
Compare
Choose a tag to compare
  • Reimplemented Request middleware / filter routing.

Now all requests will first go through the Middleware stack then Filters (before_*) and will finally reach the matching route.

Which is illustrated as,

Request -> Middleware -> Filter -> Route
  • Rename return_with as halt.
  • Route declaration must start with /. Fixes #242
  • Set default exception Content-Type to text/html. Fixes #202
  • Add only and exclude paths for Kemal::Handler. This change requires that all handlers must inherit from Kemal::Handler.

For example this handler will only work on / path. By default the HTTP method is GET.

OnlyHandler < Kemal::Handler
  only ["/"]

  def call(env)
    return call_next(env) unless only_match?(env)
    puts "If the path is / i will be doing some processing here."
  end
end

The handlers using exclude will work on the paths that isn't specified. For example this handler will work on any routes other than /.

ExcludeHandler < Kemal::Handler
  exclude ["/"]

  def call(env)
    return call_next(env) unless only_match?(env)
    puts "If the path is NOT / i will be doing some processing here."
  end
end
  • Close response on halt. (thanks @samueleaton).
  • Update Radix to v0.3.4.
  • error handler now also yields error. For example you can get the error mesasage like
  error 500 do |env, err|
    err.message
  end
  • Update multipart.cr to v0.1.1