mirror of https://github.com/rwf2/Rocket.git
New version: 0.2.0.
This commit is contained in:
parent
8eef42a256
commit
c7db553286
151
CHANGELOG.md
151
CHANGELOG.md
|
@ -1,3 +1,154 @@
|
||||||
|
# Version 0.2.0 (Feb 06, 2017)
|
||||||
|
|
||||||
|
Detailed release notes for v0.2 can also be found on
|
||||||
|
[rocket.rs](https://rocket.rs/news/2017-02-06-version-0.2/).
|
||||||
|
|
||||||
|
## New Features
|
||||||
|
|
||||||
|
This release includes the following new features:
|
||||||
|
|
||||||
|
* Introduced managed state.
|
||||||
|
* Added lints that warn on unmanaged state and unmounted routes.
|
||||||
|
* Added the ability to set configuration parameters via environment variables.
|
||||||
|
* `Config` structures can be built via `ConfigBuilder`, which follows the
|
||||||
|
builder pattern.
|
||||||
|
* Logging can be enabled or disabled on custom configuration via a second
|
||||||
|
parameter to the `Rocket::custom` method.
|
||||||
|
* `name` and `value` methods were added to `Header` to retrieve the name and
|
||||||
|
value of a header.
|
||||||
|
* A new configuration parameter, `workers`, can be used to set the number of
|
||||||
|
threads Rocket uses.
|
||||||
|
* The address of the remote connection is available via `Request.remote()`.
|
||||||
|
Request preprocessing overrides remote IP with value from the `X-Real-IP`
|
||||||
|
header, if present.
|
||||||
|
* During testing, the remote address can be set via `MockRequest.remote()`.
|
||||||
|
* The `SocketAddr` request guard retrieves the remote address.
|
||||||
|
* A `UUID` type has been added to `contrib`.
|
||||||
|
* `rocket` and `rocket_codegen` will refuse to build with an incompatible
|
||||||
|
nightly version and emit nice error messages.
|
||||||
|
* Major performance and usability improvements were upstreamed to the `cookie`
|
||||||
|
crate, including the addition of a `CookieBuilder`.
|
||||||
|
* When a checkbox isn't present in a form, `bool` types in a `FromForm`
|
||||||
|
structure will parse as `false`.
|
||||||
|
* The `FormItems` iterator can be queried for a complete parse via `completed`
|
||||||
|
and `exhausted`.
|
||||||
|
* Routes for `OPTIONS` requests can be declared via the `options` decorator.
|
||||||
|
* Strings can be percent-encoded via `URI::percent_encode()`.
|
||||||
|
|
||||||
|
## Breaking Changes
|
||||||
|
|
||||||
|
This release includes several breaking changes. These changes are listed below
|
||||||
|
along with a short note about how to handle the breaking change in existing
|
||||||
|
applications.
|
||||||
|
|
||||||
|
* **`Rocket::custom` takes two parameters, the first being `Config` by
|
||||||
|
value.**
|
||||||
|
|
||||||
|
A call in v0.1 of the form `Rocket::custom(&config)` is now
|
||||||
|
`Rocket::custom(config, false)`.
|
||||||
|
|
||||||
|
* **Tera templates are named without their extension.**
|
||||||
|
|
||||||
|
A templated named `name.html.tera` is now simply `name`.
|
||||||
|
|
||||||
|
* **`JSON` `unwrap` method has been renamed to `into_inner`.**
|
||||||
|
|
||||||
|
A call to `.unwrap()` should be changed to `.into_inner()`.
|
||||||
|
|
||||||
|
* **The `map!` macro was removed in favor of the `json!` macro.**
|
||||||
|
|
||||||
|
A call of the form `map!{ "a" => b }` can be written as: `json!({ "a": b
|
||||||
|
})`.
|
||||||
|
|
||||||
|
* **The `hyper::SetCookie` header is no longer exported.**
|
||||||
|
|
||||||
|
Use the `Cookie` type as an `Into<Header>` type directly.
|
||||||
|
|
||||||
|
* **The `Content-Type` for `String` is now `text/plain`.**
|
||||||
|
|
||||||
|
Use `content::HTML<String>` for HTML-based `String` responses.
|
||||||
|
|
||||||
|
* **`Request.content_type()` returns an `Option<ContentType>`.**
|
||||||
|
|
||||||
|
Use `.unwrap_or(ContentType::Any)` to get the old behavior.
|
||||||
|
|
||||||
|
* **The `ContentType` request guard forwards when the request has no
|
||||||
|
`Content-Type` header.**
|
||||||
|
|
||||||
|
Use an `Option<ContentType>` and `.unwrap_or(ContentType::Any)` for the old
|
||||||
|
behavior.
|
||||||
|
|
||||||
|
* **A `Rocket` instance must be declared _before_ a `MockRequest`.**
|
||||||
|
|
||||||
|
Change the order of the `rocket::ignite()` and `MockRequest::new()` calls.
|
||||||
|
|
||||||
|
* **A route with `format` specified only matches requests with the same
|
||||||
|
format.**
|
||||||
|
|
||||||
|
Previously, a route with a `format` would match requests without a format
|
||||||
|
specified. There is no workaround to this change; simply specify formats
|
||||||
|
when required.
|
||||||
|
|
||||||
|
* **`FormItems` can no longer be constructed directly.**
|
||||||
|
|
||||||
|
Instead of constructing as `FormItems(string)`, construct as
|
||||||
|
`FormItems::from(string)`.
|
||||||
|
|
||||||
|
* **`from_from_string(&str)` in `FromForm` removed in favor of
|
||||||
|
`from_form_items(&mut FormItems)`.**
|
||||||
|
|
||||||
|
Most implementation should be using `FormItems` internally; simply use the
|
||||||
|
passed in `FormItems`. In other cases, the form string can be retrieved via
|
||||||
|
the `inner_str` method of `FormItems`.
|
||||||
|
|
||||||
|
* **`Config::{set, default_for}` are deprecated.**
|
||||||
|
|
||||||
|
Use the `set_{param}` methods instead of `set`, and `new` or `build` in
|
||||||
|
place of `default_for`.
|
||||||
|
|
||||||
|
* **Route paths must be absolute.**
|
||||||
|
|
||||||
|
Prepend a `/` to convert a relative path into an absolute one.
|
||||||
|
|
||||||
|
* **Route paths cannot contain empty segments.**
|
||||||
|
|
||||||
|
Remove any empty segments, including trailing ones, from a route path.
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
A couple of bugs were fixed in this release:
|
||||||
|
|
||||||
|
* Handlebars partials were not properly registered
|
||||||
|
([#122](https://github.com/SergioBenitez/Rocket/issues/122)).
|
||||||
|
* `Rocket::custom` did not set the custom configuration as the `active`
|
||||||
|
configuration.
|
||||||
|
* Route path segments containing more than one dynamic parameter were
|
||||||
|
allowed.
|
||||||
|
|
||||||
|
## General Improvements
|
||||||
|
|
||||||
|
In addition to new features, Rocket saw the following smaller improvements:
|
||||||
|
|
||||||
|
* Rocket no longer overwrites a catcher's response status.
|
||||||
|
* The `port` `Config` type is now a proper `u16`.
|
||||||
|
* Clippy issues injected by codegen are resolved.
|
||||||
|
* Handlebars was updated to `0.25`.
|
||||||
|
* The `PartialEq` implementation of `Config` doesn't consider the path or
|
||||||
|
session key.
|
||||||
|
* Hyper dependency updated to `0.10`.
|
||||||
|
* The `Error` type for `JSON as FromData` has been exposed as `SerdeError`.
|
||||||
|
* SVG was added as a known Content-Type.
|
||||||
|
* Serde was updated to `0.9`.
|
||||||
|
* Form parse failure now results in a **422** error code.
|
||||||
|
* Tera has been updated to `0.7`.
|
||||||
|
* `pub(crate)` is used throughout to enforce visibility rules.
|
||||||
|
* Query parameters in routes (`/path?<param>`) are now logged.
|
||||||
|
* Routes with and without query parameters no longer _collide_.
|
||||||
|
|
||||||
|
## Infrastructure
|
||||||
|
|
||||||
|
* Testing was parallelized, resulting in 3x faster Travis builds.
|
||||||
|
|
||||||
# Version 0.1.6 (Jan 26, 2017)
|
# Version 0.1.6 (Jan 26, 2017)
|
||||||
|
|
||||||
## Infrastructure
|
## Infrastructure
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "rocket_codegen"
|
name = "rocket_codegen"
|
||||||
version = "0.1.6"
|
version = "0.2.0"
|
||||||
authors = ["Sergio Benitez <sb@sergio.bz>"]
|
authors = ["Sergio Benitez <sb@sergio.bz>"]
|
||||||
description = "Code generation for the Rocket web framework."
|
description = "Code generation for the Rocket web framework."
|
||||||
documentation = "https://api.rocket.rs/rocket_codegen/"
|
documentation = "https://api.rocket.rs/rocket_codegen/"
|
||||||
|
@ -15,7 +15,7 @@ build = "build.rs"
|
||||||
plugin = true
|
plugin = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rocket = { version = "0.1.6", path = "../lib/" }
|
rocket = { version = "0.2.0", path = "../lib/" }
|
||||||
log = "^0.3"
|
log = "^0.3"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "rocket_contrib"
|
name = "rocket_contrib"
|
||||||
version = "0.1.6"
|
version = "0.2.0"
|
||||||
authors = ["Sergio Benitez <sb@sergio.bz>"]
|
authors = ["Sergio Benitez <sb@sergio.bz>"]
|
||||||
description = "Community contributed libraries for the Rocket web framework."
|
description = "Community contributed libraries for the Rocket web framework."
|
||||||
documentation = "https://api.rocket.rs/rocket_contrib/"
|
documentation = "https://api.rocket.rs/rocket_contrib/"
|
||||||
|
@ -21,7 +21,7 @@ templates = ["serde", "serde_json", "lazy_static_macro", "glob"]
|
||||||
lazy_static_macro = ["lazy_static"]
|
lazy_static_macro = ["lazy_static"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
rocket = { version = "0.1.6", path = "../lib/" }
|
rocket = { version = "0.2.0", path = "../lib/" }
|
||||||
log = "^0.3"
|
log = "^0.3"
|
||||||
|
|
||||||
# UUID dependencies.
|
# UUID dependencies.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "rocket"
|
name = "rocket"
|
||||||
version = "0.1.6"
|
version = "0.2.0"
|
||||||
authors = ["Sergio Benitez <sb@sergio.bz>"]
|
authors = ["Sergio Benitez <sb@sergio.bz>"]
|
||||||
description = """
|
description = """
|
||||||
Web framework for nightly with a focus on ease-of-use, expressibility, and speed.
|
Web framework for nightly with a focus on ease-of-use, expressibility, and speed.
|
||||||
|
@ -32,7 +32,7 @@ features = ["percent-encode"]
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
lazy_static = "0.2"
|
lazy_static = "0.2"
|
||||||
rocket_codegen = { version = "0.1.6", path = "../codegen" }
|
rocket_codegen = { version = "0.2.0", path = "../codegen" }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
ansi_term = "^0.9"
|
ansi_term = "^0.9"
|
||||||
|
|
Loading…
Reference in New Issue