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