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