CHANGELOG.md
## 0.12.0 - 2023/05/23
* Remove support for ruby < 2.6
* Remove support for .Fixnum and .Bignum, .Integer is now used
everywhere. To ease the transition, Fixum and Bignum still exist
in the finitio/data stdlib schema, but will be removed in 0.13.x
## 0.11.4 - 2023/01/06
* The proxy resolution is fixed and clarified. When compiling
a system, all proxies are actually replaced by their actual
Type instance. Only recursive types still keep ProxyType
instances (as sentinels) ; they are bound to their target
type and delete dress and include? to them.
Given that ProxyType is a sentinel on recursive types, calls
to generate_data and to_json_schema are not delegated to the
target type, to avoid infinite recursions.
* Generated names of instantiated high order types are better
(e.g. Collection<String>).
## 0.11.3 - 2023/01/06
* Fix json_schema generation on unresolved ProxyTypes. We use
"object" by default, waiting for a better support for recursive
types.
## 0.11.2 - 2023/01/06
* Fix json_schema generation on builtin_type NilClass. "null"
is not a valid value, we now use "string" instead.
## 0.11.1 - 2021/12/09
* Fix github actions and extend test grid.
## 0.11.0 - 2021/12/09
* Fix json schema generation of Boolean and union types with a |Nil
* Add support for dashses in attribute names (tuple & relation types).
## 0.10.0 - 2021/01/11
* Upgrade all dependencies.
* Ruby < 2.3 is no longer supported.
* Fix code and build under Ruby 3.0.
## 0.9.1 - 2020/12/24
* Fixes a bug where proxy types are not properly resolved when used
in a heading extra, e.g. `{ ...: Proxy }`
## 0.9.0 - 2020/12/16
* Add Type#to_json_schema that converts Finitio types to JSON schema
representations. This first implementation skips all constraints on sub types,
though. You need to explicitly require 'finitio/json_schema' to use it.
## 0.8.0 - 2019/10/21
* Add `Type#unconstrained` that returns a super type with all user specific
constraints removed on sub types, recursively on all non scalar types.
* Add high-order types, such as `Collection<T> = [T]`
* Add support for random data generation through `Finitio::Generation`.
Please `require 'finitio/generation'` to use it.
## 0.7.0 / 2019-02-28
* Implement (basic) @import feature, working with relative paths
and a standard library. The standard library systems are memoized
to avoid unnecessary parsing and compilation.
* `System#check_and_warn` allows discovering warnings, infos and
errors in system definitions, such as duplicate type definitions
and import overrides.
* WARN: Finitio::DEFAULT_SYSTEM is deprecated. Use @import
finitio/data instead.
## 0.6.1 / 2018-03-23
* Fix support for typed extra attributes, a KeyError was raised when
keys were Symbols and not Strings.
## 0.6.0 / 2018-02-17
* Add support for typed extra attributes, e.g. { ...: Integer }
## 0.5.2 / 2017-01-08
* Disable memoization in parser because it leads to terrible performance
issues on some schemas.
* Avoid alternatives on high-level rules (Union, SubType) to prevent many
fallbacks that kill performance without memoization enabled.
## 0.5.1 / 2015-09-22
* Enabled memoization in parser to avoid very long parsing time on complex
schemas.
## 0.5.0 / 2015-09-18
* Breaking changes on public API
* Finitio.parse now returns the parsing tree, no longer the compiled system,
use Finitio.system instead.
* Dress error messages have been changed from `Invalid value xxx for Type` to
a more friendly `Invalid Type xxx`. The rationale is that end-users might
be exposed to those messages in practice. The new messages seem less cryptic.
* Major enhancements
* Types no longer have to declared before being used. In order words, the
following will work fine even if Bigint references Posint that is declared
afterwards:
```
Bigint = Posint( i | i >= 255 )
Posint = Integer( i | i >= 0 )
{ length: Bigint }
```
* Added support for recursive types, e.g.,
```
Tree = { label: String, children: [Tree] }
```
* Added support for MultiTuple and MultiRelation types, aka "optional
vs. required attributes". In the following system, `Person` is a multi
tuple while `Persons` is a multi relation; the date of birth is optional
in both cases:
```
Person = { name : String, dob :? Date }
Persons = {{ name : String, dob :? Date }}
```
* Added basic support for namespacing, through dots being now allowed in
type names. More namespacing support will be added later.
```
This.Is.A.NameSpaced.Type = .Integer( i | i >= 0 )
{ length: This.Is.A.NameSpaced.Type }
```
* Attribute names can now start with an underscore, e.g. '_links'
* Error now have an `root_cause` helper.
* Dress errors resulting from Union and AdType now set a cause to the first
error encountered during the various attempts to dress.
* Breaking changes on undocumented APIs
* Removed factory methods from the Finitio module itself. Use a System
instance instead.
* Removed Finitio::DataType
* Other changes & Bug fixes
* Make Finitio compatible with both Citrus 2.4.x and Citrus 3.x
* Fixed parsing of constraint expressions having inner parentheses
## 0.4.1 / 2014-03-20
* Fixed access to the default system that lead to 'Unknown system
Finitio/default (Finitio::Error)'
## 0.4.0 / 2014-03-20
* Finitio(-rb) is born from the sources of Q(rb) 0.3.0
* Finitio.parse now recognizes Path-like objects (responding to :to_path),
allowing to parse files directly (through Pathname, Path, etc.).
## 0.3.0 / 2014-03-09
* Added AnyType abstraction, aka '.'
* Added support for external contracts in ADTs
* Added support for extracting an Abstract Syntax Tree from parsing result
* Allows camelCasing in constraint names
## 0.2.0 / 2014-03-04
* Fix dependencies in gemspec (judofyr)
## 0.1.0 / 2014-03-03
* Enhancements
* Birthday!