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