Mite
====

Created:      2011-12-08
Home page:    <https://metacpan.org/release/Mite>
Bug tracker:  <https://github.com/tobyink/p5-mite/issues>
Maintainer:   Toby Inkster (TOBYINK) <tobyink@cpan.org>

0.013000	2025-03-31

 [ SECURITY ]
 - Fix: Avoid adding '.' to @INC. Note this might break improvements from
   0.012000.

0.012000	2022-12-12

 - Mite shims should play more nicely with FatPacker and custom require
   hooks.

0.011000	2022-11-09

 - Added: The `locked` option for arrayref and hashref attributes.

0.010008	2022-08-14

 - Added: `mite exec` command which compiles your project in memory to run
   a script.
 - Allow `!-defaults` in import list to suppress the default imports.
 - If you build a MOP for your project, then Moose classes consuming Mite
   roles will not have Mite's builtin subs added to them (like
   __FINALIZE_APPLICATION__).
 - If you build a MOP for your project, then Moose classes extending Mite
   classes will know they need to rebuild the constructor when being made
   immutable. (And you really should make them immutable!)
 - If you use Moose to extend a Mite class and inherit its `DOES`/`does`
   method, then the inherited method will now check with Moose to see if
   your class does roles.

0.010007	2022-08-14

 [ Packaging ]
 - Previous release was missing its changelog entry.

0.010006	2022-08-14

 - Updated: The goto $__NEXT__ feature implemented in
   Mite::Signature::Compiler has been moved into the parent class,
   Type::Params::Signature.

0.010005	2022-08-13

 [ BACK COMPAT ]
 - Mite now uses the PERL_ONLY environment variable to disable XS, not
   MITE_PURE_PERL.

 [ Documentation ]
 - More interesting SYNOPSIS section in Mite.pm.

 [ Other ]
 - __META__ functions no longer have `no warnings qw(once)` because a
   higher scope is already doing that.

0.010004	2022-08-13

 - Use $Mite::COMPILING package variable to indicate when Mite is compiling
   code, not MITE_COMPILE environment variable. This should be checked via
   Your::Project::Shim::_is_compiling() though, if you need to check it at
   all which is unlikely.

0.010003	2022-08-12

 - Added: Support runtime application of roles to classes/objects.

0.010002	2022-08-12

 - Further simplifications to Mite::Shim, bringing its line count down from
   325 to 282.
 - Move logic for Mite keywords out of Mite::Project and Mite::Shim and
   into Mite::Package and the traits which are applied to its subclasses.

0.010001	2022-08-09

 - Suppress building the __META__ method in classes which already inherit
   it from their parent, like pre-0.010000 Mite did.

0.010000	2022-08-09

 - Internal refactoring. Mite::Class is no longer a subclass of Mite::Role;
   instead they are both subclasses of Mite::Package compose code from
   various Mite::Trait::XYZ roles.

0.009003	2022-08-08

 - Major improvements to how Type::Params-style signatures are inlined when
   generating code for Sub::HandlesVia.

0.009002	2022-08-08

 [ Bug Fixes ]
 - Eliminate some void warnings.

 [ Other ]
 - Ensure that Sub::HandlesVia delegated methods are included when building
   MOP.

0.009001	2022-08-08

 [ Packaging ]
 - Add Regexp::Util dependency. Type::Tiny can inline certain type
   constraints better when it's installed.

 [ Other ]
 - Options hashrefs are now supported by the `extends` keyword. They were
   already supported by `with` though that wasn't documented.
 - When consuming a role, you can now alias methods.
 - When consuming a role, you can now exclude methods.
 - When extending a class or consuming a role, you can now specify a
   minimum version.

0.009000	2022-08-07

 [ Packaging ]
 - Require a newer Type::Params, which supports the strictness option.

 [ Other ]
 - Added: Integrate Sub::HandlesVia support.

