add documentation to Moose::Manual::Delta for the deprecation of get_attribute_map
[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
c378a61a 19=head1 0.93
20
21=over 4
22
23=item Calling $object->new() is no longer deprecated
24
76c89056 25We decided to undeprecate this. Now it just works.
c378a61a 26
fa6da135 27=item C<get_attribute_map> is deprecated
28
29The metaclass method C<get_attribute_map> was never meant to be public.
30These were deprecated, and the work around if you still need the
31functionality they provided is to iterate over the list of attribute
32names manually.
33
34 my %fields = map { $_ => $meta->get_attribute($_) } $meta->get_attribute_list;
35
c378a61a 36=back
37
b98ef150 38=head1 0.90
871f82f8 39
c985327a 40=over 4
41
93ef4ba1 42=item Added Native delegation for Code refs
43
44See L<Moose::Meta::Attribute::Native::Trait::Code> for details.
45
3f5ff7d0 46=item Calling $object->new() is deprecated
47
48Moose has long supported this, but it's never really been documented, and we
49don't think this is a good practice. If you want to construct an object from
50an existing object, you should provide some sort of alternate constructor like
51C<< $object->clone >>.
52
53Calling C<< $object->new >> now issues a warning, and will be an error in a
54future release.
55
19e60fdd 56=item Moose no longer warns if you call C<make_immutable> for a class with mutable ancestors
57
58While in theory this is a good thing to warn about, we found so many
59exceptions to this that doing this properly became quite problematic.
60
93ef4ba1 61=back
62
63=head1 Version 0.89_02
64
65=over 4
4f0d4488 66
871f82f8 67=item New Native delegation methods from L<List::Util> and L<List::MoreUtils>
68
69In particular, we now have C<reduce>, C<shuffle>, C<uniq>, and C<natatime>.
70
3023f1e4 71=item The Moose::Exporter with_caller feature is now deprecated
72
73Use C<with_meta> instead. The C<with_caller> option will start warning in a
74future release.
75
9b9a5a07 76=item Moose now warns if you call C<make_immutable> for a class with mutable ancestors
77
78This is dangerous because modifying a class after a subclass has been
90b20bd6 79immutabilized will lead to incorrect results in the subclass, due to inlining,
9b9a5a07 80caching, etc. This occasionally happens accidentally, when a class loads one
81of its subclasses in the middle of its class definition, so pointing out that
82this may cause issues should be helpful. Metaclasses (classes that inherit
83from L<Class::MOP::Object>) are currently exempt from this check, since at the
90b20bd6 84moment we aren't very consistent about which metaclasses we immutabilize.
9b9a5a07 85
bce5d4a5 86=item C<enum> and C<duck_type> now take arrayrefs for all forms
87
88Previously, calling these functions with a list would take the first element of
89the list as the type constraint name, and use the remainder as the enum values
90or method names. This makes the interface inconsistent with the anon-type forms
91of these functions (which must take an arrayref), and a free-form list where
92the first value is sometimes special is hard to validate (and harder to give
93reasonable error messages for). These functions have been changed to take
94arrayrefs in all their forms - so, C<< enum 'My::Type' => [qw(foo bar)] >> is
95now the preferred way to create an enum type constraint. The old syntax still
96works for now, but it will hopefully be deprecated and removed in a future
97release.
98
871f82f8 99=back
100
4ada9618 101=head1 Version 0.89_01
a3d98218 102
af44c00c 103L<Moose::Meta::Attribute::Native> has been moved into the Moose core from
a3d98218 104L<MooseX::AttributeHelpers>. Major changes include:
105
ebaaa391 106=over 4
a3d98218 107
108=item C<traits>, not C<metaclass>
109
93ced2bd 110Method providers are only available via traits.
a3d98218 111
112=item C<handles>, not C<provides> or C<curries>
113
93ced2bd 114The C<provides> syntax was like core Moose C<< handles => HASHREF >>
115syntax, but with the keys and values reversed. This was confusing,
116and AttributeHelpers now uses C<< handles => HASHREF >> in a way that
117should be intuitive to anyone already familiar with how it is used for
118other attributes.
a3d98218 119
93ced2bd 120The C<curries> functionality provided by AttributeHelpers has been
121generalized to apply to all cases of C<< handles => HASHREF >>, though
122not every piece of functionality has been ported (currying with a
123CODEREF is not supported).
a3d98218 124
1853a27e 125=item C<empty> is now C<is_empty>, and means empty, not non-empty
af44c00c 126
127Previously, the C<empty> method provided by Arrays and Hashes returned true if
128the attribute was B<not> empty (no elements). Now it returns true if the
1853a27e 129attribute B<is> empty. It was also renamed to C<is_empty>, to reflect this.
af44c00c 130
9a14bd29 131=item C<find> was renamed to C<first>, and C<first> and C<last> were removed
28b96142 132
133L<List::Util> refers to the functionality that we used to provide under C<find>
134as L<first|List::Util/first>, so that will likely be more familiar (and will
9a14bd29 135fit in better if we decide to add more List::Util functions). C<first> and
136C<last> were removed, since their functionality is easily duplicated with
137curries of C<get>.
28b96142 138
139=item Helpers that take a coderef of one argument now use C<$_>
140
141Subroutines passed as the first argument to C<first>, C<map>, and C<grep> now
142receive their argument in C<$_> rather than as a parameter to the subroutine.
143Helpers that take a coderef of two or more arguments remain using the argument
144list (there are technical limitations to using C<$a> and C<$b> like C<sort>
145does).
146
af44c00c 147See L<Moose::Meta::Attribute::Native> for the new documentation.
a3d98218 148
ebaaa391 149=back
150
85e2b15a 151The C<alias> and C<excludes> role parameters have been renamed to C<-alias>
152and C<-excludes>. The old names still work, but new code should use the new
153names, and eventually the old ones will be deprecated and removed.
154
4ada9618 155=head1 Version 0.89
156
8a8856de 157C<< use Moose -metaclass => 'Foo' >> now does alias resolution, just like
158C<-traits> (and the C<metaclass> and C<traits> options to C<has>).
159
27f2f43f 160Added two functions C<meta_class_alias> and C<meta_attribute_alias> to
161L<Moose::Util>, to simplify aliasing metaclasses and metatraits. This is
162a wrapper around the old
163
164 package Moose::Meta::Class::Custom::Trait::FooTrait;
165 sub register_implementation { 'My::Meta::Trait' }
166
167way of doing this.
168
4831e2de 169=head1 Version 0.84
170
9f52cce5 171When an attribute generates I<no> accessors, we now warn. This is to help
172users who forget the C<is> option. If you really do not want any accessors,
3de02fd8 173you can use C<< is => 'bare' >>. You can maintain back compat with older
174versions of Moose by using something like:
175
176 ($Moose::VERSION >= 0.84 ? is => 'bare' : ())
9f52cce5 177
178When an accessor overwrites an existing method, we now warn. To work around
179this warning (if you really must have this behavior), you can explicitly
180remove the method before creating it as an accessor:
181
182 sub foo {}
183
184 __PACKAGE__->meta->remove_method('foo');
185
186 has foo => (
187 is => 'ro',
188 );
189
190When an unknown option is passed to C<has>, we now warn. You can silence
191the warning by fixing your code. :)
192
4831e2de 193The C<Role> type has been deprecated. On its own, it was useless,
194since it just checked C<< $object->can('does') >>. If you were using
195it as a parent type, just call C<role_type('Role::Name')> to create an
196appropriate type instead.
197
7d6b451f 198=head1 Version 0.78
199
200C<use Moose::Exporter;> now imports C<strict> and C<warnings> into packages
201that use it.
202
c3fdacda 203=head1 Version 0.77
204
205C<DEMOLISHALL> and C<DEMOLISH> now receive an argument indicating whether or
206not we are in global destruction.
207
00c61603 208=head1 Version 0.76
209
9f0b3b64 210Type constraints no longer run coercions for a value that already matches the
211constraint. This may affect some (arguably buggy) edge case coercions that
212rely on side effects in the C<via> clause.
213
f869fc4a 214=head1 Version 0.75
215
216L<Moose::Exporter> now accepts the C<-metaclass> option for easily
217overriding the metaclass (without L<metaclass>). This works for classes
218and roles.
219
39ab7714 220=head1 Version 0.74
221
85cf0647 222Added a C<duck_type> sugar function to L<Moose::Util::TypeConstraints>
223to make integration with non-Moose classes easier. It simply checks if
224C<< $obj->can() >> a list of methods.
39ab7714 225
612fd754 226A number of methods (mostly inherited from L<Class::MOP>) have been
227renamed with a leading underscore to indicate their internal-ness. The
228old method names will still work for a while, but will warn that the
229method has been renamed. In a few cases, the method will be removed
230entirely in the future. This may affect MooseX authors who were using
231these methods.
232
600f7f85 233=head1 Version 0.73
234
0f13f53c 235Calling C<subtype> with a name as the only argument now throws an
600f7f85 236exception. If you want an anonymous subtype do:
237
238 my $subtype = subtype as 'Foo';
239
0f13f53c 240This is related to the changes in version 0.71_01.
600f7f85 241
501db4e6 242The C<is_needed> method in L<Moose::Meta::Method::Destructor> is now
243only usable as a class method. Previously, it worked as a class or
244object method, with a different internal implementation for each
245version.
246
247The internals of making a class immutable changed a lot in Class::MOP
2480.78_02, and Moose's internals have changed along with it. The
249external C<< $metaclass->make_immutable >> method still works the same
250way.
251
600f7f85 252=head1 Version 0.72
253
0f13f53c 254A mutable class accepted C<< Foo->new(undef) >> without complaint,
255while an immutable class would blow up with an unhelpful error. Now,
256in both cases we throw a helpful error instead.
600f7f85 257
0f13f53c 258This "feature" was originally added to allow for cases such as this:
600f7f85 259
260 my $args;
0f13f53c 261
262 if ( something() ) {
263 $args = {...};
600f7f85 264 }
0f13f53c 265
600f7f85 266 return My::Class->new($args);
267
0f13f53c 268But we decided this is a bad idea and a little too magical, because it
269can easily mask real errors.
600f7f85 270
271=head1 Version 0.71_01
272
0f13f53c 273Calling C<type> or C<subtype> without the sugar helpers (C<as>,
274C<where>, C<message>) is now deprecated.
275
276As a side effect, this meant we ended up using Perl prototypes on
277C<as>, and code like this will no longer work:
600f7f85 278
279 use Moose::Util::TypeConstraints;
280 use Declare::Constraints::Simple -All;
0f13f53c 281
282 subtype 'ArrayOfInts'
600f7f85 283 => as 'ArrayRef'
284 => IsArrayRef(IsInt);
285
286Instead it must be changed to this:
287
0f13f53c 288 subtype(
289 'ArrayOfInts' => {
290 as => 'ArrayRef',
291 where => IsArrayRef(IsInt)
292 }
600f7f85 293 );
294
0f13f53c 295If you want to maintain backwards compat with older versions of Moose,
296you must explicitly test Moose's C<VERSION>:
600f7f85 297
0f13f53c 298 if ( Moose->VERSION < 0.71_01 ) {
299 subtype 'ArrayOfInts'
600f7f85 300 => as 'ArrayRef'
301 => IsArrayRef(IsInt);
302 }
303 else {
0f13f53c 304 subtype(
305 'ArrayOfInts' => {
306 as => 'ArrayRef',
307 where => IsArrayRef(IsInt)
308 }
600f7f85 309 );
310 }
311
312=head1 Version 0.70
313
0f13f53c 314We no longer pass the meta-attribute object as a final argument to
315triggers. This actually changed for inlined code a while back, but the
316non-inlined version and the docs were still out of date.
317
318If by some chance you actually used this feature, the workaround is
319simple. You fetch the attribute object from out of the C<$self>
320that is passed as the first argument to trigger, like so:
321
322 has 'foo' => (
323 is => 'ro',
324 isa => 'Any',
325 trigger => sub {
326 my ( $self, $value ) = @_;
327 my $attr = $self->meta->find_attribute_by_name('foo');
328
329 # ...
330 }
331 );
600f7f85 332
333=head1 Version 0.66
334
0f13f53c 335If you created a subtype and passed a parent that Moose didn't know
336about, it simply ignored the parent. Now it automatically creates the
337parent as a class type. This may not be what you want, but is less
338broken than before.
600f7f85 339
0f13f53c 340You could declare a name with subtype such as "Foo!Bar". Moose would
341accept this allowed, but if you used it in a parameterized type such
342as "ArrayRef[Foo!Bar]" it wouldn't work. We now do some vetting on
343names created via the sugar functions, so that they can only contain
344alphanumerics, ":", and ".".
600f7f85 345
346=head1 Version 0.65
347
348Methods created via an attribute can now fulfill a C<requires>
0f13f53c 349declaration for a role. Honestly we don't know why Stevan didn't make
350this work originally, he was just insane or something.
600f7f85 351
0f13f53c 352Stack traces from inlined code will now report the line and file as
353being in your class, as opposed to in Moose guts.
600f7f85 354
355=head1 Version 0.62_02
356
0f13f53c 357When a class does not provide all of a role's required methods, the
358error thrown now mentions all of the missing methods, as opposed to
359just the first missing method.
600f7f85 360
0f13f53c 361Moose will no longer inline a constructor for your class unless it
5e26e3f2 362inherits its constructor from Moose::Object, and will warn when it
363doesn't inline. If you want to force inlining anyway, pass
b84f64da 364C<< replace_constructor => 1 >> to C<make_immutable>.
0f13f53c 365
366If you want to get rid of the warning, pass C<< inline_constructor =>
fbf7ba85 3670 >>.
600f7f85 368
369=head1 Version 0.62
370
0f13f53c 371Removed the (deprecated) C<make_immutable> keyword.
600f7f85 372
373Removing an attribute from a class now also removes delegation
0f13f53c 374(C<handles>) methods installed for that attribute. This is correct
600f7f85 375behavior, but if you were wrongly relying on it you might get bit.
376
377=head1 Version 0.58
378
0f13f53c 379Roles now add methods by calling C<add_method>, not
380C<alias_method>. They make sure to always provide a method object,
381which will be cloned internally. This means that it is now possible to
382track the source of a method provided by a role, and even follow its
383history through intermediate roles. This means that methods added by
384a role now show up when looking at a class's method list/map.
385
386Parameter and Union args are now sorted, this makes Int|Str the same
387constraint as Str|Int. Also, incoming type constraint strings are
388normalized to remove all whitespace differences. This is mostly for
389internals and should not affect outside code.
390
391L<Moose::Exporter> will no longer remove a subroutine that the
392exporting package re-exports. Moose re-exports the Carp::confess
393function, among others. The reasoning is that we cannot know whether
394you have also explicitly imported those functions for your own use, so
395we err on the safe side and always keep them.
600f7f85 396
397=head1 Version 0.56
398
0f13f53c 399C<Moose::init_meta> should now be called as a method.
600f7f85 400
0f13f53c 401New modules for extension writers, L<Moose::Exporter> and
402L<Moose::Util::MetaRole>.
600f7f85 403
404=head1 Version 0.55_01
405
406Implemented metaclass traits (and wrote a recipe for it):
407
408 use Moose -traits => 'Foo'
409
410This should make writing small Moose extensions a little
411easier.
412
413=head1 Version 0.55
414
415Fixed C<coerce> to accept anon types just like C<subtype> can.
416So that you can do:
417
418 coerce $some_anon_type => from 'Str' => via { ... };
419
420=head1 Version 0.51
421
52da380a 422Added C<BUILDARGS>, a new step in C<< Moose::Object->new() >>.
600f7f85 423
424=head1 Version 0.49
425
0f13f53c 426Fixed how the C<< is => (ro|rw) >> works with custom defined
427C<reader>, C<writer> and C<accessor> options. See the below table for
600f7f85 428details:
429
430 is => ro, writer => _foo # turns into (reader => foo, writer => _foo)
431 is => rw, writer => _foo # turns into (reader => foo, writer => _foo)
432 is => rw, accessor => _foo # turns into (accessor => _foo)
433 is => ro, accessor => _foo # error, accesor is rw
434
435=head1 Version 0.45
436
0f13f53c 437The C<before/around/after> method modifiers now support regexp
438matching of method names. NOTE: this only works for classes, it is
439currently not supported in roles, but, ... patches welcome.
600f7f85 440
0f13f53c 441The C<has> keyword for roles now accepts the same array ref form that
442L<Moose>.pm does for classes.
600f7f85 443
0f13f53c 444A trigger on a read-only attribute is no longer an error, as it's
445useful to trigger off of the constructor.
600f7f85 446
0f13f53c 447Subtypes of parameterizable types now are parameterizable types
448themselves.
600f7f85 449
450=head1 Version 0.44
451
0f13f53c 452Fixed issue where C<DEMOLISHALL> was eating the value in C<$@>, and so
453not working correctly. It still kind of eats them, but so does vanilla
454perl.
600f7f85 455
456=head1 Version 0.41
457
0f13f53c 458Inherited attributes may now be extended without restriction on the
600f7f85 459type ('isa', 'does').
460
0f13f53c 461The entire set of Moose::Meta::TypeConstraint::* classes were
462refactored in this release. If you were relying on their internals you
463should test your code carefully.
600f7f85 464
465=head1 Version 0.40
466
0f13f53c 467Documenting the use of '+name' with attributes that come from recently
468composed roles. It makes sense, people are using it, and so why not
469just officially support it.
600f7f85 470
0f13f53c 471The C<< Moose::Meta::Class->create >> method now supports roles.
600f7f85 472
86b96832 473It is now possible to make anonymous enum types by passing C<enum> an
474array reference instead of the C<< enum $name => @values >>.
600f7f85 475
476=head1 Version 0.37
477
0f13f53c 478Added the C<make_immutable> keyword as a shortcut to calling
479C<make_immutable> on the meta object. This eventually got removed!
600f7f85 480
0f13f53c 481Made C<< init_arg => undef >> work in Moose. This means "do not accept
600f7f85 482a constructor parameter for this attribute".
483
0f13f53c 484Type errors now use the provided message. Prior to this release they
485didn't.
600f7f85 486
487=head1 Version 0.34
488
489Moose is now a postmodern object system :)
490
0f13f53c 491The Role system was completely refactored. It is 100% backwards
492compat, but the internals were totally changed. If you relied on the
493internals then you are advised to test carefully.
600f7f85 494
495Added method exclusion and aliasing for Roles in this release.
496
0f13f53c 497Added the L<Moose::Util::TypeConstraints::OptimizedConstraints>
498module.
600f7f85 499
0f13f53c 500Passing a list of values to an accessor (which is only expecting one
501value) used to be silently ignored, now it throws an error.
600f7f85 502
503=head1 Version 0.26
504
0f13f53c 505Added parameterized types and did a pretty heavy refactoring of the
506type constraint system.
600f7f85 507
0f13f53c 508Better framework extendability and better support for "making your own
509Moose".
600f7f85 510
511=head1 Version 0.25 or before
512
0f13f53c 513Honestly, you shouldn't be using versions of Moose that are this old,
514so many bug fixes and speed improvements have been made you would be
515crazy to not upgrade.
600f7f85 516
0f13f53c 517Also, I am tired of going through the Changelog so I am stopping here,
518if anyone would like to continue this please feel free.
600f7f85 519
520=head1 AUTHOR
521
522Stevan Little E<lt>stevan@iinteractive.comE<gt>
523
524=head1 COPYRIGHT AND LICENSE
525
526Copyright 2009 by Infinity Interactive, Inc.
527
528L<http://www.iinteractive.com>
529
530This library is free software; you can redistribute it and/or modify
531it under the same terms as Perl itself.
532
0f13f53c 533=cut