Commit | Line | Data |
600f7f85 |
1 | =pod |
2 | |
3 | =head1 NAME |
4 | |
5 | Moose::Manual::Delta - Important Changes in Moose |
6 | |
7 | =head1 DESCRIPTION |
8 | |
0f13f53c |
9 | This documents any important or noteworthy changes in Moose, with a |
10 | focus on backwards. This does duplicate data from the F<Changes> file, |
11 | but aims to provide more details and when possible workarounds. |
12 | |
13 | Besides helping keep up with changes, you can also use this document |
14 | for finding the lowest version of Moose that supported a given |
15 | feature. If you encounter a problem and have a solution but don't see |
16 | it documented here, or think we missed an important feature, please |
17 | send us a patch. |
600f7f85 |
18 | |
aee0741b |
19 | =head1 1.09 |
20 | |
7dacb294 |
21 | =over 4 |
22 | |
2b54d2a6 |
23 | =item You cannot pass C<< coerce => 1 >> unless the attribute's type constraint has a coercion |
24 | |
25 | Previously, this was accepted, and it sort of worked, except that if you |
26 | attempted to set the attribute after the object was created, you would get a |
27 | runtime error. |
28 | |
29 | Now you will get an error when you attempt to define the attribute. |
30 | |
aee0741b |
31 | =item C<no Moose>, C<no Moose::Role>, and C<no Moose::Exporter> no longer unimport strict and warnings |
32 | |
33 | This change was made in 1.05, and has now been reverted. We don't know if the |
34 | user has explicitly loaded strict or warnings outside on their own, and |
35 | unimporting them is just broken in that case. |
36 | |
59caebc4 |
37 | =item Reversed logic when defining which options can be changed |
7782e1da |
38 | |
59caebc4 |
39 | L<Moose::Meta::Attribute> now uses reversed logic when defining which |
7782e1da |
40 | options can be changed. By default all options are allowed to be |
41 | changed. The previous behaviour required each option to be whitelisted |
42 | for changing using C<legal_options_for_inheritance> method. This |
43 | method has been removed. New method C<illegal_options_for_inheritance> |
44 | can now be used to prevent certain options from being changeable. |
45 | |
dede9732 |
46 | This also now only throws an error if the illegal option was actually |
47 | changed. If the superclass version of an attribute didn't specify this |
48 | option at all, the subclass version can still add it as an option. |
49 | |
50 | Example of overriding this in an attribute trait: |
7782e1da |
51 | |
dede9732 |
52 | package Bar::Meta::Attribute; |
53 | use Moose::Role; |
7782e1da |
54 | |
55 | has 'my_illegal_option' => ( |
56 | isa => 'CodeRef', |
57 | is => 'rw', |
58 | ); |
59 | |
60 | around illegal_options_for_inheritance => sub { |
61 | return (shift->(@_), qw/my_illegal_option/); |
62 | }; |
63 | |
7dacb294 |
64 | =back |
65 | |
e462f6f3 |
66 | =head1 1.05 |
67 | |
a19ae3d7 |
68 | =over 4 |
69 | |
70 | =item L<Moose::Object/BUILD> methods are now called when calling C<new_object> |
71 | |
72 | Previously, C<BUILD> methods would only be called from C<Moose::Object::new>, |
73 | but now they are also called when constructing an object via |
74 | C<Moose::Meta::Class::new_object>. C<BUILD> methods are an inherent part of the |
75 | object construction process, and this should make C<< $meta->new_object >> |
76 | actually usable without forcing people to use C<< $meta->name->new >>. |
77 | |
2fee26f1 |
78 | =item C<no Moose>, C<no Moose::Role>, and C<no Moose::Exporter> now unimport strict and warnings |
79 | |
80 | In the interest of having C<no Moose> clean up everything that C<use Moose> |
81 | does in the calling scope, C<no Moose> (as well as all other |
82 | L<Moose::Exporter>-using modules) now unimports strict and warnings. |
83 | |
f46a74bf |
84 | =item Metaclass compatibility checking and fixing should be much more robust |
85 | |
86 | The L<metaclass compatibility|Moose/METACLASS COMPATIBILITY AND MOOSE> checking |
87 | and fixing algorithms have been completely rewritten, in both Class::MOP and |
88 | Moose. This should resolve many confusing errors when dealing with non-Moose |
89 | inheritance and with custom metaclasses for things like attributes, |
918b5cef |
90 | constructors, etc. For correct code, the only thing that should require a |
91 | change is that custom error metaclasses must now inherit from |
92 | L<Moose::Error::Default>. |
f46a74bf |
93 | |
a19ae3d7 |
94 | =back |
95 | |
8ff79890 |
96 | =head1 1.02 |
97 | |
98 | =over 4 |
99 | |
100 | =item Moose::Meta::TypeConstraint::Class is_subtype_of behavior |
101 | |
102 | Earlier versions of L<is_subtype_of|Moose::Meta::TypeConstraint::Class/is_subtype_of> |
103 | would incorrectly return true when called with itself, its own TC name or |
104 | its class name as an argument. (i.e. $foo_tc->is_subtype_of('Foo') == 1) This |
105 | behavior was a caused by C<isa> being checked before the class name. The old |
106 | behavior can be accessed with L<is_type_of|Moose::Meta::TypeConstraint::Class/is_type_of> |
107 | |
108 | =back |
109 | |
12885414 |
110 | =head1 1.00 |
111 | |
112 | =over 4 |
113 | |
114 | =item Moose::Meta::Attribute::Native::Trait::Code no longer creates reader methods by default |
115 | |
116 | Earlier versions of L<Moose::Meta::Attribute::Native::Trait::Code> created |
117 | read-only accessors for the attributes it's been applied to, even if you didn't |
118 | ask for it with C<< is => 'ro' >>. This incorrect behaviour has now been fixed. |
119 | |
120 | =back |
121 | |
775666aa |
122 | =head1 0.95 |
123 | |
124 | =over 4 |
125 | |
126 | =item Moose::Util add_method_modifier behavior |
127 | |
128 | add_method_modifier (and subsequently the sugar functions Moose::before, |
129 | Moose::after, and Moose::around) can now accept arrayrefs, with the same |
130 | behavior as lists. Types other than arrayref and regexp result in an error. |
131 | |
132 | =back |
133 | |
5b7b27e2 |
134 | =head1 0.93_01 and 0.94 |
135 | |
136 | =over 4 |
137 | |
f785aad8 |
138 | =item Moose::Util::MetaRole API has changed |
139 | |
140 | The C<apply_metaclass_roles> function is now called C<apply_metaroles>. The |
141 | way arguments are supplied has been changed to force you to distinguish |
142 | between metaroles applied to L<Moose::Meta::Class> (and helpers) versus |
143 | L<Moose::Meta::Role>. |
144 | |
145 | The old API still works, but will warn in a future release, and eventually be |
146 | removed. |
147 | |
148 | =item Moose::Meta::Role has real attributes |
149 | |
150 | The attributes returned by L<Moose::Meta::Role> are now instances of the |
151 | L<Moose::Meta::Role::Attribute> class, instead of bare hash references. |
152 | |
5b7b27e2 |
153 | =item "no Moose" now removes C<blessed> and C<confess> |
154 | |
155 | Moose is now smart enough to know exactly what it exported, even when it |
156 | re-exports functions from other packages. When you unimport Moose, it will |
157 | remove these functions from your namespace unless you I<also> imported them |
158 | directly from their respective packages. |
159 | |
160 | If you have a C<no Moose> in your code I<before> you call C<blessed> or |
161 | C<confess>, your code will break. You can either move the C<no Moose> call |
162 | later in your code, or explicitly import the relevant functions from the |
163 | packages that provide them. |
164 | |
165 | =item L<Moose::Exporter> is smarter about unimporting re-exports |
166 | |
167 | The change above comes from a general improvement to L<Moose::Exporter>. It |
168 | will now unimport any function it exports, even if that function is a |
169 | re-export from another package. |
170 | |
f427b505 |
171 | =item Attributes in roles can no longer override class attributes with "+foo" |
172 | |
173 | Previously, this worked more or less accidentally, because role attributes |
174 | weren't objects. This was never documented, but a few MooseX modules took |
175 | advantage of this. |
176 | |
177 | =item The composition_class_roles attribute in L<Moose::Meta::Role> is now a method |
178 | |
179 | This was done to make it possible for roles to alter the the list of |
180 | composition class roles by applying a method modifiers. Previously, this was |
181 | an attribute and MooseX modules override it. Since that no longer works, this |
182 | was made a method. |
183 | |
184 | This I<should> be an attribute, so this may switch back to being an attribute |
185 | in the future if we can figure out how to make this work. |
186 | |
5b7b27e2 |
187 | =back |
188 | |
c378a61a |
189 | =head1 0.93 |
190 | |
191 | =over 4 |
192 | |
193 | =item Calling $object->new() is no longer deprecated |
194 | |
76c89056 |
195 | We decided to undeprecate this. Now it just works. |
c378a61a |
196 | |
d99ec58b |
197 | =item Both C<get_method_map> and C<get_attribute_map> is deprecated |
fa6da135 |
198 | |
d99ec58b |
199 | These metaclass methods were never meant to be public, and they are both now |
200 | deprecated. The work around if you still need the functionality they provided |
201 | is to iterate over the list of names manually. |
fa6da135 |
202 | |
203 | my %fields = map { $_ => $meta->get_attribute($_) } $meta->get_attribute_list; |
204 | |
d99ec58b |
205 | This was actually a change in L<Class::MOP>, but this version of Moose |
206 | requires a version of L<Class::MOP> that includes said change. |
207 | |
c378a61a |
208 | =back |
209 | |
b98ef150 |
210 | =head1 0.90 |
871f82f8 |
211 | |
c985327a |
212 | =over 4 |
213 | |
93ef4ba1 |
214 | =item Added Native delegation for Code refs |
215 | |
216 | See L<Moose::Meta::Attribute::Native::Trait::Code> for details. |
217 | |
3f5ff7d0 |
218 | =item Calling $object->new() is deprecated |
219 | |
220 | Moose has long supported this, but it's never really been documented, and we |
221 | don't think this is a good practice. If you want to construct an object from |
222 | an existing object, you should provide some sort of alternate constructor like |
223 | C<< $object->clone >>. |
224 | |
225 | Calling C<< $object->new >> now issues a warning, and will be an error in a |
226 | future release. |
227 | |
19e60fdd |
228 | =item Moose no longer warns if you call C<make_immutable> for a class with mutable ancestors |
229 | |
230 | While in theory this is a good thing to warn about, we found so many |
231 | exceptions to this that doing this properly became quite problematic. |
232 | |
93ef4ba1 |
233 | =back |
234 | |
235 | =head1 Version 0.89_02 |
236 | |
237 | =over 4 |
4f0d4488 |
238 | |
871f82f8 |
239 | =item New Native delegation methods from L<List::Util> and L<List::MoreUtils> |
240 | |
241 | In particular, we now have C<reduce>, C<shuffle>, C<uniq>, and C<natatime>. |
242 | |
3023f1e4 |
243 | =item The Moose::Exporter with_caller feature is now deprecated |
244 | |
245 | Use C<with_meta> instead. The C<with_caller> option will start warning in a |
246 | future release. |
247 | |
9b9a5a07 |
248 | =item Moose now warns if you call C<make_immutable> for a class with mutable ancestors |
249 | |
250 | This is dangerous because modifying a class after a subclass has been |
90b20bd6 |
251 | immutabilized will lead to incorrect results in the subclass, due to inlining, |
9b9a5a07 |
252 | caching, etc. This occasionally happens accidentally, when a class loads one |
253 | of its subclasses in the middle of its class definition, so pointing out that |
254 | this may cause issues should be helpful. Metaclasses (classes that inherit |
255 | from L<Class::MOP::Object>) are currently exempt from this check, since at the |
90b20bd6 |
256 | moment we aren't very consistent about which metaclasses we immutabilize. |
9b9a5a07 |
257 | |
bce5d4a5 |
258 | =item C<enum> and C<duck_type> now take arrayrefs for all forms |
259 | |
260 | Previously, calling these functions with a list would take the first element of |
261 | the list as the type constraint name, and use the remainder as the enum values |
262 | or method names. This makes the interface inconsistent with the anon-type forms |
263 | of these functions (which must take an arrayref), and a free-form list where |
264 | the first value is sometimes special is hard to validate (and harder to give |
265 | reasonable error messages for). These functions have been changed to take |
266 | arrayrefs in all their forms - so, C<< enum 'My::Type' => [qw(foo bar)] >> is |
267 | now the preferred way to create an enum type constraint. The old syntax still |
268 | works for now, but it will hopefully be deprecated and removed in a future |
269 | release. |
270 | |
871f82f8 |
271 | =back |
272 | |
4ada9618 |
273 | =head1 Version 0.89_01 |
a3d98218 |
274 | |
af44c00c |
275 | L<Moose::Meta::Attribute::Native> has been moved into the Moose core from |
a3d98218 |
276 | L<MooseX::AttributeHelpers>. Major changes include: |
277 | |
ebaaa391 |
278 | =over 4 |
a3d98218 |
279 | |
280 | =item C<traits>, not C<metaclass> |
281 | |
93ced2bd |
282 | Method providers are only available via traits. |
a3d98218 |
283 | |
284 | =item C<handles>, not C<provides> or C<curries> |
285 | |
93ced2bd |
286 | The C<provides> syntax was like core Moose C<< handles => HASHREF >> |
287 | syntax, but with the keys and values reversed. This was confusing, |
288 | and AttributeHelpers now uses C<< handles => HASHREF >> in a way that |
289 | should be intuitive to anyone already familiar with how it is used for |
290 | other attributes. |
a3d98218 |
291 | |
93ced2bd |
292 | The C<curries> functionality provided by AttributeHelpers has been |
293 | generalized to apply to all cases of C<< handles => HASHREF >>, though |
294 | not every piece of functionality has been ported (currying with a |
295 | CODEREF is not supported). |
a3d98218 |
296 | |
1853a27e |
297 | =item C<empty> is now C<is_empty>, and means empty, not non-empty |
af44c00c |
298 | |
299 | Previously, the C<empty> method provided by Arrays and Hashes returned true if |
300 | the attribute was B<not> empty (no elements). Now it returns true if the |
1853a27e |
301 | attribute B<is> empty. It was also renamed to C<is_empty>, to reflect this. |
af44c00c |
302 | |
9a14bd29 |
303 | =item C<find> was renamed to C<first>, and C<first> and C<last> were removed |
28b96142 |
304 | |
305 | L<List::Util> refers to the functionality that we used to provide under C<find> |
306 | as L<first|List::Util/first>, so that will likely be more familiar (and will |
9a14bd29 |
307 | fit in better if we decide to add more List::Util functions). C<first> and |
308 | C<last> were removed, since their functionality is easily duplicated with |
309 | curries of C<get>. |
28b96142 |
310 | |
311 | =item Helpers that take a coderef of one argument now use C<$_> |
312 | |
313 | Subroutines passed as the first argument to C<first>, C<map>, and C<grep> now |
314 | receive their argument in C<$_> rather than as a parameter to the subroutine. |
315 | Helpers that take a coderef of two or more arguments remain using the argument |
316 | list (there are technical limitations to using C<$a> and C<$b> like C<sort> |
317 | does). |
318 | |
af44c00c |
319 | See L<Moose::Meta::Attribute::Native> for the new documentation. |
a3d98218 |
320 | |
ebaaa391 |
321 | =back |
322 | |
85e2b15a |
323 | The C<alias> and C<excludes> role parameters have been renamed to C<-alias> |
324 | and C<-excludes>. The old names still work, but new code should use the new |
325 | names, and eventually the old ones will be deprecated and removed. |
326 | |
4ada9618 |
327 | =head1 Version 0.89 |
328 | |
8a8856de |
329 | C<< use Moose -metaclass => 'Foo' >> now does alias resolution, just like |
330 | C<-traits> (and the C<metaclass> and C<traits> options to C<has>). |
331 | |
27f2f43f |
332 | Added two functions C<meta_class_alias> and C<meta_attribute_alias> to |
333 | L<Moose::Util>, to simplify aliasing metaclasses and metatraits. This is |
334 | a wrapper around the old |
335 | |
336 | package Moose::Meta::Class::Custom::Trait::FooTrait; |
337 | sub register_implementation { 'My::Meta::Trait' } |
338 | |
339 | way of doing this. |
340 | |
4831e2de |
341 | =head1 Version 0.84 |
342 | |
9f52cce5 |
343 | When an attribute generates I<no> accessors, we now warn. This is to help |
344 | users who forget the C<is> option. If you really do not want any accessors, |
3de02fd8 |
345 | you can use C<< is => 'bare' >>. You can maintain back compat with older |
346 | versions of Moose by using something like: |
347 | |
348 | ($Moose::VERSION >= 0.84 ? is => 'bare' : ()) |
9f52cce5 |
349 | |
350 | When an accessor overwrites an existing method, we now warn. To work around |
351 | this warning (if you really must have this behavior), you can explicitly |
352 | remove the method before creating it as an accessor: |
353 | |
354 | sub foo {} |
355 | |
356 | __PACKAGE__->meta->remove_method('foo'); |
357 | |
358 | has foo => ( |
359 | is => 'ro', |
360 | ); |
361 | |
362 | When an unknown option is passed to C<has>, we now warn. You can silence |
363 | the warning by fixing your code. :) |
364 | |
4831e2de |
365 | The C<Role> type has been deprecated. On its own, it was useless, |
366 | since it just checked C<< $object->can('does') >>. If you were using |
367 | it as a parent type, just call C<role_type('Role::Name')> to create an |
368 | appropriate type instead. |
369 | |
7d6b451f |
370 | =head1 Version 0.78 |
371 | |
372 | C<use Moose::Exporter;> now imports C<strict> and C<warnings> into packages |
373 | that use it. |
374 | |
c3fdacda |
375 | =head1 Version 0.77 |
376 | |
377 | C<DEMOLISHALL> and C<DEMOLISH> now receive an argument indicating whether or |
378 | not we are in global destruction. |
379 | |
00c61603 |
380 | =head1 Version 0.76 |
381 | |
9f0b3b64 |
382 | Type constraints no longer run coercions for a value that already matches the |
383 | constraint. This may affect some (arguably buggy) edge case coercions that |
384 | rely on side effects in the C<via> clause. |
385 | |
f869fc4a |
386 | =head1 Version 0.75 |
387 | |
388 | L<Moose::Exporter> now accepts the C<-metaclass> option for easily |
389 | overriding the metaclass (without L<metaclass>). This works for classes |
390 | and roles. |
391 | |
39ab7714 |
392 | =head1 Version 0.74 |
393 | |
85cf0647 |
394 | Added a C<duck_type> sugar function to L<Moose::Util::TypeConstraints> |
395 | to make integration with non-Moose classes easier. It simply checks if |
396 | C<< $obj->can() >> a list of methods. |
39ab7714 |
397 | |
612fd754 |
398 | A number of methods (mostly inherited from L<Class::MOP>) have been |
399 | renamed with a leading underscore to indicate their internal-ness. The |
400 | old method names will still work for a while, but will warn that the |
401 | method has been renamed. In a few cases, the method will be removed |
402 | entirely in the future. This may affect MooseX authors who were using |
403 | these methods. |
404 | |
600f7f85 |
405 | =head1 Version 0.73 |
406 | |
0f13f53c |
407 | Calling C<subtype> with a name as the only argument now throws an |
600f7f85 |
408 | exception. If you want an anonymous subtype do: |
409 | |
410 | my $subtype = subtype as 'Foo'; |
411 | |
0f13f53c |
412 | This is related to the changes in version 0.71_01. |
600f7f85 |
413 | |
501db4e6 |
414 | The C<is_needed> method in L<Moose::Meta::Method::Destructor> is now |
415 | only usable as a class method. Previously, it worked as a class or |
416 | object method, with a different internal implementation for each |
417 | version. |
418 | |
419 | The internals of making a class immutable changed a lot in Class::MOP |
420 | 0.78_02, and Moose's internals have changed along with it. The |
421 | external C<< $metaclass->make_immutable >> method still works the same |
422 | way. |
423 | |
600f7f85 |
424 | =head1 Version 0.72 |
425 | |
0f13f53c |
426 | A mutable class accepted C<< Foo->new(undef) >> without complaint, |
427 | while an immutable class would blow up with an unhelpful error. Now, |
428 | in both cases we throw a helpful error instead. |
600f7f85 |
429 | |
0f13f53c |
430 | This "feature" was originally added to allow for cases such as this: |
600f7f85 |
431 | |
432 | my $args; |
0f13f53c |
433 | |
434 | if ( something() ) { |
435 | $args = {...}; |
600f7f85 |
436 | } |
0f13f53c |
437 | |
600f7f85 |
438 | return My::Class->new($args); |
439 | |
0f13f53c |
440 | But we decided this is a bad idea and a little too magical, because it |
441 | can easily mask real errors. |
600f7f85 |
442 | |
443 | =head1 Version 0.71_01 |
444 | |
0f13f53c |
445 | Calling C<type> or C<subtype> without the sugar helpers (C<as>, |
446 | C<where>, C<message>) is now deprecated. |
447 | |
448 | As a side effect, this meant we ended up using Perl prototypes on |
449 | C<as>, and code like this will no longer work: |
600f7f85 |
450 | |
451 | use Moose::Util::TypeConstraints; |
452 | use Declare::Constraints::Simple -All; |
0f13f53c |
453 | |
454 | subtype 'ArrayOfInts' |
600f7f85 |
455 | => as 'ArrayRef' |
456 | => IsArrayRef(IsInt); |
457 | |
458 | Instead it must be changed to this: |
459 | |
0f13f53c |
460 | subtype( |
461 | 'ArrayOfInts' => { |
462 | as => 'ArrayRef', |
463 | where => IsArrayRef(IsInt) |
464 | } |
600f7f85 |
465 | ); |
466 | |
0f13f53c |
467 | If you want to maintain backwards compat with older versions of Moose, |
468 | you must explicitly test Moose's C<VERSION>: |
600f7f85 |
469 | |
0f13f53c |
470 | if ( Moose->VERSION < 0.71_01 ) { |
471 | subtype 'ArrayOfInts' |
600f7f85 |
472 | => as 'ArrayRef' |
473 | => IsArrayRef(IsInt); |
474 | } |
475 | else { |
0f13f53c |
476 | subtype( |
477 | 'ArrayOfInts' => { |
478 | as => 'ArrayRef', |
479 | where => IsArrayRef(IsInt) |
480 | } |
600f7f85 |
481 | ); |
482 | } |
483 | |
484 | =head1 Version 0.70 |
485 | |
0f13f53c |
486 | We no longer pass the meta-attribute object as a final argument to |
487 | triggers. This actually changed for inlined code a while back, but the |
488 | non-inlined version and the docs were still out of date. |
489 | |
490 | If by some chance you actually used this feature, the workaround is |
491 | simple. You fetch the attribute object from out of the C<$self> |
492 | that is passed as the first argument to trigger, like so: |
493 | |
494 | has 'foo' => ( |
495 | is => 'ro', |
496 | isa => 'Any', |
497 | trigger => sub { |
498 | my ( $self, $value ) = @_; |
499 | my $attr = $self->meta->find_attribute_by_name('foo'); |
500 | |
501 | # ... |
502 | } |
503 | ); |
600f7f85 |
504 | |
505 | =head1 Version 0.66 |
506 | |
0f13f53c |
507 | If you created a subtype and passed a parent that Moose didn't know |
508 | about, it simply ignored the parent. Now it automatically creates the |
509 | parent as a class type. This may not be what you want, but is less |
510 | broken than before. |
600f7f85 |
511 | |
0f13f53c |
512 | You could declare a name with subtype such as "Foo!Bar". Moose would |
513 | accept this allowed, but if you used it in a parameterized type such |
514 | as "ArrayRef[Foo!Bar]" it wouldn't work. We now do some vetting on |
515 | names created via the sugar functions, so that they can only contain |
516 | alphanumerics, ":", and ".". |
600f7f85 |
517 | |
518 | =head1 Version 0.65 |
519 | |
520 | Methods created via an attribute can now fulfill a C<requires> |
0f13f53c |
521 | declaration for a role. Honestly we don't know why Stevan didn't make |
522 | this work originally, he was just insane or something. |
600f7f85 |
523 | |
0f13f53c |
524 | Stack traces from inlined code will now report the line and file as |
525 | being in your class, as opposed to in Moose guts. |
600f7f85 |
526 | |
527 | =head1 Version 0.62_02 |
528 | |
0f13f53c |
529 | When a class does not provide all of a role's required methods, the |
530 | error thrown now mentions all of the missing methods, as opposed to |
531 | just the first missing method. |
600f7f85 |
532 | |
0f13f53c |
533 | Moose will no longer inline a constructor for your class unless it |
5e26e3f2 |
534 | inherits its constructor from Moose::Object, and will warn when it |
535 | doesn't inline. If you want to force inlining anyway, pass |
b84f64da |
536 | C<< replace_constructor => 1 >> to C<make_immutable>. |
0f13f53c |
537 | |
538 | If you want to get rid of the warning, pass C<< inline_constructor => |
fbf7ba85 |
539 | 0 >>. |
600f7f85 |
540 | |
541 | =head1 Version 0.62 |
542 | |
0f13f53c |
543 | Removed the (deprecated) C<make_immutable> keyword. |
600f7f85 |
544 | |
545 | Removing an attribute from a class now also removes delegation |
0f13f53c |
546 | (C<handles>) methods installed for that attribute. This is correct |
600f7f85 |
547 | behavior, but if you were wrongly relying on it you might get bit. |
548 | |
549 | =head1 Version 0.58 |
550 | |
0f13f53c |
551 | Roles now add methods by calling C<add_method>, not |
552 | C<alias_method>. They make sure to always provide a method object, |
553 | which will be cloned internally. This means that it is now possible to |
554 | track the source of a method provided by a role, and even follow its |
555 | history through intermediate roles. This means that methods added by |
556 | a role now show up when looking at a class's method list/map. |
557 | |
558 | Parameter and Union args are now sorted, this makes Int|Str the same |
559 | constraint as Str|Int. Also, incoming type constraint strings are |
560 | normalized to remove all whitespace differences. This is mostly for |
561 | internals and should not affect outside code. |
562 | |
563 | L<Moose::Exporter> will no longer remove a subroutine that the |
564 | exporting package re-exports. Moose re-exports the Carp::confess |
565 | function, among others. The reasoning is that we cannot know whether |
566 | you have also explicitly imported those functions for your own use, so |
567 | we err on the safe side and always keep them. |
600f7f85 |
568 | |
569 | =head1 Version 0.56 |
570 | |
0f13f53c |
571 | C<Moose::init_meta> should now be called as a method. |
600f7f85 |
572 | |
0f13f53c |
573 | New modules for extension writers, L<Moose::Exporter> and |
574 | L<Moose::Util::MetaRole>. |
600f7f85 |
575 | |
576 | =head1 Version 0.55_01 |
577 | |
578 | Implemented metaclass traits (and wrote a recipe for it): |
579 | |
580 | use Moose -traits => 'Foo' |
581 | |
582 | This should make writing small Moose extensions a little |
583 | easier. |
584 | |
585 | =head1 Version 0.55 |
586 | |
587 | Fixed C<coerce> to accept anon types just like C<subtype> can. |
588 | So that you can do: |
589 | |
590 | coerce $some_anon_type => from 'Str' => via { ... }; |
591 | |
592 | =head1 Version 0.51 |
593 | |
52da380a |
594 | Added C<BUILDARGS>, a new step in C<< Moose::Object->new() >>. |
600f7f85 |
595 | |
596 | =head1 Version 0.49 |
597 | |
0f13f53c |
598 | Fixed how the C<< is => (ro|rw) >> works with custom defined |
599 | C<reader>, C<writer> and C<accessor> options. See the below table for |
600f7f85 |
600 | details: |
601 | |
602 | is => ro, writer => _foo # turns into (reader => foo, writer => _foo) |
603 | is => rw, writer => _foo # turns into (reader => foo, writer => _foo) |
604 | is => rw, accessor => _foo # turns into (accessor => _foo) |
605 | is => ro, accessor => _foo # error, accesor is rw |
606 | |
607 | =head1 Version 0.45 |
608 | |
0f13f53c |
609 | The C<before/around/after> method modifiers now support regexp |
610 | matching of method names. NOTE: this only works for classes, it is |
611 | currently not supported in roles, but, ... patches welcome. |
600f7f85 |
612 | |
0f13f53c |
613 | The C<has> keyword for roles now accepts the same array ref form that |
614 | L<Moose>.pm does for classes. |
600f7f85 |
615 | |
0f13f53c |
616 | A trigger on a read-only attribute is no longer an error, as it's |
617 | useful to trigger off of the constructor. |
600f7f85 |
618 | |
0f13f53c |
619 | Subtypes of parameterizable types now are parameterizable types |
620 | themselves. |
600f7f85 |
621 | |
622 | =head1 Version 0.44 |
623 | |
0f13f53c |
624 | Fixed issue where C<DEMOLISHALL> was eating the value in C<$@>, and so |
625 | not working correctly. It still kind of eats them, but so does vanilla |
626 | perl. |
600f7f85 |
627 | |
628 | =head1 Version 0.41 |
629 | |
0f13f53c |
630 | Inherited attributes may now be extended without restriction on the |
600f7f85 |
631 | type ('isa', 'does'). |
632 | |
0f13f53c |
633 | The entire set of Moose::Meta::TypeConstraint::* classes were |
634 | refactored in this release. If you were relying on their internals you |
635 | should test your code carefully. |
600f7f85 |
636 | |
637 | =head1 Version 0.40 |
638 | |
0f13f53c |
639 | Documenting the use of '+name' with attributes that come from recently |
640 | composed roles. It makes sense, people are using it, and so why not |
641 | just officially support it. |
600f7f85 |
642 | |
0f13f53c |
643 | The C<< Moose::Meta::Class->create >> method now supports roles. |
600f7f85 |
644 | |
86b96832 |
645 | It is now possible to make anonymous enum types by passing C<enum> an |
646 | array reference instead of the C<< enum $name => @values >>. |
600f7f85 |
647 | |
648 | =head1 Version 0.37 |
649 | |
0f13f53c |
650 | Added the C<make_immutable> keyword as a shortcut to calling |
651 | C<make_immutable> on the meta object. This eventually got removed! |
600f7f85 |
652 | |
0f13f53c |
653 | Made C<< init_arg => undef >> work in Moose. This means "do not accept |
600f7f85 |
654 | a constructor parameter for this attribute". |
655 | |
0f13f53c |
656 | Type errors now use the provided message. Prior to this release they |
657 | didn't. |
600f7f85 |
658 | |
659 | =head1 Version 0.34 |
660 | |
661 | Moose is now a postmodern object system :) |
662 | |
0f13f53c |
663 | The Role system was completely refactored. It is 100% backwards |
664 | compat, but the internals were totally changed. If you relied on the |
665 | internals then you are advised to test carefully. |
600f7f85 |
666 | |
667 | Added method exclusion and aliasing for Roles in this release. |
668 | |
0f13f53c |
669 | Added the L<Moose::Util::TypeConstraints::OptimizedConstraints> |
670 | module. |
600f7f85 |
671 | |
0f13f53c |
672 | Passing a list of values to an accessor (which is only expecting one |
673 | value) used to be silently ignored, now it throws an error. |
600f7f85 |
674 | |
675 | =head1 Version 0.26 |
676 | |
0f13f53c |
677 | Added parameterized types and did a pretty heavy refactoring of the |
678 | type constraint system. |
600f7f85 |
679 | |
0f13f53c |
680 | Better framework extendability and better support for "making your own |
681 | Moose". |
600f7f85 |
682 | |
683 | =head1 Version 0.25 or before |
684 | |
0f13f53c |
685 | Honestly, you shouldn't be using versions of Moose that are this old, |
686 | so many bug fixes and speed improvements have been made you would be |
687 | crazy to not upgrade. |
600f7f85 |
688 | |
0f13f53c |
689 | Also, I am tired of going through the Changelog so I am stopping here, |
690 | if anyone would like to continue this please feel free. |
600f7f85 |
691 | |
692 | =head1 AUTHOR |
693 | |
694 | Stevan Little E<lt>stevan@iinteractive.comE<gt> |
695 | |
696 | =head1 COPYRIGHT AND LICENSE |
697 | |
698 | Copyright 2009 by Infinity Interactive, Inc. |
699 | |
700 | L<http://www.iinteractive.com> |
701 | |
702 | This library is free software; you can redistribute it and/or modify |
703 | it under the same terms as Perl itself. |
704 | |
0f13f53c |
705 | =cut |