0.008003	2022-08-05

 - Added: Add STRICT_MODE like Devel::StrictMode to the Mite shim exports.
 - Added: Add an autolax mode (configurable in .mite/config) which makes a
   lot of argument checking dependent on environment variables, running
   fast and loose by default if enabled. I don't necessarily recommend
   using this feature, but it now exists.
 - Added: Non-XS readers, writers, accessors, clearers, and predicates now
   check argument count, though there's also a skip_argc_check attribute
   option to disable this. (The XS versions mostly do check though!)

0.008002	2022-08-03

 - Added: Support enum => \@values as a shortcut to define enumerated
   attributes.
 - Added: Support handles => 1 and handles => 2 for enumerated attributes,
   like MooseX::Enumeration and MooX::Enumeration.

0.008001	2022-08-03

 - Added: Mite can now optionally call triggers when an attribute value is
   supplied by defaults/builders.
 - Added: Mite can now optionally skip type checks/coercions on attribute
   values supplied by defaults/builders.

0.008000	2022-08-01

 - Added: Mite attributes keep track of the file name and line number they
   were defined on, as well as some other context; this is included in
   comments in the generated .mite.pm file, and provided when building
   Moose-compatible metaobjects.
 - Added: Mite can optionally write a Your::Project::MOP module which
   provides Moose integration for your classes and roles.

0.007006	2022-07-21

 - If you extend an attribute with a default in a parent class, adding a
   builder in the child class, the builder will successfully replace the
   default. And vice versa.
 - Make previous optimizations for isa => Object or isa =>
   InstanceOf['Some::Class'] apply more often.
 - Minor changes to some error messages thrown by method signatures.
 - Mite will now complain if you attempt to provide both a default and a
   builder for the same attribute.

0.007005	2022-07-21

 - Builders are now used over defaults if an attribute has both, but you
   shouldn't be doing that anyway.
 - Check ref($thing) before calling Scalar::Util::weaken($thing).
 - Slightly prettier code for isa checks of attributes where isa => Object
   or isa => InstanceOf['Some::Class'].
 - Slightly prettier code for setting defaults of attributes where isa =>
   Bool.

0.007004	2022-07-20

 - BUILD methods are now called before strict constructors are enforced.
 - Improve comments in generated code.
 - Type check error messages for slurpy parameters in method signatures no
   longer mention Slurpy[] in the text of the message. (It should still be
   clear from the variable name that it's the slurpy parameter which is
   failing.)

0.007003	2022-07-17

 - signature_for '+parent_class_method'

0.007002	2022-07-17

 - Improvements to Mite's ability to self-compile.

0.007001	2022-07-17

 - Improvements to the Mite::Type module internally used by Mite.

0.007000	2022-07-17

 [ Documentation ]
 - Explicitly document that Mite's objects are blessed hashrefs.

 [ Other ]
 - Added: New `signature_for` keyword, adding Type::Params-like signatures.
 - Added: clone_on_read and clone_on_write options for attributes.

0.006013	2022-07-14

 [ Documentation ]
 - Fix some minor typos in the documentation for the isa option for
   attributes.

 [ Other ]
 - Allow [] and {} as defaults for attributes.

0.006012	2022-07-13

 - If a type constraint is a reference but isn't a Type::Tiny object, try
   to coerce it to one. Note that the type still needs to be inlineable,
   but this allows for MooseX::Types to often work (but then why are you
   using Mite?), Sub::Quote, and also often Type::Library::Compiled types.

0.006011	2022-07-12

 - Avoid creating do {} blocks in constructors and readers/accessors when
   calling a coderef default.
 - Avoid creating do {} blocks in the constructor with a temporary variable
   when an attribute has no type constraint, but does have an eager default
   and an init_arg. This may provide a very small speed boost.
 - Ensure that BUILD methods see the original hashref returned by BUILDARGS
   instead of altering it when processing aliases.

