<commit_before>Release Notes
=============

## 4.0.0

#### ATTENTION:

This release of Giraffe fixes a bug in the `routef` handler which would have previously matched a route too eagerly.

##### Before:

```
Route: /foo/bar/hello/world
routef: /foo/bar/%s
Match: true
```

##### Now:

```
Route: /foo/bar/hello/world
routef: /foo/bar/%s
Match: false
```

For more information please see [issue #347](https://github.com/giraffe-fsharp/Giraffe/issues/347).

#### Bug fixes and breaking changes

- Fixed `routef` to not match more than one URL path segment.
- Fixed the `_ariaLabelledBy` attribute in the `GiraffeViewEngine`
- Fixed case insensitive route handlers on Ubuntu

## 3.6.0

#### Bug fixes

- Fixed a bug in the `subRouteCi` http handler, which prevented nested sub routes to be case insensitive.

#### New features

- Added two new `HttpContext` extension methods to retrieve cookie and form values:
    - `GetCookieValue (key : string)`
    - `GetFormValue (key : string)`

## 3.5.1

#### Bug fixes

- Fixed a bug in Giraffe's model binding to not try to set read only properties anymore.<commit_msg>added release notes<commit_after>Release Notes
=============

## 4.0.0

#### ATTENTION:

This release of Giraffe fixes a bug in the `routef` handler which would have previously matched a route too eagerly.

##### Before:

```
Route: /foo/bar/hello/world
routef: /foo/bar/%s
Match: true
```

##### Now:

```
Route: /foo/bar/hello/world
routef: /foo/bar/%s
Match: false
```

For more information please see [issue #347](https://github.com/giraffe-fsharp/Giraffe/issues/347).

#### Bug fixes and breaking changes

- Fixed `routef` to not match more than one URL path segment.
- Fixed the `_ariaLabelledBy` attribute in the `GiraffeViewEngine`
- Fixed case insensitive route handlers on Ubuntu
- Renamed `tryMatchInput` to `tryMatchInputExact`
- Added new version of `tryMatchInput` which accepts `MatchSettings` record:

    ```fsharp
    type MatchMode =
        | Exact                // Will try to match entire string from start to end.
        | StartsWith           // Will try to match a substring. Subject string should start with test case.
        | EndsWith             // Will try to match a substring. Subject string should end with test case.
        | Contains             // Will try to match a substring. Subject string should contain test case.

    type MatchOptions = { IgnoreCase: bool; MatchMode: MatchMode; } 
    ```

## 3.6.0

#### Bug fixes

- Fixed a bug in the `subRouteCi` http handler, which prevented nested sub routes to be case insensitive.

#### New features

- Added two new `HttpContext` extension methods to retrieve cookie and form values:
    - `GetCookieValue (key : string)`
    - `GetFormValue (key : string)`

## 3.5.1

#### Bug fixes

- Fixed a bug in Giraffe's model binding to not try to set read only properties anymore.
{'fraction_non_alphanumeric': 0.11760612386917188, 'fraction_numerical': 0.010438413361169102, 'mean_word_length': 3.3626707132018208, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2434451', 'n_tokens_mistral': 918, 'n_tokens_neox': 833, 'n_words': 343}