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