0.006010	2022-07-12

 [ Test Suite ]
 - Switch from Fennec to Test2::V0 and Test2::Tools::Spec.

 [ Packaging ]
 - Add Class::XSAccessor to runtime recommendations.

 [ Other ]
 - If a Mite class is directly inheriting from another Mite class in this
   project, it will no longer define its own BUILDALL, DESTROY, or __META__
   methods and instead relies in the inherited methods; if it doesn't
   define any attributes it will also inherit its constructor.

0.006009	2022-07-11

 [ Documentation ]
 - Internally cleaned up the type constraints for the different options
   when defining an attribute; documented them better.

0.006008	2022-07-11

 - Added: clone option for attributes (stolen from MooseX::Extended).

0.006007	2022-07-11

 [ Documentation ]
 - Minor tweaks.

 [ Other ]
 - Minor tidying.

0.006006	2022-07-10

 [ Bug Fixes ]
 - Eliminate warning from `mite init`.

 [ Documentation ]
 - Include benchmarking results.

0.006005	2022-07-10

 [ Documentation ]
 - Minor documentation improvements.

0.006004	2022-07-10

 [ Documentation ]
 - Change abstracts for some modules

 [ Other ]
 - Added: Support `has $name => $default;` syntax like Mojo::Base and
   Object::Simple.

0.006003	2022-07-10

 [ Documentation ]
 - Correct abstracts for some modules

0.006002	2022-07-10

 [ Bug Fixes ]
 - Fix various minor bugs which were causing warnings on older Perls.

 [ Documentation ]
 - Fix minor typo in documentation for guard keyword.

 [ Other ]
 - Added: New `mite preview FILENAME` command to preview the Perl code Mite
   will generate for a file.
 - The Mite development tool now uses Getopt::Kingpin and Module::Pluggable
   instead of App::Cmd, as recent versions of App::Cmd dropped support for
   Perl older than 5.20, limiting the versions of Perl the Mite development
   tool could run under. The Mite development tool now runs on Perl 5.10.1
   or above, and projects compiled with it run on Perl 5.8.1 and above.

0.006001	2022-07-09

 [ Bug Fixes ]
 - Eliminate some 'used only once' warnings from compiled mite.pm files.

 [ Other ]
 - Added: Make the guard function from the Mite shim exportable.

0.006000	2022-07-09

 [ Documentation ]
 - Split the long Mite::Manual::Syntax pod into three smaller documents:
   Mite::Manual::Keywords, Mite::Manual::Attributes, and
   Mite::Manual::Features.

 [ Other ]
 - Added: local_writer option for attributes.
 - Added: lvalue option for attributes.

0.005004	2022-07-08

 - Attributes are now aware of which class/role they're currently being
   compiled into, in case they need to reach out to it for any information.
 - More concise attribute initialization code in constructors; this mostly
   makes a difference to attributes with a type check/coercion that have
   both an init_arg and an eager default/builder.
 - Support %s in attribute reader/writer/etc method names as a placeholder
   for the attribute's name.

0.005003	2022-07-07

 - Added: Provide blessed.
 - Added: Support -all for imports.
 - Dumps of references auto-generated by croak/carp/confess will no longer
   use indentation.
 - Improvements to the self-compiling process -- that is, the process that
   Mite uses to compile Mite.
 - Minor improvements to the Mite shim.

0.005002	2022-07-07

 - Added: Provide carp/croak/confess.
 - Added: does for attributes.
 - Mite::Shim tidy-ups.

0.005001	2022-07-06

 - Added: Mite::Shim will now inject namespace::autoclean into your
   class/role if it is installed and you haven't opted out.

0.005000	2022-07-05

 - Added: Attribute `isa` options can now refer to types in a project-wide
   type library, without introducing a dependency on Type::Library for your
   project.
   <https://github.com/tobyink/p5-mite/issues/17>
 - Added: Roles now have a `requires` keyword, and method modifiers in
   roles implicitly require the methods they are modifying.
   <https://github.com/tobyink/p5-mite/issues/13>
 - Allow classes to extend non-Mite classes.
   <https://github.com/tobyink/p5-mite/issues/16>
 - Restore the separate BUILDALL method which had previously been removed
   in Mite 0.001006.

