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 | |
39ab7714 |
19 | =head1 Version 0.74 |
20 | |
79dc173d |
21 | Internal code now calls C<< ->meta >> in fewer places. We'd like to |
22 | eventually stop calling C<< ->meta >> entirely so that users may rename |
23 | or exclude that method altogether. This work is not yet complete, but |
24 | the bulk of it, all the easy stuff, has been done. This release uses |
25 | C<Class::MOP::class_of> instead of C<< ->meta >>. |
26 | |
85cf0647 |
27 | Added a C<duck_type> sugar function to L<Moose::Util::TypeConstraints> |
28 | to make integration with non-Moose classes easier. It simply checks if |
29 | C<< $obj->can() >> a list of methods. |
39ab7714 |
30 | |
600f7f85 |
31 | =head1 Version 0.73 |
32 | |
0f13f53c |
33 | Calling C<subtype> with a name as the only argument now throws an |
600f7f85 |
34 | exception. If you want an anonymous subtype do: |
35 | |
36 | my $subtype = subtype as 'Foo'; |
37 | |
0f13f53c |
38 | This is related to the changes in version 0.71_01. |
600f7f85 |
39 | |
501db4e6 |
40 | The C<is_needed> method in L<Moose::Meta::Method::Destructor> is now |
41 | only usable as a class method. Previously, it worked as a class or |
42 | object method, with a different internal implementation for each |
43 | version. |
44 | |
45 | The internals of making a class immutable changed a lot in Class::MOP |
46 | 0.78_02, and Moose's internals have changed along with it. The |
47 | external C<< $metaclass->make_immutable >> method still works the same |
48 | way. |
49 | |
600f7f85 |
50 | =head1 Version 0.72 |
51 | |
0f13f53c |
52 | A mutable class accepted C<< Foo->new(undef) >> without complaint, |
53 | while an immutable class would blow up with an unhelpful error. Now, |
54 | in both cases we throw a helpful error instead. |
600f7f85 |
55 | |
0f13f53c |
56 | This "feature" was originally added to allow for cases such as this: |
600f7f85 |
57 | |
58 | my $args; |
0f13f53c |
59 | |
60 | if ( something() ) { |
61 | $args = {...}; |
600f7f85 |
62 | } |
0f13f53c |
63 | |
600f7f85 |
64 | return My::Class->new($args); |
65 | |
0f13f53c |
66 | But we decided this is a bad idea and a little too magical, because it |
67 | can easily mask real errors. |
600f7f85 |
68 | |
69 | =head1 Version 0.71_01 |
70 | |
0f13f53c |
71 | Calling C<type> or C<subtype> without the sugar helpers (C<as>, |
72 | C<where>, C<message>) is now deprecated. |
73 | |
74 | As a side effect, this meant we ended up using Perl prototypes on |
75 | C<as>, and code like this will no longer work: |
600f7f85 |
76 | |
77 | use Moose::Util::TypeConstraints; |
78 | use Declare::Constraints::Simple -All; |
0f13f53c |
79 | |
80 | subtype 'ArrayOfInts' |
600f7f85 |
81 | => as 'ArrayRef' |
82 | => IsArrayRef(IsInt); |
83 | |
84 | Instead it must be changed to this: |
85 | |
0f13f53c |
86 | subtype( |
87 | 'ArrayOfInts' => { |
88 | as => 'ArrayRef', |
89 | where => IsArrayRef(IsInt) |
90 | } |
600f7f85 |
91 | ); |
92 | |
0f13f53c |
93 | If you want to maintain backwards compat with older versions of Moose, |
94 | you must explicitly test Moose's C<VERSION>: |
600f7f85 |
95 | |
0f13f53c |
96 | if ( Moose->VERSION < 0.71_01 ) { |
97 | subtype 'ArrayOfInts' |
600f7f85 |
98 | => as 'ArrayRef' |
99 | => IsArrayRef(IsInt); |
100 | } |
101 | else { |
0f13f53c |
102 | subtype( |
103 | 'ArrayOfInts' => { |
104 | as => 'ArrayRef', |
105 | where => IsArrayRef(IsInt) |
106 | } |
600f7f85 |
107 | ); |
108 | } |
109 | |
110 | =head1 Version 0.70 |
111 | |
0f13f53c |
112 | We no longer pass the meta-attribute object as a final argument to |
113 | triggers. This actually changed for inlined code a while back, but the |
114 | non-inlined version and the docs were still out of date. |
115 | |
116 | If by some chance you actually used this feature, the workaround is |
117 | simple. You fetch the attribute object from out of the C<$self> |
118 | that is passed as the first argument to trigger, like so: |
119 | |
120 | has 'foo' => ( |
121 | is => 'ro', |
122 | isa => 'Any', |
123 | trigger => sub { |
124 | my ( $self, $value ) = @_; |
125 | my $attr = $self->meta->find_attribute_by_name('foo'); |
126 | |
127 | # ... |
128 | } |
129 | ); |
600f7f85 |
130 | |
131 | =head1 Version 0.66 |
132 | |
0f13f53c |
133 | If you created a subtype and passed a parent that Moose didn't know |
134 | about, it simply ignored the parent. Now it automatically creates the |
135 | parent as a class type. This may not be what you want, but is less |
136 | broken than before. |
600f7f85 |
137 | |
0f13f53c |
138 | You could declare a name with subtype such as "Foo!Bar". Moose would |
139 | accept this allowed, but if you used it in a parameterized type such |
140 | as "ArrayRef[Foo!Bar]" it wouldn't work. We now do some vetting on |
141 | names created via the sugar functions, so that they can only contain |
142 | alphanumerics, ":", and ".". |
600f7f85 |
143 | |
144 | =head1 Version 0.65 |
145 | |
146 | Methods created via an attribute can now fulfill a C<requires> |
0f13f53c |
147 | declaration for a role. Honestly we don't know why Stevan didn't make |
148 | this work originally, he was just insane or something. |
600f7f85 |
149 | |
0f13f53c |
150 | Stack traces from inlined code will now report the line and file as |
151 | being in your class, as opposed to in Moose guts. |
600f7f85 |
152 | |
153 | =head1 Version 0.62_02 |
154 | |
0f13f53c |
155 | When a class does not provide all of a role's required methods, the |
156 | error thrown now mentions all of the missing methods, as opposed to |
157 | just the first missing method. |
600f7f85 |
158 | |
0f13f53c |
159 | Moose will no longer inline a constructor for your class unless it |
160 | inherits its constructor is inherited from Moose::Object, and will |
161 | warn when it doesn't inline. If you want to force inlining anyway, |
162 | pass C<< "replace_constructor => 1 >> to C<make_immutable>. |
163 | |
164 | If you want to get rid of the warning, pass C<< inline_constructor => |
165 | 1 >>. |
600f7f85 |
166 | |
167 | =head1 Version 0.62 |
168 | |
0f13f53c |
169 | Removed the (deprecated) C<make_immutable> keyword. |
600f7f85 |
170 | |
171 | Removing an attribute from a class now also removes delegation |
0f13f53c |
172 | (C<handles>) methods installed for that attribute. This is correct |
600f7f85 |
173 | behavior, but if you were wrongly relying on it you might get bit. |
174 | |
175 | =head1 Version 0.58 |
176 | |
0f13f53c |
177 | Roles now add methods by calling C<add_method>, not |
178 | C<alias_method>. They make sure to always provide a method object, |
179 | which will be cloned internally. This means that it is now possible to |
180 | track the source of a method provided by a role, and even follow its |
181 | history through intermediate roles. This means that methods added by |
182 | a role now show up when looking at a class's method list/map. |
183 | |
184 | Parameter and Union args are now sorted, this makes Int|Str the same |
185 | constraint as Str|Int. Also, incoming type constraint strings are |
186 | normalized to remove all whitespace differences. This is mostly for |
187 | internals and should not affect outside code. |
188 | |
189 | L<Moose::Exporter> will no longer remove a subroutine that the |
190 | exporting package re-exports. Moose re-exports the Carp::confess |
191 | function, among others. The reasoning is that we cannot know whether |
192 | you have also explicitly imported those functions for your own use, so |
193 | we err on the safe side and always keep them. |
600f7f85 |
194 | |
195 | =head1 Version 0.56 |
196 | |
0f13f53c |
197 | C<Moose::init_meta> should now be called as a method. |
600f7f85 |
198 | |
0f13f53c |
199 | New modules for extension writers, L<Moose::Exporter> and |
200 | L<Moose::Util::MetaRole>. |
600f7f85 |
201 | |
202 | =head1 Version 0.55_01 |
203 | |
204 | Implemented metaclass traits (and wrote a recipe for it): |
205 | |
206 | use Moose -traits => 'Foo' |
207 | |
208 | This should make writing small Moose extensions a little |
209 | easier. |
210 | |
211 | =head1 Version 0.55 |
212 | |
213 | Fixed C<coerce> to accept anon types just like C<subtype> can. |
214 | So that you can do: |
215 | |
216 | coerce $some_anon_type => from 'Str' => via { ... }; |
217 | |
218 | =head1 Version 0.51 |
219 | |
52da380a |
220 | Added C<BUILDARGS>, a new step in C<< Moose::Object->new() >>. |
600f7f85 |
221 | |
222 | =head1 Version 0.49 |
223 | |
0f13f53c |
224 | Fixed how the C<< is => (ro|rw) >> works with custom defined |
225 | C<reader>, C<writer> and C<accessor> options. See the below table for |
600f7f85 |
226 | details: |
227 | |
228 | is => ro, writer => _foo # turns into (reader => foo, writer => _foo) |
229 | is => rw, writer => _foo # turns into (reader => foo, writer => _foo) |
230 | is => rw, accessor => _foo # turns into (accessor => _foo) |
231 | is => ro, accessor => _foo # error, accesor is rw |
232 | |
233 | =head1 Version 0.45 |
234 | |
0f13f53c |
235 | The C<before/around/after> method modifiers now support regexp |
236 | matching of method names. NOTE: this only works for classes, it is |
237 | currently not supported in roles, but, ... patches welcome. |
600f7f85 |
238 | |
0f13f53c |
239 | The C<has> keyword for roles now accepts the same array ref form that |
240 | L<Moose>.pm does for classes. |
600f7f85 |
241 | |
0f13f53c |
242 | A trigger on a read-only attribute is no longer an error, as it's |
243 | useful to trigger off of the constructor. |
600f7f85 |
244 | |
0f13f53c |
245 | Subtypes of parameterizable types now are parameterizable types |
246 | themselves. |
600f7f85 |
247 | |
248 | =head1 Version 0.44 |
249 | |
0f13f53c |
250 | Fixed issue where C<DEMOLISHALL> was eating the value in C<$@>, and so |
251 | not working correctly. It still kind of eats them, but so does vanilla |
252 | perl. |
600f7f85 |
253 | |
254 | =head1 Version 0.41 |
255 | |
0f13f53c |
256 | Inherited attributes may now be extended without restriction on the |
600f7f85 |
257 | type ('isa', 'does'). |
258 | |
0f13f53c |
259 | The entire set of Moose::Meta::TypeConstraint::* classes were |
260 | refactored in this release. If you were relying on their internals you |
261 | should test your code carefully. |
600f7f85 |
262 | |
263 | =head1 Version 0.40 |
264 | |
0f13f53c |
265 | Documenting the use of '+name' with attributes that come from recently |
266 | composed roles. It makes sense, people are using it, and so why not |
267 | just officially support it. |
600f7f85 |
268 | |
0f13f53c |
269 | The C<< Moose::Meta::Class->create >> method now supports roles. |
600f7f85 |
270 | |
86b96832 |
271 | It is now possible to make anonymous enum types by passing C<enum> an |
272 | array reference instead of the C<< enum $name => @values >>. |
600f7f85 |
273 | |
274 | =head1 Version 0.37 |
275 | |
0f13f53c |
276 | Added the C<make_immutable> keyword as a shortcut to calling |
277 | C<make_immutable> on the meta object. This eventually got removed! |
600f7f85 |
278 | |
0f13f53c |
279 | Made C<< init_arg => undef >> work in Moose. This means "do not accept |
600f7f85 |
280 | a constructor parameter for this attribute". |
281 | |
0f13f53c |
282 | Type errors now use the provided message. Prior to this release they |
283 | didn't. |
600f7f85 |
284 | |
285 | =head1 Version 0.34 |
286 | |
287 | Moose is now a postmodern object system :) |
288 | |
0f13f53c |
289 | The Role system was completely refactored. It is 100% backwards |
290 | compat, but the internals were totally changed. If you relied on the |
291 | internals then you are advised to test carefully. |
600f7f85 |
292 | |
293 | Added method exclusion and aliasing for Roles in this release. |
294 | |
0f13f53c |
295 | Added the L<Moose::Util::TypeConstraints::OptimizedConstraints> |
296 | module. |
600f7f85 |
297 | |
0f13f53c |
298 | Passing a list of values to an accessor (which is only expecting one |
299 | value) used to be silently ignored, now it throws an error. |
600f7f85 |
300 | |
301 | =head1 Version 0.26 |
302 | |
0f13f53c |
303 | Added parameterized types and did a pretty heavy refactoring of the |
304 | type constraint system. |
600f7f85 |
305 | |
0f13f53c |
306 | Better framework extendability and better support for "making your own |
307 | Moose". |
600f7f85 |
308 | |
309 | =head1 Version 0.25 or before |
310 | |
0f13f53c |
311 | Honestly, you shouldn't be using versions of Moose that are this old, |
312 | so many bug fixes and speed improvements have been made you would be |
313 | crazy to not upgrade. |
600f7f85 |
314 | |
0f13f53c |
315 | Also, I am tired of going through the Changelog so I am stopping here, |
316 | if anyone would like to continue this please feel free. |
600f7f85 |
317 | |
318 | =head1 AUTHOR |
319 | |
320 | Stevan Little E<lt>stevan@iinteractive.comE<gt> |
321 | |
322 | =head1 COPYRIGHT AND LICENSE |
323 | |
324 | Copyright 2009 by Infinity Interactive, Inc. |
325 | |
326 | L<http://www.iinteractive.com> |
327 | |
328 | This library is free software; you can redistribute it and/or modify |
329 | it under the same terms as Perl itself. |
330 | |
0f13f53c |
331 | =cut |