Revision history for Sah

0.9.16   2012-10-26 (SHARYANTO)

         - normalize_schema(): Extras are now always normalized to {} so before
           "int" => ["int", {}] and now => ["int", {}, {}]. (I think it's more
           proper, normalized form doesn't change when extras {} exist, and more
           clearly make the normalized form stand out visually).

         - bool: Add clause 'is_true' (I think it'll be more portable than using

         - array and hash no longer assume the Sortable role (actually it was a
           typo, it never was).

         - spectest: Add more tests (str, hash, bool, any, all).

0.9.15   2012-10-25 (SHARYANTO)

         No spec changes.

         - spectest: Add tests for type 'array' (incomplete).

0.9.14   2012-10-25 (SHARYANTO)

         No spec changes.

         - spectest: Add tests for type 'float'.

         - build: Move spectest to share/ so it gets installed.

0.9.13   2012-10-25 (SHARYANTO)

         No spec changes.

         - spectest: reenable "clause|" tests, add {min,max}_{ok,nok}
           and .err_level=warn tests.

0.9.12   2012-10-18 (SHARYANTO)


         - Add 'c.COMPILER' attribute namespace to store compiler-specific

         - float: Add clauses 'is_pos_inf' and 'is_neg_inf'.

         - Add type spectest. Preliminary version, now only available for 'int'.

0.9.11   2012-10-16 (SHARYANTO)


         - Add .ok_err_msg to set error message when clause succeeds (existing
           .err_msg is for when clause fails). Succeeding clause is regarded as
           a validation failure under the presence of .max_ok or .min_ok

         - Introduce another error level (.err_level => 'fatal').

0.9.10   2012-10-16 (SHARYANTO)


         - Simplify syntax for 'if' clause. Argument back to 3-element array
           [COND, THEN, ELSE]. Whether COND/THEN/ELSE is an expression, schema,
           clause set, or simple true/false is determined by its type (str,
           array, str, hash, bool). This improves readability.

         - Replace '.input' attribute with 'prop' and 'check_prop' clauses (and
           possibly others in the future). '.input' does not provide a clean
           switch between types (e.g. to express string which has an even
           length, we used ["str", "div_by.input", ["prop", "len"], "div_by",
           2], but 'div_by' is not a clause for str. Now we simply use: ["str",
           "prop", ["len", ["int", "div_by": 2]]] or ["str", "check_prop", "$_ %
           2 == 0"].

0.9.9    2012-10-05 (SHARYANTO)


         - Change attribute for 'prefilters' clause, from 'perm' to 'temp' (to
           make it consistent with the new default.temp).

         [NEW FEATURES]

         - Add attribute for 'default' clause: 'temp'.

0.9.8    2012-10-03 (SHARYANTO)

         No functional changes. Fix examples and misplaced clauses.

0.9.7    2012-10-03 (SHARYANTO)


         - Rename HasElems' clause: 'each' to 'each_elem' to avoid ambiguity
           with 'each_index'. Also rename 'check_each' to 'check_each_elem'.

         [NEW FEATURES]

         - Add hash clauses: 'check_each_key', 'check_each_value'.

0.9.6    2012-10-03 (SHARYANTO)


         - Remove hash clause 'allow_extra_keys' and replace it with '.restrict'
           attribute for 'keys' clause.

         [NEW FEATURES]

         - Add property: 'prio'.

         - Add HasElems properties: 'elems', 'indices'.

         - Add hash properties: 'keys', 'values'.

         - Add hash clauses: 're_keys', 'allowed_keys', 'allowed_keys_re'.


         - Specification for 'req_keys' (previously forgotten to be written).

         - Reorganize FAQ and add some items.

0.9.5    2012-09-26 (SHARYANTO)


         - Change merge prefix from "[merge]", "[merge+]", etc to
           "merge.normal.", "merge.add.", etc (to be compliant with DefHash)

0.9.4    2012-09-21 (SHARYANTO)

         - Rewrite some parts.

         - Specify types 'all', 'any', 'obj', 'date' (moved from Data::Sah).
           Type 'date' still doesn't have clauses specified yet.

         - Specify clauses for 'hash' and 'array' (moved from Data::Sah)

         - Change examples to use JSON instead of Perl notation.

         - Add FAQ item: comparison to JSON schema.

         - Add FAQ item: advice on writing schemas (preliminary).


         - Add type: 'undef'.

         - Add attribute: 'input'.

         - Add clauses: 'check_each', 'exists', 'check_exists', 'each_index',


         - Rename 'vals' attribute to 'is_multi' (a bool) and store the multiple
           values in the clause value itself. This is to avoid having both
           'CLAUSE' and 'CLAUSE.vals'.

         - Rename 'expr' clause attribute to 'is_expr' (a bool). The expression
           is now contained in the original clause value/attribute. This is to
           be consistent with 'is_multi'.

         - Tweak the 'if' clause (change 'then_ok' or 'else_nok' to 'then' and

         - Rename clause 'noop' to 'ok' (consistency with min_ok/max_nok/etc).
           Remove clause 'fail' (can be replaced with '!ok').

         - Rename clause 'check' to 'expr' (consistency with 'prop' as well as
           the 'prop' and 'expr' keys in the 'if' clause).


         - HasElems: remove 'num_of' clause (not generic enough, might be split
           to a custom clause distribution later).

0.9.3    2012-09-20 (SHARYANTO)


         - BaseType: Rename old 'if' clause to 'if_clause' (the new 'if' clause
           is now a generic condition clause which accepts a hash).

         - HasElems: Rename clause 'all_elems' to 'each_elem'.


         - Introduce 'result_var' attribute.

         - Introduce 'type property'.

         - BaseType: add clauses 'schema_v' & 'base_v'. Also mention 'defhash_v'
           (from DefHash specification).

         - BaseType: add generic condition clause 'if' (this is different from
           the old 'if', which has been renamed to 'if_clause').

         - BaseType: add generic looping clauses 'each' and 'exists'.


         - Move 'elems' clause to array (POD mistake).


         - Specify behavior when CLAUSE value and CLAUSE.vals both exist.

0.9.2    2012-09-19 (SHARYANTO)

         - Clause set now uses DefHash.

         - '=' is now a shortcut for '.expr' attribute.

         - Add FAQ and overview (moved from Data::Sah's POD).


         - '.val' removed, now use clause value (DefHash).


         - Update some examples.

0.9.1    2012-09-13 (SHARYANTO)

         - Move type documentation from Data::Sah.

         - BaseType: remove clauses 'comment' and add clauses 'v' (DefHash);
           remove implementation clauses (SANITY, PREPROCESS, POSTPROCESS).

         - HasElems: rename clause 'elem_deps' to 'if_elems_re', add clause

         - str: rename clause 'is_regex' to 'is_re'.

0.9.0    2012-07-21 (SHARYANTO)

         First release, split specification from Data-Sah.