more small style tweaks for AH tests
[gitmo/Moose.git] / lib / Moose / Manual / Delta.pod
CommitLineData
600f7f85 1=pod
2
3=head1 NAME
4
5Moose::Manual::Delta - Important Changes in Moose
6
7=head1 DESCRIPTION
8
0f13f53c 9This documents any important or noteworthy changes in Moose, with a
10focus on backwards. This does duplicate data from the F<Changes> file,
11but aims to provide more details and when possible workarounds.
12
13Besides helping keep up with changes, you can also use this document
14for finding the lowest version of Moose that supported a given
15feature. If you encounter a problem and have a solution but don't see
16it documented here, or think we missed an important feature, please
17send us a patch.
600f7f85 18
a3d98218 19=head1 Version 0.85
20
21L<Moose::AttributeHelpers> has been moved into the Moose core from
22L<MooseX::AttributeHelpers>. Major changes include:
23
24=over
25
26=item C<traits>, not C<metaclass>
27
28All of the method providers are available via traits only. The custom
29metaclasses were strictly inferior to applying attribute metaclass traits.
30
31=item C<handles>, not C<provides> or C<curries>
32
33C<provides> syntax was like core Moose C<< handles => HASHREF >> syntax, but
34with the keys and values reversed. This was confusing, and
35AttributeHelpers now uses C<< handles => HASHREF >> in a way that
36should be intuitive to anyone already familiar with it for normal attributes.
37
38The C<curries> functionality provided by AttributeHelpers has been generalized
39to apply to all cases of C<< handles => HASHREF >>, though not every piece of
40functionality has been ported (currying with a CODEREF is not supported).
41
42=back
43
44See L<Moose::AttributeHelpers> for the new documentation.
45
4831e2de 46=head1 Version 0.84
47
48The C<Role> type has been deprecated. On its own, it was useless,
49since it just checked C<< $object->can('does') >>. If you were using
50it as a parent type, just call C<role_type('Role::Name')> to create an
51appropriate type instead.
52
7d6b451f 53=head1 Version 0.78
54
55C<use Moose::Exporter;> now imports C<strict> and C<warnings> into packages
56that use it.
57
c3fdacda 58=head1 Version 0.77
59
60C<DEMOLISHALL> and C<DEMOLISH> now receive an argument indicating whether or
61not we are in global destruction.
62
00c61603 63=head1 Version 0.76
64
9f0b3b64 65Type constraints no longer run coercions for a value that already matches the
66constraint. This may affect some (arguably buggy) edge case coercions that
67rely on side effects in the C<via> clause.
68
f869fc4a 69=head1 Version 0.75
70
71L<Moose::Exporter> now accepts the C<-metaclass> option for easily
72overriding the metaclass (without L<metaclass>). This works for classes
73and roles.
74
39ab7714 75=head1 Version 0.74
76
85cf0647 77Added a C<duck_type> sugar function to L<Moose::Util::TypeConstraints>
78to make integration with non-Moose classes easier. It simply checks if
79C<< $obj->can() >> a list of methods.
39ab7714 80
612fd754 81A number of methods (mostly inherited from L<Class::MOP>) have been
82renamed with a leading underscore to indicate their internal-ness. The
83old method names will still work for a while, but will warn that the
84method has been renamed. In a few cases, the method will be removed
85entirely in the future. This may affect MooseX authors who were using
86these methods.
87
600f7f85 88=head1 Version 0.73
89
0f13f53c 90Calling C<subtype> with a name as the only argument now throws an
600f7f85 91exception. If you want an anonymous subtype do:
92
93 my $subtype = subtype as 'Foo';
94
0f13f53c 95This is related to the changes in version 0.71_01.
600f7f85 96
501db4e6 97The C<is_needed> method in L<Moose::Meta::Method::Destructor> is now
98only usable as a class method. Previously, it worked as a class or
99object method, with a different internal implementation for each
100version.
101
102The internals of making a class immutable changed a lot in Class::MOP
1030.78_02, and Moose's internals have changed along with it. The
104external C<< $metaclass->make_immutable >> method still works the same
105way.
106
600f7f85 107=head1 Version 0.72
108
0f13f53c 109A mutable class accepted C<< Foo->new(undef) >> without complaint,
110while an immutable class would blow up with an unhelpful error. Now,
111in both cases we throw a helpful error instead.
600f7f85 112
0f13f53c 113This "feature" was originally added to allow for cases such as this:
600f7f85 114
115 my $args;
0f13f53c 116
117 if ( something() ) {
118 $args = {...};
600f7f85 119 }
0f13f53c 120
600f7f85 121 return My::Class->new($args);
122
0f13f53c 123But we decided this is a bad idea and a little too magical, because it
124can easily mask real errors.
600f7f85 125
126=head1 Version 0.71_01
127
0f13f53c 128Calling C<type> or C<subtype> without the sugar helpers (C<as>,
129C<where>, C<message>) is now deprecated.
130
131As a side effect, this meant we ended up using Perl prototypes on
132C<as>, and code like this will no longer work:
600f7f85 133
134 use Moose::Util::TypeConstraints;
135 use Declare::Constraints::Simple -All;
0f13f53c 136
137 subtype 'ArrayOfInts'
600f7f85 138 => as 'ArrayRef'
139 => IsArrayRef(IsInt);
140
141Instead it must be changed to this:
142
0f13f53c 143 subtype(
144 'ArrayOfInts' => {
145 as => 'ArrayRef',
146 where => IsArrayRef(IsInt)
147 }
600f7f85 148 );
149
0f13f53c 150If you want to maintain backwards compat with older versions of Moose,
151you must explicitly test Moose's C<VERSION>:
600f7f85 152
0f13f53c 153 if ( Moose->VERSION < 0.71_01 ) {
154 subtype 'ArrayOfInts'
600f7f85 155 => as 'ArrayRef'
156 => IsArrayRef(IsInt);
157 }
158 else {
0f13f53c 159 subtype(
160 'ArrayOfInts' => {
161 as => 'ArrayRef',
162 where => IsArrayRef(IsInt)
163 }
600f7f85 164 );
165 }
166
167=head1 Version 0.70
168
0f13f53c 169We no longer pass the meta-attribute object as a final argument to
170triggers. This actually changed for inlined code a while back, but the
171non-inlined version and the docs were still out of date.
172
173If by some chance you actually used this feature, the workaround is
174simple. You fetch the attribute object from out of the C<$self>
175that is passed as the first argument to trigger, like so:
176
177 has 'foo' => (
178 is => 'ro',
179 isa => 'Any',
180 trigger => sub {
181 my ( $self, $value ) = @_;
182 my $attr = $self->meta->find_attribute_by_name('foo');
183
184 # ...
185 }
186 );
600f7f85 187
188=head1 Version 0.66
189
0f13f53c 190If you created a subtype and passed a parent that Moose didn't know
191about, it simply ignored the parent. Now it automatically creates the
192parent as a class type. This may not be what you want, but is less
193broken than before.
600f7f85 194
0f13f53c 195You could declare a name with subtype such as "Foo!Bar". Moose would
196accept this allowed, but if you used it in a parameterized type such
197as "ArrayRef[Foo!Bar]" it wouldn't work. We now do some vetting on
198names created via the sugar functions, so that they can only contain
199alphanumerics, ":", and ".".
600f7f85 200
201=head1 Version 0.65
202
203Methods created via an attribute can now fulfill a C<requires>
0f13f53c 204declaration for a role. Honestly we don't know why Stevan didn't make
205this work originally, he was just insane or something.
600f7f85 206
0f13f53c 207Stack traces from inlined code will now report the line and file as
208being in your class, as opposed to in Moose guts.
600f7f85 209
210=head1 Version 0.62_02
211
0f13f53c 212When a class does not provide all of a role's required methods, the
213error thrown now mentions all of the missing methods, as opposed to
214just the first missing method.
600f7f85 215
0f13f53c 216Moose will no longer inline a constructor for your class unless it
5e26e3f2 217inherits its constructor from Moose::Object, and will warn when it
218doesn't inline. If you want to force inlining anyway, pass
219C<< "replace_constructor => 1 >> to C<make_immutable>.
0f13f53c 220
221If you want to get rid of the warning, pass C<< inline_constructor =>
fbf7ba85 2220 >>.
600f7f85 223
224=head1 Version 0.62
225
0f13f53c 226Removed the (deprecated) C<make_immutable> keyword.
600f7f85 227
228Removing an attribute from a class now also removes delegation
0f13f53c 229(C<handles>) methods installed for that attribute. This is correct
600f7f85 230behavior, but if you were wrongly relying on it you might get bit.
231
232=head1 Version 0.58
233
0f13f53c 234Roles now add methods by calling C<add_method>, not
235C<alias_method>. They make sure to always provide a method object,
236which will be cloned internally. This means that it is now possible to
237track the source of a method provided by a role, and even follow its
238history through intermediate roles. This means that methods added by
239a role now show up when looking at a class's method list/map.
240
241Parameter and Union args are now sorted, this makes Int|Str the same
242constraint as Str|Int. Also, incoming type constraint strings are
243normalized to remove all whitespace differences. This is mostly for
244internals and should not affect outside code.
245
246L<Moose::Exporter> will no longer remove a subroutine that the
247exporting package re-exports. Moose re-exports the Carp::confess
248function, among others. The reasoning is that we cannot know whether
249you have also explicitly imported those functions for your own use, so
250we err on the safe side and always keep them.
600f7f85 251
252=head1 Version 0.56
253
0f13f53c 254C<Moose::init_meta> should now be called as a method.
600f7f85 255
0f13f53c 256New modules for extension writers, L<Moose::Exporter> and
257L<Moose::Util::MetaRole>.
600f7f85 258
259=head1 Version 0.55_01
260
261Implemented metaclass traits (and wrote a recipe for it):
262
263 use Moose -traits => 'Foo'
264
265This should make writing small Moose extensions a little
266easier.
267
268=head1 Version 0.55
269
270Fixed C<coerce> to accept anon types just like C<subtype> can.
271So that you can do:
272
273 coerce $some_anon_type => from 'Str' => via { ... };
274
275=head1 Version 0.51
276
52da380a 277Added C<BUILDARGS>, a new step in C<< Moose::Object->new() >>.
600f7f85 278
279=head1 Version 0.49
280
0f13f53c 281Fixed how the C<< is => (ro|rw) >> works with custom defined
282C<reader>, C<writer> and C<accessor> options. See the below table for
600f7f85 283details:
284
285 is => ro, writer => _foo # turns into (reader => foo, writer => _foo)
286 is => rw, writer => _foo # turns into (reader => foo, writer => _foo)
287 is => rw, accessor => _foo # turns into (accessor => _foo)
288 is => ro, accessor => _foo # error, accesor is rw
289
290=head1 Version 0.45
291
0f13f53c 292The C<before/around/after> method modifiers now support regexp
293matching of method names. NOTE: this only works for classes, it is
294currently not supported in roles, but, ... patches welcome.
600f7f85 295
0f13f53c 296The C<has> keyword for roles now accepts the same array ref form that
297L<Moose>.pm does for classes.
600f7f85 298
0f13f53c 299A trigger on a read-only attribute is no longer an error, as it's
300useful to trigger off of the constructor.
600f7f85 301
0f13f53c 302Subtypes of parameterizable types now are parameterizable types
303themselves.
600f7f85 304
305=head1 Version 0.44
306
0f13f53c 307Fixed issue where C<DEMOLISHALL> was eating the value in C<$@>, and so
308not working correctly. It still kind of eats them, but so does vanilla
309perl.
600f7f85 310
311=head1 Version 0.41
312
0f13f53c 313Inherited attributes may now be extended without restriction on the
600f7f85 314type ('isa', 'does').
315
0f13f53c 316The entire set of Moose::Meta::TypeConstraint::* classes were
317refactored in this release. If you were relying on their internals you
318should test your code carefully.
600f7f85 319
320=head1 Version 0.40
321
0f13f53c 322Documenting the use of '+name' with attributes that come from recently
323composed roles. It makes sense, people are using it, and so why not
324just officially support it.
600f7f85 325
0f13f53c 326The C<< Moose::Meta::Class->create >> method now supports roles.
600f7f85 327
86b96832 328It is now possible to make anonymous enum types by passing C<enum> an
329array reference instead of the C<< enum $name => @values >>.
600f7f85 330
331=head1 Version 0.37
332
0f13f53c 333Added the C<make_immutable> keyword as a shortcut to calling
334C<make_immutable> on the meta object. This eventually got removed!
600f7f85 335
0f13f53c 336Made C<< init_arg => undef >> work in Moose. This means "do not accept
600f7f85 337a constructor parameter for this attribute".
338
0f13f53c 339Type errors now use the provided message. Prior to this release they
340didn't.
600f7f85 341
342=head1 Version 0.34
343
344Moose is now a postmodern object system :)
345
0f13f53c 346The Role system was completely refactored. It is 100% backwards
347compat, but the internals were totally changed. If you relied on the
348internals then you are advised to test carefully.
600f7f85 349
350Added method exclusion and aliasing for Roles in this release.
351
0f13f53c 352Added the L<Moose::Util::TypeConstraints::OptimizedConstraints>
353module.
600f7f85 354
0f13f53c 355Passing a list of values to an accessor (which is only expecting one
356value) used to be silently ignored, now it throws an error.
600f7f85 357
358=head1 Version 0.26
359
0f13f53c 360Added parameterized types and did a pretty heavy refactoring of the
361type constraint system.
600f7f85 362
0f13f53c 363Better framework extendability and better support for "making your own
364Moose".
600f7f85 365
366=head1 Version 0.25 or before
367
0f13f53c 368Honestly, you shouldn't be using versions of Moose that are this old,
369so many bug fixes and speed improvements have been made you would be
370crazy to not upgrade.
600f7f85 371
0f13f53c 372Also, I am tired of going through the Changelog so I am stopping here,
373if anyone would like to continue this please feel free.
600f7f85 374
375=head1 AUTHOR
376
377Stevan Little E<lt>stevan@iinteractive.comE<gt>
378
379=head1 COPYRIGHT AND LICENSE
380
381Copyright 2009 by Infinity Interactive, Inc.
382
383L<http://www.iinteractive.com>
384
385This library is free software; you can redistribute it and/or modify
386it under the same terms as Perl itself.
387
0f13f53c 388=cut