0.004000	2022-07-04

 - Added: Provide constants `ro`, `rw`, `rwp`, `lazy`, and `bare` constants
   as an opt-in feature.
 - Added: Provide constants `true` and `false` constants as an opt-in
   feature.
 - Added: Support `param` and `field` like MooseX::Extended as an opt-in
   feature.
 - Make the Mite::Shim import method smarter, allowing you to opt-in and
   opt-out of features.

0.003001	2022-07-03

 [ Bug Fixes ]
 - Workaround for how Role::Tiny roles are applied to Mite classes
   affecting Role::Hooks.

 [ Other ]
 - An error is now thrown if you use `is` when modifying an attribute with
   a + sign.
 - Attribute initialization in the constructor changed from alphabetical
   order to declaration order, with attributes in parent classes
   initialized before attributes in child classes. Attributes modified with
   a + sign are treated as a new declaration, so initialized later.

0.003000	2022-07-03

 [ Bug Fixes ]
 - Fix method modifiers applying to inherited methods.

 [ Packaging ]
 - Remove dependency on version.pm.

 [ Other ]
 - Added: Mite classes and roles can consume Role::Tiny roles.
   <https://github.com/tobyink/p5-mite/issues/10>

0.002004	2022-07-03

 [ Documentation ]
 - Fixed a couple of typos in the documentation for `accessor`.

 [ Other ]
 - Compiled .mite.pm files no longer require Perl 5.10.1 but should work on
   Perl 5.8.1+ as long as MRO::Compat is installed.
   <https://github.com/tobyink/p5-mite/issues/7>
 - Mite::Shim will print a warning on Perl older than 5.14 if
   Devel::GlobalDestruction isn't installed.
 - More reliable (and tidier) quoting of strings in compiled .mite.pm
   files.
   <https://github.com/tobyink/p5-mite/issues/11>

0.002003	2022-07-02

 [ Packaging ]
 - Removed the TODO file and put the tasks in the issue tracker.

 [ Other ]
 - Added: Allow attribute defaults to be expressed as a reference to a
   string of Perl code.
   <https://github.com/tobyink/p5-mite/issues/4>
 - More efficient implementation of strict constructors.
 - Removed: Removed some code related to the unimplemented idea of dataref
   attribtue defaults.

0.002002	2022-07-01

 - Change how __FINALIZE_APPLICATION__ gets called for indirect role
   applications.

0.002001	2022-07-01

 [ Bug Fixes ]
 - Fix for on-demand loading of roles and parent classes.

0.002000	2022-07-01

 [ Documentation ]
 - Mite::Manual::Missing is a new pod file that documents features found in
   Moose/Moo which are not available in Mite.

 [ Other ]
 - Added: Roles

0.001013	2022-06-30

 [ Documentation ]
 - Documented what the default for is is.
 - Improved documentation for alias.

 [ Test Suite ]
 - Add tests for is=>lazy.

 [ Other ]
 - Minor code cleanups, especially around alias.

0.001012	2022-06-30

 [ Bug Fixes ]
 - Cope with alias=>[] (and also alias=>undef).

 [ Other ]
 - Minor improvements in whitespace in output files.

0.001011	2022-06-30

 - Also set $USES_MITE while Mite is compiling your class.

0.001010	2022-06-29

 [ Documentation ]
 - Document that writers/clearers are chainable.

 [ Other ]
 - Added: Set a $USES_MITE package variable in all classes built with Mite.

0.001009	2022-06-29

 [ Bug Fixes ]
 - Try fixing that error again.

0.001008	2022-06-29

 [ Bug Fixes ]
 - Don't explicitly disable warnings with `no warnings 'redundant'` as that
   category won't work on older Perls

