Packages
open_api_spex
3.22.1
3.22.3
3.22.2
3.22.1
3.22.0
3.21.5
3.21.4
3.21.3
3.21.2
3.21.1
3.21.0
3.20.1
3.20.0
3.19.1
3.19.0
3.18.3
3.18.2
3.18.1
3.18.0
3.17.3
3.17.2
3.17.1
3.17.0
3.16.4
3.16.3
3.16.2
3.16.1
3.16.0
3.15.0
3.14.0
3.13.0
3.12.0
3.11.0
3.10.0
3.9.0
3.8.0
3.7.0
3.6.0
3.5.2
3.5.1
3.5.0
3.4.0
3.3.0
3.2.1
3.2.0
3.1.0
3.0.0
2.3.1
2.3.0
2.2.0
2.1.1
2.1.0
2.0.0
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
Leverage Open Api Specification 3 (swagger) to document, test, validate and explore your Plug and Phoenix APIs.
Current section
Files
Jump to
Current section
Files
open_api_spex
CHANGELOG.md
CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## v3.22.1 - 2025-11-21
* Fix elixir 1.19 support by @adamcstephens in https://github.com/open-api-spex/open_api_spex/pull/685
## v3.22.0 - 2025-08-05
* Support multiple apps in Plug.SwaggerUI by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/676
* Validate keys given to operation/2 macro by @xxdavid in https://github.com/open-api-spex/open_api_spex/pull/675
## v3.21.5 - 2025-07-08
* Fix assert_operation_response/2 references by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/673
## v3.21.4 - 2025-07-01
* Fix OTP-28 support by @bopm in https://github.com/open-api-spex/open_api_spex/pull/672
## v3.21.3 - 2025-06-25
* Fix cast x-validate when decoded schema by @GPrimola in https://github.com/open-api-spex/open_api_spex/pull/647
* Add examples property to Schema by @madjar in https://github.com/open-api-spex/open_api_spex/pull/654
* Document schema resolver duplicate titles behaviour by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/656
* Fix 1.18 compilation warnings by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/665
## v3.21.2 - 2024-10-02
* Use latest version of SwaggerUI by default, but allow it to be configured by @jarmo in https://github.com/open-api-spex/open_api_spex/pull/628
* Exporting to YAML preserves nil values in examples by @zorbash in f3cd32bee2a
## v3.21.1 - 2024-09-17
* Fix schema inspection argument error by @zorbash. https://github.com/open-api-spex/open_api_spex/issues/636
## v3.21.0 - 2024-09-12
* Update dev dependencies and example apps by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/624
* Support casting decimals by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/634
* Support decoding operations with :servers. by @loguntsov in https://github.com/open-api-spex/open_api_spex/pull/635
## v3.20.1 - 2024-07-31
* Support custom error messages in custom validators by @GregorGrasselli in https://github.com/open-api-spex/open_api_spex/pull/621
* Update Schema.example/2 typespec to allow references by @zorbash in 5ec452f
## v3.20.0 - 2024-07-10
* Respect minLength when generating string examples by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/608
* Accept read_write_scope from opts when calling cast functions directly by @albertored in https://github.com/open-api-spex/open_api_spex/pull/572
* Allow Poison v6 to be used by @hkrutzer in https://github.com/open-api-spex/open_api_spex/pull/616
* chore: Drop build matrix support for elixir 1.11, 1.12, 1.13 and OTP 22 by @mbuhot in https://github.com/open-api-spex/open_api_spex/pull/619
* improvement: use struct spec to avoid double `%` in struct inspect by @zachdaniel in https://github.com/open-api-spex/open_api_spex/pull/613
* Feat: add `--check` option in Mix tasks to compare the generated spec with a previously generated file by @davidebriani in https://github.com/open-api-spex/open_api_spex/pull/618
* fix: cast numbers as floats by @David-Klemenc in https://github.com/open-api-spex/open_api_spex/pull/611
## v3.19.1 - 2024-05-17
* Add notice that body params are not merged into Conn.params whne using cast and validate plug by @hamir-suspect in #589
* Set nonces on `<script>` and `<style>` elements if configured by @nathanalderson in #593
* Ensure operation_id is always set on conn.private by @msutkowski in #606
## v3.19.0 - 2024-04-30
* Support response code ranges by @zorbash in 8898859da1
## v3.18.3 - 2024-03-15
* Relax dependency constraint on ymlr to allow version ~> 5.0 by @egze in https://github.com/open-api-spex/open_api_spex/pull/586
## v3.18.2 - 2024-01-26
* Fix 'AllOf cast returns a map, but I expected a struct' by @angelikatyborska in https://github.com/open-api-spex/open_api_spex/pull/592
## v3.18.1 - 2023-12-19
* Fix `assert_operation_response/2` header lookup by @msutkowski in https://github.com/open-api-spex/open_api_spex/pull/584
* Exclude empty paths (`operation false`) from generated spec by @alisinabh in https://github.com/open-api-spex/open_api_spex/pull/583
* Cast discriminator when no title present (#574) by @albertored in https://github.com/open-api-spex/open_api_spex/pull/574
* Docstest Operation.parameter/5 by @zorbash
* Document the spec export task `--filename` option by @zorbash
## v3.18.0 - 2023-08-23
* Relax dependency constraint on ymlr to allow version ~> 4.0 by @arcanemachine in https://github.com/open-api-spex/open_api_spex/pull/544
* Fix deprecation warning on Elixir 1.15, require Elixir 1.11, adapt CI by @thbar in https://github.com/open-api-spex/open_api_spex/pull/550
* Add `--quiet` option for spec generation by @Cowa in https://github.com/open-api-spex/open_api_spex/pull/557
* Fix casting non-objects against discriminator #551 by @gianluca-nitti in https://github.com/open-api-spex/open_api_spex/pull/552
* feat: add assert_operation_response, assert_raw_schema by @msutkowski in https://github.com/open-api-spex/open_api_spex/pull/545
## v3.17.3 - 2023-05-30
* Raise meaningful error message when `SchemaResolver.resolve_schema_modules_from_schema` failed to pattern match by @yuchunc in https://github.com/open-api-spex/open_api_spex/pull/541
* Support structs as inputs when casting objects by @gianluca-nitti in https://github.com/open-api-spex/open_api_spex/pull/529
* Fix #540 `PathItem.from_routes/1` dialyzer warnings - @zorbash - 055c8e0131a4f8
## v3.17.2 - 2023-05-26
* Fix `Schema.example/2` for `anyOf` - @zorbash - 3046c68
## v3.17.1 - 2023-05-22
* Add missing `Reference.resolve_response/2` - @zorbash - a5bd81dac
## v3.17.0 - 2023-05-18
* Support passing a `%Reference{}` as a response when doing controller specs by @mracos in https://github.com/open-api-spex/open_api_spex/pull/532
* Implement `OpenApiSpex.Schema.example/2` which resolves references - @zorbash - 45a26f045776
## v3.16.4- 2023-05-17
* Ensure schemas with discriminator work with atom-keyed maps - a7b8067a7a
* Ensure spec decoding converts `required` items into atoms for `allOf` / `anyOf` / `oneOf` - a7b8067a7a
## v3.16.3 - 2023-05-02
* Keep discriminator errors relevant by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/533
* Avoid compile time dependencies by @doorgan in https://github.com/open-api-spex/open_api_spex/pull/536
## v3.16.2 - 2023-04-13
* Infer moduledoc from schema by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/525
* Fix typespec and add example to Paths.from_routes/1 by @thiagogsr in https://github.com/open-api-spex/open_api_spex/pull/534
## v3.16.1 - 2023-02-07
* Accept dates and datetimes in formatted string schemas by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/524
## v3.16.0 - 2022-11-23
* Optimise property counting for object validations by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/514
* Omit required from schemas when list is empty by @mbuhot in https://github.com/open-api-spex/open_api_spex/pull/515
## v3.15.0 - 2022-11-02
* Resolve schema modules in discriminator mapping by @mbuhot in https://github.com/open-api-spex/open_api_spex/pull/511
## v3.14.0 - 2022-10-23
Thanks to the contributions of the community
- [@zorbash](https://github.com/zorbash)
- [@thbar](https://github.com/thbar)
- [@gmile](https://github.com/gmile)
- [@lucacorti](https://github.com/lucacorti)
* Enhancement: Allow casting atoms as strings by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/497
* Fix: Relax dependency constraint on ymlr by @thbar in https://github.com/open-api-spex/open_api_spex/pull/502
* Enhancement: Implement casting of "byte" string type by @gmile in https://github.com/open-api-spex/open_api_spex/pull/504
* Enhancement: Make OpenApiSpex.resolve_schema/2 work with schema modules by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/458
* Fix: Fix oneOf/allOf/anyOf and schema module in Discriminator mapping by @lucacorti in https://github.com/open-api-spex/open_api_spex/pull/455
## v3.13.0 - 2022-09-24
Thanks to the contributions of the community
- [@MichalDolata](https://github.com/MichalDolata)
- [@mbuhot](https://github.com/mbuhot)
- [@zorbash](https://github.com/zorbash)
- [@albertored](https://github.com/albertored)
- [@rolandtritsch](https://github.com/rolandtritsch)
- [@natali-maximenko](https://github.com/natali-maximenko)
- [@Eein](https://github.com/Eein)
* Docs: Document OpenApiSpex.Plug.NoneCache #480 by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/480
* Enhancement: Improve example apps #481 by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/481
* Infrastructure: Fix CI workflow by @mbuhot
* Enhancement: Fix compilation warnings #479 by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/479
* Enhancement: Allow to configure casting to not automatically populate default values #460 by @albertored in https://github.com/open-api-spex/open_api_spex/pull/460
* Fix: (UndefinedFunctionError) #447 by @rolandtritsch in https://github.com/open-api-spex/open_api_spex/pull/447
* Enhancement: Allow omitting parens in test assertion functions #485 by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/485
* Fix: `not` schemas not decoded correctly #484 by @albertored in https://github.com/open-api-spex/open_api_spex/pull/484
* Enhancement: Add `--start-app` option in openapi generation task #489 by @natali-maximenko in https://github.com/open-api-spex/open_api_spex/pull/489
* Enhancement: Loosen poison dependency to allow using version 3.0 #483 by @Eein in https://github.com/open-api-spex/open_api_spex/pull/483
* Enhancement: Bump swagger-ui JS dependency to 4.14.0 by @zorbash
**Full Changelog**: https://github.com/open-api-spex/open_api_spex/compare/v3.12.0...v3.13.0
## v3.12.0 - 2022-07-21
Thanks to the contributions of the community
- [@pxp9](https://github.com/pxp9)
- [@tfwright](https://github.com/tfwright)
- [@juantascon](https://github.com/juantascon)
- [@riccardomanfrin](https://github.com/riccardomanfrin)
- [@rogerweb](https://github.com/rogerweb)
- [@zorbash](https://github.com/zorbash)
- [@gianluca-nitti](https://github.com/nitti)
- [@MichalDolata](https://github.com/MichalDolata)
- [@Geekfish](https://github.com/Geekfish)
- [@lazebny](https://github.com/lazebny)
- [@Eein](https://github.com/Eein)
* Docs: Solve Issue #396 by @pxp9 in https://github.com/open-api-spex/open_api_spex/pull/397
* Docs: Clarify controller example by @tfwright in https://github.com/open-api-spex/open_api_spex/pull/405
* Fix: Consider one-shot additionalProperties in .decode() by @zoten in https://github.com/open-api-spex/open_api_spex/pull/413
* Fix: Casting Encoding without style field by @juantascon in https://github.com/open-api-spex/open_api_spex/pull/395
* Fix: Adds responses dereferencing by @riccardomanfrin in https://github.com/open-api-spex/open_api_spex/pull/400
* Docs: Fix typos by @kianmeng in https://github.com/open-api-spex/open_api_spex/pull/414
* Enhancement: Implement Extendable protocol for all structs that can have extensions by @albertored in https://github.com/open-api-spex/open_api_spex/pull/415
* Fix: decode/1 function correctly populates the :extensions field of structs by @albertored in https://github.com/open-api-spex/open_api_spex/pull/416
* Fix: Allow empty schemas to be validated as wildcards by @zoten in https://github.com/open-api-spex/open_api_spex/pull/419
* Docs: Fix schema example minor syntax issues (#431) by @rogerweb in https://github.com/open-api-spex/open_api_spex/pull/433
* Enhancement: Bump swagger_ui version to 4.6.2 by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/437
* Enhancement: Implement flag to omit vendor extensions in mix openapi.spec.json by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/439
* Enhancement: Generate examples for UUID formatted strings by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/444
* Enhancement: Format code with mix format by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/449
* Docs: Fix typo in result of JsonErrorResponse.response() by @gianluca-nitti in https://github.com/open-api-spex/open_api_spex/pull/448
* Fix: Avoids overwriting Plug.Conn body_params and params with the cast outcome by @albertored in https://github.com/open-api-spex/open_api_spex/pull/425
* Enhancement: Multiple content types by @moxley in https://github.com/open-api-spex/open_api_spex/pull/451
* Fix: llow empty content for Response by @MichalDolata in https://github.com/open-api-spex/open_api_spex/pull/453
* Infrastructure: Improve CI pipeline by @lucacorti in https://github.com/open-api-spex/open_api_spex/pull/377
* Fix: upport RequestBody passed to operation macro by @Geekfish in https://github.com/open-api-spex/open_api_spex/pull/456
* Enhancement: Allow extensions in all OpenApi structures by @albertored in https://github.com/open-api-spex/open_api_spex/pull/438
* Enhancement: ast parameters with json content-type by @albertored in https://github.com/open-api-spex/open_api_spex/pull/445
* Docs: Code formatting in README by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/459
* Validate :integer type format by @wingyplus in https://github.com/open-api-spex/open_api_spex/pull/465
* Fix: Do not accepting float number in integer type by @wingyplus in https://github.com/open-api-spex/open_api_spex/pull/468
* Fix: anyOf cast crash when Cast.cast return a struct by @wingyplus in https://github.com/open-api-spex/open_api_spex/pull/469
* Fix: Decoding of discriminators when `type: object` is present by @albertored in https://github.com/open-api-spex/open_api_spex/pull/471
* Fix: Correctly cast not map bodies (plug puts them under _json key) by @albertored in https://github.com/open-api-spex/open_api_spex/pull/470
* Enhancement: Add YAML formatter #463 by @lazebny in https://github.com/open-api-spex/open_api_spex/pull/464
* Enhancement: use cache adapter at runtime instead of compile time for PutApiSpec by @Eein in https://github.com/open-api-spex/open_api_spex/pull/461
* Infrastructure: Build and publish a hex.pm package automatically by @zorbash in https://github.com/open-api-spex/open_api_spex/pull/474
**Full Changelog**: https://github.com/open-api-spex/open_api_spex/compare/v3.11.0...v3.12.0
## v3.11.0 - 2021-10-29
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [@asppsa](https://github.com/asppsa)
- [@ElijahBrandyberry](https://github.com/ElijahBrandyberry)
- [@kianmeng](https://github.com/kianmeng)
- [@lucacorti](https://github.com/lucacorti)
- [@m0rt3nlund](https://github.com/m0rt3nlund)
- [@mbuhot](https://github.com/mbuhot)
- [@moxley](https://github.com/moxley)
- [@nimish-mehta](https://github.com/nimish)
- [@reneweteling](https://github.com/reneweteling)
- [@stefanluptak](https://github.com/stefanluptak)
- [@vitorbortolotti](https://github.com/vitorbortolotti)
- [@vorce](https://github.com/vorce)
- [@ycherniavskyi](https://github.com/ycherniavskyi)
- [@zoten](https://github.com/zoten)
- [seantanly](https://github.com/eantanly)
* Docs: Fix Application.spec/2 example in README #344
* Docs: Misc doc changes (#355)
* Docs: JsonApiErrorResponse vs JsonErrorResponse (#385)
* Enhancement: Allow casting params where parameter.content schema is a Reference (#356)
* Enhancement: external_docs via controller @doc and @moduledoc or ControllerSpecs DSL (#329)
* Enhancement: Add optional header in opts to Operation.response (#332)
* Enhancement: Add callback support to operation_spec (#345)
* Enhancement: Adding helpers to OpenApiSpex.TestAssertions (#343)
* Enhancement: Collect all errors occurred during cast properties (#354)
* Enhancement: Add support for multiple specs for the same Phoenix router (#369)
* Enhancement: updated swagger-ui to 3.34.0 (#378)
* Fix casting additionalProperties (#386)
* Fix JsonErrorResponse schema definition (#383)
* Fix: test for cast of query parameters with style: form and explode: false (#364)
* Fix: any_of cast for multiple schemas (#366)
* Fix: Handle oneOf cast when there are multiple success along with failure (#362)
* Fix: Casting of additionalProperties with references (#360)
* Fix: Schema.example/1 for schema module (#358)
* Fix: Stop circular dependency by injecting the schema into list of already processed schemas (#352)
* Fix: Cast default for referenced schema (#337)
* Fix: don't json encode swagger-ui methods (#325)
* Fix: relax requirement on poison preventing version conflicts in library usage (#322)
* Fix: Allow top level security to apply to operations #321
* Fix: return error tuple when discriminator cast fails (#393)
* Infrastructure: Run Elixir CI with GitHub Actions (#347)
## v3.10.0 - 2021-01-11
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [noozo](https://github.com/noozo)
- [sernajoto](https://github.com/sernajoto)
- [pacoguzman](https://github.com/pacoguzman)
- [vitorleal](https://github.com/vitorleal)
- [zlarsen](https://github.com/zlarsen)
- [surik](https://github.com/surik)
- [brentjr](https://github.com/brentjr)
- [dwmcc](https://github.com/dwmcc)
- [wingyplus](https://github.com/wingyplus)
* Feature: Support OAuth2 for swagger-ui (#217)
* Feature: Support `default` response type in responses (#301)
* Feature: Allow overriding `x*struct` in `OpenApiSpex.schema/1` (#304)
* Feature: Ability to specify `deprecated` in ControllerSpec operation (#296)
* Feature: `:struct?` and `:derive?` options in `OpenApiSpex.schema/1` (#312)
* Feature: `OpenApiSpex.add_schemas/2` (#314)
* Enhancement: Remove api_spec data from Conn (#286)
* Enhancement: More informative errors for bad schema (#288, #284, #287)
* Fix: Convert `:format` value to atom when decoding schema file (#293)
* Fix: Type spec in OpenApiSpex.Info
* Fix: Elixir Formatter rules in published package (#306)
* Docs: Fix spelling error in example code (#295)
* Docs: Fix type in README (#297)
* Docs: Fix links and punctuation in README (#298)
* Docs: Promote ControlerSpecs as the preferred API for controller operations (#311)
## v3.9.0 - 2020-09-14
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [feng19](https://github.com/feng19)
- [jbernardo95](https://github.com/jbernardo95)
* Feature: Generate example from schema (#266)
* Feature: Allow SwaggerUI to be configured via Plug opts (#271)
* Feature: Warn on invalid or missing operation specs (#273, #278)
* Feature: Experimental alternative API for defining Operation specs (#265, #280)
* Fix: Handle the same operation occurring at different routes (#272)
* Fix: Casting header names that have upper case letters in specs (#281)
* Maint: Upgrade Elixir dependencies in example projects (#269)
* Maint: Format project with Elixir Formatter (#279)
## v3.8.0 - 2020-08-22
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [feng19](https://github.com/feng19)
- [gdiasdasilva](https://github.com/gdiasdasilva)
- [mojidabckuu](https://github.com/mojidabckuu)
- [noozo](https://github.com/noozo)
- [Shikanime](https://github.com/Shikanime)
- [slashdotdash](https://github.com/slashdotdash)
- [velimir](https://github.com/velimir)
- [wardes](https://github.com/wardes)
* Feature: Custom validators (#243)
* Feature: Swagger json generation Mix Task (#249)
* Feature: Customizable cache adapter (#262)
* Enhancement: Allow passsing `false` to `@doc` annotation to skip the warning. (#236)
* Enhancement: Make @doc parameters declaration consistent with open api (#237)
* Enhancement: Support `security` `@doc` string attribute on operations (#251)
* Enhancement: Allow a `Reference` to be used for directly in the `parameters` definition (#258)
* Enhancement: Allow a `Reference` to be used for an Operation's request body (#260)
* Docs: Fixes README.md responses example typo "unprocessible" (#248)
* Docs: Fix security example to use correct types for the keys (#239)
* Fix: Remove default pop value for :type shortcut in `@doc` specs (#238)
* Fix: Nested parameters when served from file based schema (#241)
* Fix: Error handling for oneOf (#246)
* Fix: json:api compatible data shape option for JsonRenderError (#245)
* Fix: ReferenceError: `components.parameter` missing `s` in CastParamters (#257)
* Fix: struct def for custom validators (#263)
## v3.7.0 - 2020-06-05
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [soundmonster](https://github.com/soundmonster)
- [slapers](https://github.com/slapers)
- [pedroassumpcao](https://github.com/pedroassumpcao)
- [petersenlance](https://github.com/petersenlance)
- [mdogo](https://github.com/mdogo)
- [minibikini](https://github.com/minibikini)
- [rinpatch](https://github.com/rinpatch)
- [palcalde](https://github.com/palcalde)
* Enhancement: Multiple bug fixes and edge case handling of ExDoc based operation specs
* Enhancement: Upgrade Swagger UI to 3.24.2 (#210)
* Enhancement: Improve oneOf casting (#227)
* Docs: Add SecurityScheme usage and examples in the readme (#215)
* Fix: References for query params and discriminators with mappings not working (#200)
* Fix: Errors in parameter pattern validation (#206)
* Fix example (#212)
* Fix: CastAndValidate: incorrect content-type handling (#218)
* Fix: Can't cast and validate a JSON array as request body (#229)
## v3.6.0 - 2020-02-13
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [Zakjholt](https://github.com/Zakjholt)
- [supermaciz](https://github.com/supermaciz)
- [mrmstn](https://github.com/mrmstn)
- [aisrael](https://github.com/aisrael)
* Feature: Improved inspect output of `%Schema{}` (#193)
* Feature: Auto-populate schema title from module name (#192)
* Feature: Derive Operation ID from meta in ExDoc specs (#195)
* Fix: Validation of array minItems ignores empty array (#179)
* Fix: Add minimum/maximum validation for number properties (#181)
* Fix: Properly validate header params (#184)
* Fix: Support free-form query parameters (#171)
* Fix: Resolve schema modules from Response in Components (#186)
## v3.5.2 - 2019-11-15
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [jung-hunsoo](https://github.com/jung-hunsoo)
- [linnal](https://github.com/linnal)
* Fix: Update README for Info from `Application.spec/2` (#174)
* Fix: Casting for unsupported params (#170)
## v3.5.1 - 2019-11-10
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [mrmstn](https://github.com/mrmstn)
* Fix: Issues with complex types for phoenix endpoints (#161)
* Fix: In ExDoc-based operation spec (experimental), change key name used to define `requestBody` (#164)
* Fix: `oneOf` schema having object schemas (#167)
## v3.5.0 - 2019-10-29
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [surik](https://github.com/surik)
- [fmcgeough](https://github.com/fmcgeough)
- [zero778](https://github.com/zero778)
- [vovayartsev](https://github.com/vovayartsev)
- [superhawk610](https://github.com/superhawk610)
- [jung-hunsoo](https://github.com/jung-hunsoo)
- [supermaciz](https://github.com/supermaciz)
- [Geekfish](https://github.com/Geekfish)
- [mrmstn](https://github.com/mrmstn)
- [waltfy](https://github.com/waltfy)
- [ggpasqualino](https://github.com/ggpasqualino)
- [hauleth](https://github.com/hauleth)
* Feature: Ability to import Open API documents instead of defining them in Elixir (#152)
* Feature: Add `display_operation_id` option to SwaggerUI (#138)
* Feature: Schema validation: schema type required when `properties` is present (#146)
* Feature: Improve reporting of test assertion failures (#150)
* Feature: Support for `min_properties` validation for Object properties (#131)
* Feature: Support property defaults in new Cast & Validate API (#145)
* Feature: Support for casting file uploads (#133)
* Feature: Support "\$ref" in operation's parameters (#137)
* Feature: Experimental ExDoc-based endpoint API specifications (#162)
* Deprecation: Deprecate old cast and validation API (#153)
* Deprecation: Set minimum supported Elixir version to 1.7, maximum 1.9 (#130)
* Fix: Prevent example properties with nil values from being stripped out during JSON encoding (#142)
* Fix: casting/validating of oneOf, anyOf (#148)
* Fix: Pass additional properties through when allowed via `additionalProperties` (#155)
* Fix: for `allOf` definitions for multi-typed `allOf` array and complex structs with inheritance (#156)
* Fix: Allow a root-level property of compiled schema to be a schema (#158)
* Docs: Fix bugs and improve wording in README (#126)
* Docs: update phoenix guide and samples (#129)
* Docs: README instructions for separating API operation from controller (#140)
The original cast & validation API has been deprecated and replaced with an API that was introduced in 3.2.0.
Using the old API will now result in compiler and runtime warnings.
Old API:
```elixir
defmodule PhoenixAppWeb.UserController do
use PhoenixAppWeb, :controller
plug OpenApiSpex.Plug.Cast
plug OpenApiSpex.Plug.Validate
end
```
Will result in:
```
warning: OpenApiSpex.Plug.Cast.call/2 is deprecated. Use OpenApiSpex.Plug.CastAndValidate instead
test/support/user_controller.ex:1
warning: OpenApiSpex.Plug.Validate.call/2 is deprecated. Use OpenApiSpex.Plug.CastAndValidate.call/2 instead
test/support/user_controller.ex:1
```
New API
```elixir
defmodule PhoenixAppWeb.UserController do
use PhoenixAppWeb, :controller
plug OpenApiSpex.Plug.CastAndValidate, json_render_error_v2: true
end
```
Note that this changes the default error response. Before, it was a single, plain-text error message.
Now, it's a list of error maps, containing more error information.
Old API:
```elixir
defmodule MyAppWeb.MyControllerTest do
use MyApp.ConnCase
# Old module
import OpenApiSpex.Test.Assertions
## The test themselves don't need to change
test "UserController produces a UsersResponse", %{conn: conn} do
api_spec = MyApp.ApiSpec.spec()
json =
conn
|> get(user_path(conn, :index))
|> json_response(200)
assert_schema(json, "UsersResponse", api_spec)
end
test "something" do
api_spec = MyApp.ApiSpec.spec()
schema = MyApp.Schemas.UsersResponse.schema()
assert_schema(schema.example, "UsersResponse", api_spec)
end
end
```
Will produce:
```
warning: OpenApiSpex.Test.Assertions.assert_schema/3 is deprecated. Use OpenApiSpex.TestAssertions.assert_schema/3 instead
test/my_controller_test.exs:21
```
New API:
```elixir
defmodule MyAppWeb.MyControllerTest do
use MyApp.ConnCase
# New module
import OpenApiSpex.TestAssertions
# The test themselves don't need to change,
# but the new assertion is more discerning,
# so it may find problems that the old API didn't.
end
```
## v3.4.0 - 2019-06-14
Thanks to the contributions of the community โค๏ธ๐๐๐๐งก
- [surik](https://github.com/surik)
- [holsee](https://github.com/holsee)
- [fmcgeough](https://github.com/fmcgeough)
* Feature: the `OpenApiSpex` and `OpenApiSpex.Info` structs now support [extensions](https://swagger.io/docs/specification/openapi-extensions/) (#108) (#114)
The `extensions` key may contain any additional data that should be included in the info, eg the `x-logo` and `x-tagGroups` extensions:
```elixir
spec = %OpenApi{
info: %Info{
title: "Test",
version: "1.0.0",
extensions: %{
"x-logo" => %{
"url" => "https://example.com/logo.png",
"backgroundColor" => "#FFFFFF",
"altText" => "Example logo"
}
}
},
extensions: %{
"x-tagGroups" => [
%{
"name" => "Methods",
"tags" => [
"Search",
"Fetch",
"Delete"
]
}
]
},
paths: %{ ... }
}
```
- Deprecation: `OpenApiSpex.Server.from_endpoint/2` has been deprecated in favor of `OpenApiSpex.Server.from_endpoint/1`.
Simply remove the `otp_app:` option from the call to use the new function. (#116)
```elixir
# server = Server.from_endpoint(Endpoint, otp_app: :my_phoenix_app)
server = Server.from_endpoint(MyPhoenixAppWeb.Endpoint)
```
- Fix: The internal representation of a Phoenix Route struct changed in Phoenix 1.4.7 breaking the `OpenApiSpex.Paths.from_router/1` function. OpenApiSpex 3.4.0 will support both representations until the Phoenix API becomes stable. (#118)
## v3.3.0 - 2019-05-05
Thanks to the contributions from the community! ๐
- [hauleth](https://github.com/hauleth)
- [cstaud](https://github.com/cstaud)
- [xadhoom](https://github.com/xadhoom)
- [nurugger07](https://github.com/nurugger07)
- [fenollp](https://github.com/fenollp)
- [moxley](https://github.com/moxley)
* Feature: Enums expressed as atoms or atom-keyed maps can be cast from strings (or string-keyed maps). (#60) (#101)
Example:
```elixir
parameters: [
Operation.parameter(:sort, :query, :string, "sort direction", enum: [:asc, :desc])
],
```
- Fix: Schema module references are resolved in in-line parameter/response schemas. (#77) (#105)
Example: The response schema is given in-line as an array, but items are resolved from the `User` module.
```elixir
responses: %{
200 => Operation.response(
"User array",
"application/json",
%Schema{
type: :array,
items: MyApp.Schemas.User
}
)
}
```
- Fix: Ensure integer query parameters are validated correctly after conversion from string. (#106)
- Fix: Ensure integers are validated correctly against schema `minimum`, `maximum`, `exlcusiveMinimum` and `exclusiveMaximum` attributes. (#97)
- Fix: Ensure strings are cast to `Date` or `DateTime` types when the schema format is `:date` or `:date-time`. (#90) (#94)
- Docs: The contract for module supplied to the `PutApiSpec` plug is now documented by the `OpenApi` behaviour. (#73) (#103)
- Docs: Poison replaced with Jason in example and tests (#104)
- Docs: Improved documentation for combined `CastAndValidate` plug. (#91)
- Internals: Cache mapping from phoenix controller/action to OpenApi operation. (#102)
## v3.2.1 - 2019-03-11
Patch release for documentation updates and improved error rendering Plug when using `CastAndValidate`.
Thanks [moxley](https://github.com/moxley)!
- Cast and validate guide (#89)
## v3.2.0 - 2019-03-10
This release contains many improvements and internal changes thanks to the contributions of the community!
- [moxley](https://github.com/moxley)
- [kpanic](https://github.com/kpanic)
- [hauleth](https://github.com/hauleth)
- [nurugger07](https://github.com/nurugger07)
- [ggpasqualino](https://github.com/ggpasqualino)
- [teamon](https://github.com/teamon)
- [bryannaegele](https://github.com/bryannaegele)
* Feature: Send Plug CSRF token in x-csrf-token header from Swagger UI (#82)
* Feature: Support `Jason` library for JSON serialization (#75)
* Feature: Combine casting and validation into a single `CastAndValidate` Plug (#69) (#86)
* Feature: Improved performance by avoiding copying of API Spec data in each request (#83)
* Fix: Convert `integers` to `float` when casting to `number` type (#81) (#84)
* Fix: Validate strings without trimming whitespace first (#79)
* Fix: Exclusive Minimum and Exclusive maximum are validated correctly (#68)
* Fix: Report errors when unable to convert to the expected number/string/boolean type (#64)
* Fix: Gracefully report error when failing to convert request params to an object type (#63)
* Internals: Improved code organisation of unit test suite (#62)
## v3.1.0 - 2018-10-28
- Add support for validating polymorphic schemas using `oneOf`, `anyOf`, `allOf`, `not` constructs.
- Updated example apps to work with new API
- CI has moved from travis-ci.org to travis-ci.com and now uses github apps integration.
Thanks to [fenollp](https://github.com/fenollp) and [tapickell](https://github.com/tapickell) for contributions!
## v3.0.0 - 2018-10-25
Major version bump as the behaviour of `OpenApiSpex.Plug.Cast` has changed (#39).
To enable requests that contain a body as well as path or query params, the result of casting the
request body is now placed in the `Conn.body_params` field, instead of the combined `Conn.params` field.
This requires changing code such as Phoenix controller actions to from
```elixir
def create(conn, %UserRequest{user: %User{name: name, email: email}}) do
```
to
```elixir
def create(conn = %{body_params: %UserRequest{user: %User{name: name, email: email}}}, params) do
```
- Feature: A custom plug may be provided to render errors (#46)
- Fix compiler warnings and improve CI process (#53)
- Fix: Support casting GET requests without Content-Type header (#50, #49)
- Open API Spex has been moved to the new `open-api-spex` Github organisation
## v2.3.1 - 2018-09-09
- Docs: Update example application to include swagger generate mix task (#41)
- Fix: Ignore charset in content-type header when looking up schema by content type. (#45)
Thanks to [dmt](https://github.com/dmt) and [fenollp](https://github.com/fenollp) for contributions!
## v2.3.0 - 2018-08-05
- Feature: Validate string enum types. (#33)
- Feature: Detect and report missing API spec in `OpenApiSpex.Plug.Cast` (#37)
- Fix: Correct atom for parameter `style` field typespec (#36)
Thanks to [slavo2](https://github.com/slavo2) and [anagromataf](https://github.com/anagromataf) for
contributions!
## v2.2.0 - 2018-07-07
- Feature: Support composite schemas in `OpenApiSpex.schema`
structs defined with `OpenApiSpex.schema` will include all properties defined in schemas
listed in `allOf`. See the `OpenApiSpex.Schema` docs for some examples.
- Feature: Support composite and polymorphic schemas with `OpenApiSpex.cast/3`.
- `discriminator` is used to cast polymorphic shemas to a more specific schema.
- `allOf` will cast all properties in each included schema
- `oneOf` / `anyOf` will attempt to use each schema until a successful cast is made
## v2.1.1 - 2018-06-12
- Fix: (#24, #25) Operations that define `parameters` and a `requestBody` schema can be validated.
## v2.1.0 - 2018-06-08
- Feature: (#16) Error response from `OpenApiSpex.cast` when value contains unknown properties and schema declares `additionalProperties: false`.
- Feature: (#20) Update swagger-ui to version 3.17.0.
- Fix: (#17, #21, #22) Update typespecs for struct types.
## v2.0.0 - 2018-06-06
Major version update following from API change in `OpenApiSpex.cast` and `OpenApiSpex.validate`.
When casting/validating all parameters against an `OpenApiSpex.Operation`, the complete `Plug.Conn` struct must now be passed, where the combined params map was previously accepted.
This allows `OpenApiSpex.cast` / `OpenApiSpex.validate` to check that the parameters are being supplied in the expected location (query, path, body, header, cookie).
In version 2.0.0, only unexpected query parameters will cause a 422 response from `OpenApiSpex.Plug.Cast`, this may be extended in future versions to detect more invalid requests.
Thanks [cstaud](https://github.com/cstaud), [rutho](https://github.com/ThomasRueckert), [anagromataf](https://github.com/anagromataf) for contributions!
- Change: (#9) swagger-ui updated to 3.13.4
- Change (#9) Unexpected query parameters will produce an error response from `OpenApiSpex.Plug.Cast`
- Change: (#9) `OpenApiSpex.cast/4` now requires a complete `Plug.Conn` struct when casting all parameters of an `OpenApiSpex.Operation`
- Change: (#14) `OpenApiSpex.validate/4` now requires a complete `Plug.Conn` struct when validating all parameters of an `OpenApiSpex.Operation`
- Fix: (#11) Support resolving list of schema modules in `oneOf`, `anyOf`, etc.
- Fix: `OpenApiSpex.schema` macro allows defining schemas without any properties
- Fix: type declarations better reflect when `nil` is allowed
## v1.1.4 - 2018-01-21
- `additionalProperties` is now `nil` by default, was previously `true`
## v1.1.3 - 2017-10-15
- Fix several bugs and make some minor enhancements to schema casting and validating.
- Add sample application to enable end-to-end testing
## v1.1.2 - 2017-10-15
Fix openapi version output in generated spec.
## v1.1.1 - 2017-10-15
Update swagger-ui to version 3.3.2
## v1.1.0 - 2017-10-15
Include path to invalid element in validation errors.
Eg: "#/user/name: Value does not match pattern: [a-zA-Z][a-za-z0-9_]+"
## v1.0.1 - 2017-10-12
Cache API spec in application environment after first call to PutApiSpec plug
## v1.0.0 - 2017-10-02
Initial release. This package is inspired by [phoenix_swagger](https://github.com/xerions/phoenix_swagger) but targets Open API Spec 3.0.