fixed RT 27329
[gitmo/Class-MOP.git] / Changes
1 Revision history for Perl extension Class-MOP.
2
3 0.38
4     ~~ More documentation updates ~~
5     
6     * Class::MOP::Package
7       - we now deal with stub methods properly
8         - added tests for this
9       - fixed some tests failing on 5.9.5
10         
11     * Class::MOP::Attribute
12       - added get_read_method and get_write_method
13         thanks to groditi for this code, tests 
14         and docs.
15         - added tests and POD for this
16     
17     * Class::MOP::Class
18       - fixed RT issue #27329, clone object now 
19         handles undef values correctly.
20         - added tests for this
21
22 0.37 Sat. March 10, 2007
23     ~~ Many, many documentation updates ~~
24     
25     * Class::MOP
26       - added &load_class and &is_class_loaded 
27         - added tests and docs for these
28
29     * Class::MOP::Attribute
30       - default now checks the instance with defined to 
31         avoid setting off bool-overloads (found by Carl Franks)
32
33 0.37_002
34     * /t 
35       - bad name in a test, causing meaningless failuress. 
36         No other changes.
37
38 0.37_001
39     
40     ~~ GLOBAL CHANGES ~~
41     - All attribute names are now consistent and follow Perl 6 
42       style (prefixed with the sigil, and ! as the twigil for 
43       private attrs). This should not affect any code, unless 
44       you broke encapsulation, in which case, it is your problem 
45       anyway.
46       
47     !! Class::MOP::Class::Immutable has been removed
48     
49     * Class::MOP::Method::Constructor
50       - this has been moved out of Class::MOP::Class::Immutable 
51         and is a proper subclass of Class::MOP::Method now.
52         
53     * Class::MOP::Class
54       - this module now uses Class::MOP::Immutable for the 
55         immutable transformation instead of 
56         Class::MOP::Class::Immutable.
57         
58     + Class::MOP::Immutable 
59       - this module now controls the transformation from a mutable 
60         to an immutable version of the class. Docs for this will 
61         be coming eventually.
62     
63
64 0.36 Sun. Nov. 5, 2006
65     * Class::MOP::Class
66       - added a few 'no warnings' lines to keep annoying 
67         (and meaningless) warnings from chirping during 
68         global destruction.
69           
70     * Class::MOP
71       - some more bootstrapping is now done on the new 
72         classes
73     
74     * Class::MOP::Class::Immutable
75       *** API CHANGE ***    
76       - constructor generation is now handled by 
77         the Class::MOP::Method::Constructor class
78      
79     * Class::MOP::Method::Constructor
80       - created this to handle constructor generation 
81         in Class::MOP::Class::Immutable
82     
83     * Class::MOP::Attribute
84       *** API CHANGE ***    
85       - attributes now delegate to the 
86         Class::MOP::Method::Accessor to generate 
87         accessors
88     
89     * Class::MOP::Method::Accessor
90       - all accessor generation functions from 
91         Class::MOP::Attribute have been moved here
92
93 0.35 Sat. Sept. 30, 2006
94
95     * scripts/class_browser.pl
96       - initial prototype of a class browser, more 
97         on this to come. Comments and patches are 
98         very much welcome.
99
100     * Class::MOP
101       - All Class::MOP::* accessors are no longer 
102         re-generated in the bootstrap, instead 
103         they are aliased from the originals
104         - fixed tests to reflect
105       - added Class::MOP::Method (and its subclasses) 
106         to the bootstrap
107         - adjusted tests for this
108       - added the Class::MOP::Instance attributes
109         to the bootstrap
110     
111     * Class::MOP::Method
112       *** API CHANGE ***
113       - methods are no longer blessed CODE refs
114         but are actual objects which can be CODE-ified
115         - adjusted tests to compensate
116         - adjusted docs for this        
117
118     * Class::MOP::Class
119       - changed how methods are dealt with to 
120         encapsulate most of the work into the 
121         &get_method_map method
122       - made several adjustments for the change
123         in Class::MOP::Method
124       - &add_attribute now checks if you are adding 
125         a duplicate name, and properly removes the 
126         old one before installing the new one
127         - added tests for this
128         - adjusted docs for this
129     
130     * Class::MOP::Class::Immutable
131       - added caching of &get_method_map
132       - fixed issue with &get_package_symbol
133       - cleaned up the methods that die (patch by David Wheeler)
134     
135     * Class::MOP::Package
136       - added filtering capabilities to 
137         &list_all_package_symbols
138
139 0.34 Sat. Aug. 26, 2006
140     * Class::MOP::Class
141       - added the %:methods attribute, which like
142         the $:version and such just actually goes 
143         to the symbol table to get it's stuff. 
144         However, it makes the MOP more complete.
145      ** API CHANGE **
146       - The &create method now requires that all 
147         but the package name now is passed in as 
148         named parameters. See docs for more info.
149         - updated docs and tests for this
150         
151     * Class::MOP::Object
152       - added &dump method to easily Data::Dumper 
153         an object
154         
155     * Class::MOP
156       - cleaned up the initialization of attributes 
157         which do not store things in the instance 
158       - added the %:methods attribute definition to
159         the bootstrap
160         
161     ~ lots of misc. test cleanup
162
163 0.33 Sat. Aug. 19, 2006
164     * Class::MOP::Class
165       - moved the metaclass cache out of here 
166         and it is now in Class::MOP itself.
167         
168     * Class::MOP
169       - moved all the metaclass cache stuff here
170         - fixed all tests for this
171
172     * Class::MOP::Attribute
173       - reference values (other than CODE refs) 
174         are no longer allowed for defaults
175         - added tests for this
176     
177     * Class::MOP::Package
178       - fixed an issue with perl 5.8.1 and how it deals 
179         with symbol tables. The namespace hash is now 
180         always reloaded from the symbol table. 
181
182     ~ lots of misc. documentation cleanup
183
184 0.32 Sat. Aug. 12, 2006
185     + added Class::MOP::Object so that the 
186       metamodel is more complete (and closer
187       to what Perl 6 will probably be).
188
189     * Class::MOP::Package
190       - refactored entire class, this is now 
191         the primary gateway between the metaclass
192         and the Perl 5 symbol table
193         - added many tests for this
194       - this class is now a subclass of 
195         Class::MOP::Object
196         - added some tests to reflect this
197         
198     * Class::MOP::Class
199       - refactored all symbol table access to 
200         use Class::MOP::Package methods instead
201         
202     * Class::MOP::Module
203       - adding the $:version attribute in the bootstrap
204         so that Module has a version as an attribute
205         - see comment in Class::MOP for details
206       - added the $:authority attribute to this module 
207         as well as an &identifier method, to bring us 
208         ever closer to Perl 6 goodness 
209         - I have added $AUTHORITY to all the modules 
210         - added tests for this
211       
212     * Class::MOP::Instance
213       - added &deinitialize_slot for removing slots 
214         from an instance
215         - added tests for this      
216       
217     * Class::MOP::Attribute 
218       - added support for &deinitialize_slot for removing
219         slots from an instance
220         - added tests for this
221
222 0.31 Sat. July 15, 2006
223
224     * Class::MOP::Class
225       - added &find_method_by_name to locate a method
226         anywhere within the class hierarchy   
227         
228     * Class::MOP::Attribute
229       - added &set_value and &get_value for getting 
230         the value of the attribute for a particular 
231         instance.
232
233 0.30 Wed. July 5, 2006
234     ---------------------------------------
235     This is the first version of Class::MOP 
236     to introduce the immutable features which
237     will be used for optimizating the MOP. 
238     This support should still be considered
239     experimental, but moving towards stability.
240     ---------------------------------------
241     
242     * Created Class::MOP::Class::Immutable  
243     
244     * Created the Class::MOP::Package and 
245       Class::MOP::Module classes to more 
246       closely conform to Perl 6's meta-model
247
248     * Class::MOP::Class
249       - now inherits from Class::MOP::Module
250       - several methods moved to ::Module and 
251         ::Package and now inherited
252         - added tests for this
253       
254     * Class::MOP::Instance
255       - added an is_inlinable method to allow other 
256         classes to check before they attempt to optimize.
257       - added an inline_create_instance to inline 
258         instance creation (of course) 
259         
260     ** API CHANGE **
261       - the Class::MOP::Class::*_package_variable 
262         methods are all now methods of Class::MOP::Package
263         and called *_package_symbol instead. This is 
264         because they are now more general purpose symbol 
265         table manipulation methods.        
266
267 0.29_02 Thurs. June 22, 2006
268     ++ DEVELOPER RELEASE ++
269     * Class::MOP::Class
270       - small change in &create so that it behaves 
271         properly when inherited
272       - small fix to &clone_instance
273
274 0.29_01 Fri. May 12, 2006
275     ++ DEVELOPER RELEASE ++
276       - This release works in combination with 
277         Moose 0.09_01, it is a developer release
278         because it introduces a new instance 
279         sub-protocol and has not yet been 
280         optimized.  
281
282     * Class::MOP::Class
283       - anon-classes are now properly garbage collected
284         - added tests for this 
285       - improved method modifier wrapping 
286
287     * Class::MOP::Instance
288       - added new instance protocol
289         - added tests for this
290       - changed all relevant modules and examples
291         - Class::MOP::Class
292         - Class::MOP::Attribute
293         - examples/*
294
295     * metaclass
296       - you no longer need to specify the metaclass
297         itself, if it is not there, Class::MOP::Class
298         is just assumed
299         - updated tests for this
300
301     * examples/
302       - added ArrayBasedStorage example to show 
303         instance storage using ARRAY refs instead of
304         HASH refs. 
305         - added tests for this
306       - InsideOutClass is totally revised using the 
307         new instance protocol
308         - added more tests for this
309
310 0.26 Mon. April 24, 2006
311     * Class::MOP::Class
312       - added find_attribute_by_name method
313         - added tests and docs for this
314       - some small optimizations
315
316     * Class::MOP::Attribute
317       - some small optimizations
318
319 0.25 Thurs. April 20, 2006
320     * Class::MOP::Class
321       - added create_anon_class for creating anonymous classes
322         - added tests for this
323       - added get_all_metaclasses, get_all_metaclass_names
324         and get_all_metaclass_instances method to allow
325         access to all the cached metaclass objects.
326       - attribute slot initialization is now the responsibility
327         of the attribute itself, and construct_instance now 
328         delegates appropriately
329         
330     * Class::MOP::Attribute
331       - attribute slot initialization is now the responsibility
332         of the attribute itself, so we added a method for it
333         called initialize_instance_slot
334     
335     * examples/
336       - adjusted all the examples to use the new attribute 
337         initialize_instance_slot method 
338
339 0.24 Tues. April 11, 2006
340     * Class::MOP::Class
341       - cleaned up how the before/after/around method 
342         modifiers get named with Sub::Name
343
344 0.23 Thurs. March 30, 2006
345         * Class::MOP::Class
346           - fixed the way attribute defaults are handled 
347             during instance construction (bug found by chansen)
348             
349         * Class::MOP::Attribute
350           - read-only accessors ('reader') will now die if 
351             passed more than one argument (attempting to write
352             to them basically)
353               - added tests for this
354               - adjusted all /example files to comply 
355
356 0.22 Mon. March 20, 2006
357     * Class::MOP::Class
358       - localized $@ in the *_package_variable functions
359         because otherwise, it does ugly things in Moose.
360           - added test case for this
361
362 0.21 Wed. March 15, 2006
363     * Class::MOP::Class
364       - fixed issue where metaclasses are reaped from 
365         our cache in global destruction, and so are not
366         available in DESTORY calls
367
368 0.20 Thurs. March 2, 2006
369     - removed the dependency for Clone since 
370       we no longer to deep-cloning by default.
371     
372     * Class::MOP::Method
373       - added &package_name, &name and 
374         &fully_qualified_name methods, some of 
375         which were formerly private subs in 
376         Class::MOP::Class
377       
378     * Class::MOP::Method::Wrapped
379       - allows for a method to be wrapped with 
380         before, after and around modifiers 
381           - added tests and docs for this feature
382
383     * Class::MOP::Class
384       - improved &get_package_symbol
385           - &version and &superclasses now use it
386       - methods are now blessed into Class::MOP::Method
387         whenever possible
388       - added methods to install CLOS-style method modifiers 
389          - &add_before_method_modifier
390          - &add_after_method_modifier         
391          - &add_around_method_modifier
392              - added tests and docs for these
393       - added &find_next_method_by_name which finds the 
394         equivalent of SUPER::method_name
395
396 0.12 Thurs. Feb 23, 2006
397     - reduced the dependency on B, no need to always 
398       have the latest
399
400     * examples/
401       - added docs to the C3 method dispatch order test
402       - fixed missing Algorithm::C3 dependency by making 
403         the test skip if it is not installed
404
405 0.11 Mon Feb. 20, 2006
406     * examples/
407       - added example of changing method dispatch order to C3
408       
409     * Class::MOP::Class
410       - changed how clone_instance behaves, it now only does a
411         shallow clone (see docs for more details)
412         - added docs and tests
413
414 0.10 Tues Feb. 14, 2006
415     ** This release was mostly about writing more tests and 
416        cleaning out old and dusty code, the MOP should now 
417        be considered "ready to use".
418
419     - adding more tests to get coverage up a little higher,
420       mostly testing errors and edge cases.
421       - test coverage is now at 99%
422       
423     * Class::MOP
424       - no longer optionally exports to UNIVERSAL::meta or
425         creates a custom metaclass generator, use the 
426         metaclass pragma instead.
427
428     * Class::MOP::Class  
429       - fixed a number of minor issues which came up in the 
430         error/edge-case tests
431         
432     * Class::MOP::Attribute 
433       - fixed a number of minor issues which came up in the 
434         error/edge-case tests        
435      
436     * examples/
437       - fixing the AttributesWithHistory example, it was broken.
438
439 0.06 Thurs Feb. 9, 2006
440     * metaclass
441       - adding new metaclass pragma to make setting up the 
442         metaclass a little more straightforward
443         
444     * Class::MOP
445       - clean up bootstrapping to include more complete 
446         attribute definitions for Class::MOP::Class and 
447         Class::MOP::Attribute (accessors, readers, writers, 
448         etc.) ... it is redundant, but is useful meta-info
449         to have around.
450
451     * Class::MOP::Class
452       - fixing minor meta-circularity issue with &meta, it 
453         is now more useful for subclasses
454       - added &get_attribute_map as an accessor for the 
455         hash of attribute meta objects
456       - &compute_all_applicable_attributes now just returns
457         the attribute meta-object, rather than the HASH ref
458         since all the same info can be gotten from the 
459         attribute meta-object itself
460           - updated docs & tests to reflect
461       - added &clone_instance method which does a deep clone
462         of the instance structure created by &construct_instance
463           - added docs & tests for this
464           - added Clone as a dependency
465       - added &new_object and &clone_object convience methods to
466         return blessed new or cloned instances
467           - they handle Class::MOP::Class singletons correctly too
468           - added docs & tests for this
469       - cleaned up the &constuct_class_instance so that it behaves
470         more like &construct_instance (and managed the singletons too)
471       - added the &check_metaclass_compatibility method to make sure
472         that metaclasses are upward and downward compatible.
473           - added tests and docs for this
474           
475     * examples/
476       - adjusting code to use the &Class::MOP::Class::meta
477         fix detailed above
478       - adjusting code to use the metaclass pragma
479       
480 0.05 Sat Feb. 4, 2006
481     * Class::MOP::Class
482       - added the &attribute_metaclass and &method_metaclass
483         attributes which contain a metaclass name to use for 
484         attributes/methods respectively
485     
486     * Class::MOP
487       - bootstrap additional attributes for Class::MOP::Class 
488         
489     * examples/
490       - adjusted the example code and tests to use the new
491         &attribute_metaclass feature of Class::MOP::Class
492       - added new example:
493         - LazyClass
494
495 0.04 Fri Feb. 3, 2006
496     * Class::MOP::Class
497       - some documentation suggestions from #perl6
498     
499     * Class::MOP::Attribute
500       - improved error messages    
501     
502     * examples/
503       - added new examples:
504         - AttributesWithHistory
505         - ClassEncapsultedAttributes
506
507 0.03 Fri Feb. 3, 2006
508     - converted to Module::Build instead of EU::MM
509     
510     * Class::MOP::Attribute
511       - refactored method generation code
512       - attributes are now associated with class directly
513     
514     * examples/
515       - refactored the InsideOut example to take advantage 
516         of the Class::MOP::Attribute refactoring
517       - changed example files to .pod files and hide thier
518         package names from PAUSE (I don't want to own these
519         namespaces really, they are just examples)
520
521 0.02 Thurs Feb. 2, 2006
522     - moving examples from t/lib/* to examples/*
523         - adding POD documentation to the examples
524
525 0.01 Thurs Feb. 2, 2006
526     - Initial release