0.001007	2022-06-29

 [ Packaging ]
 - Fix changelog

 [ Other ]
 - Added: alias for attributes
   <https://github.com/tobyink/p5-mite/issues/1>

0.001006	2022-06-29

 - Added: DESTROY/DEMOLISH methods
 - Added: Method modifiers
 - Removed: The BUILDALL method was removed in favour of inlining it within
   new

0.001005	2022-06-29

 [ Documentation ]
 - Minor improvements

 [ Test Suite ]
 - Improve tests for handles

0.001004	2022-06-29

 [ Bug Fixes ]
 - Strict constructor feature should use init_arg rather than attribute
   names

 [ Documentation ]
 - Add Mite::Manual::Workflow and Mite::Manual::Syntax

0.001003	2022-06-29

 [ Bug Fixes ]
 - Fix regexp used to rewrite shim pod

0.001002	2022-06-29

 [ Documentation ]
 - Add stub pod to all modules

 [ Packaging ]
 - Hide the MY package from CPAN indexer

0.001001	2022-06-29

 [ Packaging ]
 - Switch to Dist::Inkt

 [ Other ]
 - Added: documentation for attributes
 - Added: handles for attributes

0.001000	2022-06-28

 [ Packaging ]
 - Added version numbers to more modules. (Everything except the shim.)
 - Changed version numbering scheme.

 [ Other ]
 - Mite is now self-hosting! It no longer requires Moo.

v0.0.9	2022-06-28

 [ Bug Fixes ]
 - Mite::Class shouldn't accidentally try to use Try::Tiny::XS to implement
   strict constructors

 [ Documentation ]
 - Fix minor pod formatting inconsistency

 [ Other ]
 - Don't internally use roles, as the aim is to eventually be able to have
   Mite use Mite instead of Moo, and Mite doesn't provide roles.
 - Rename the `extends` method in Mite::Class to `superclasses` to avoid
   confusion with the exported `extends` function
 - Require Type::Tiny 1.014000

v0.0.8	2022-06-24

 [ Bug Fixes ]
 - Mite::Shim now copes better with + prefix on attribute names

 [ Other ]
 - Added: BUILD/BUILDALL
 - Added: BUILDARGS
 - Added: trigger for attributes
 - Child classes no longer re-implement accessors for attributes defined in
   parent classes, unless they have altered the attribute in some way
 - has \@names is now supported, like Moose and Moo

v0.0.7	2022-06-23

 - Avoid Mite::Shim and Type::Tiny from appearing in compiled modules so
   they don't confuse the CPAN indexer.

v0.0.6	2022-06-23

 - Added: coerce for attributes
 - Added: perltidy option in .mite/config
 - Added: weak_ref for attributes
 - Allow type => $blessed_type for has. Using it will void your warranty.
 - Clearers, setters, and accessors used as setters are now chainable
 - Output accessor code in a stable order instead of hash order
 - Support Types::Common::Numeric types
 - Support Types::Common::String types

v0.0.5	2022-06-22

 [ Bug Fixes ]
 - Fix inlining type constraints

 [ Other ]
 - Hide Mite::Shim embedded in Mite projects from CPAN indexer

v0.0.4	2022-06-22

 - Added: builder for attributes
 - Added: is => lazy like Moo
 - Added: isa for attributes
 - Added: lazy for attributes

v0.0.3	2022-06-21

 [ Bug Fixes ]
 - Bugfixes

 [ Other ]
 - Added: accessor for attributes
 - Added: clearer for attributes
 - Added: is => rwp like Moo
 - Added: predicate for attributes
 - Added: reader for attributes
 - Added: writer for attributes

v0.0.2	2022-06-21

 [ Packaging ]
 - New maintainer: TOBYINK

 [ Other ]
 - Added: Strict constructors
 - Added: init_arg for attributes
 - Added: required attributes
 - Port from Mouse to Moo

v0.0.1	2014-07-19	Initial release
