WDDX History
1.02 - Mon Dec 1 21:42:29 CST 2003
Taken over by Andy Lester
[FIXES]
WDDX needed a good update and modernization to let it run under perl
5.8.0 and higher.
* Fixed up some dependencies in Makefile.PL
* Cleaned up warnings on things like ambiguous calls to keys().
* Added more tests.
* Removed automatic version number generation
Version 1.01 (7/29/00)
Bug fix.
* Fixed a bug that wouldn't allow undef values in WDDX::Recordsets;
should properly be encoded as a WDDX::Null now. However, this is a
kludge. WDDX::Recordset should probably be rewritten to allow a field
to have differing data types (WDDX::Null is the only exception
currently)... but this will break compatibility.
* Perl 5.60 changed how the map function works. Now scalars in numeric
form are converted to string form (seems like a bug to me). This broke
a few of the make tests, so these have been removed to allow WDDX.pm
to build with 5.60.
Version 1.00 (1/17/00)
Added new methods to WDDX::Array and WDDX::Struct.
* Added get(), set(), splice(), length(), push(), pop(), shift(), &
unshift() to WDDX::Array.
* Added get(), set(), delete(), keys(), and values() to WDDX::Struct.
* Decided to up the version to 1.00. I probably should have done this
earlier: 0.13 was effectively 1.00 beta 1, and 0.17 probably should
have been 1.00. In any case everything seems stable now with nothing
left on the to do list.
Version 0.18 (1/4/00)
Bug fix.
* Fixed bugs in array2wddx() and hash2wddx(). (reported by Jon Sala)
* Started citing bug-reporters in this file (Nate Weiss, Thomas Hall,
and David MacKenzie collectively get credit for reporting much of
the bugs previously fixed).
Version 0.17 (11/6/99)
Mainly bug fixes.
* Added support as_javascript() support to binary data objects.
* Added $VERSION to all modules to keep CPAN happy.
* Added PREREQ_PM to Makefile.PL.
* Added code to quiet warnings when using -w flag.
* Fixed bug that prevented WDDX.pm from deserializing empty recordsets
and this required some minor tweaking to Recordset object (shouldn't
affect backwards compatibility).
* Fixed bug introduced last version that caused deserialization
problems when there is additional whitespace between elements.
Version 0.16 (11/1/99)
Minor stuff I noticed as I was buidling, but see 0.15 too since it was
never released.
* Fixed more POD formatting probs; I think it's presentable now.
* Fixed a bug that sometimes stripped white space when parsing strings.
* Created a couple test files as part of the install.
* Allowed binary encoding to wrap to default MIME::Base64 width.
* Created an automated build script (yeah, I know you can't see this
but it makes my life easier :)
Version 0.15 (10/26/99)
Internal release; not distributed.
* Added as_javascript() methods so you can get the JavaScript code
to generate any WDDX data object (except binary objects)
* Added scalar2wddx(), array2wddx(), and hash2wddx() utility
methods that make it much easier to go from Perl data structures
to WDDX data objects
* Added $WDDX::INDENT variable (and corresponding code) to allow
serialize() to generate human-readable packets
* Fixed errors that appear in taint mode and discovered that
XML::Parser untaints data as it parses it (!!); patched WDDX::Parser
to retaint the data
* Edited documentation: fixed typos and formatting problems, documented
new methods, etc.
* Fixed bug that disallowed the creation of empty WDDX struct objects
* Fixed bug that disallowed the creation of recordsets with one field
* Added get_element(), set_element() methods to WDDX::Recordset and
deprecated get_field(), set_field() methods
* Packaged with Makefile.PL (finally); posting to CPAN!
Version 0.14 (10/21/99)
Bug fixes, API changes, and POD:
* Added some checks for undefined values to fix warnings when
running under -w
* Rewrote documentation. It's in POD now (finally)!
* Prefixed internal data object serialize & deserialize subs to
with an underscore make them more private
* Changed all the to_something subs to as_something subs since
it makes more sense with the WDDX data object as an intermediary
* Fixed recordset bugs by adding more error checking for funny data
* Made object type checks non-dependent on object having WDDX in
its name (so the module is more easily subclassed now)
* Renamed to_xml() to as_packet()
Version 0.13 (10/1/99)
Total rewrite: improved parsing and added full support of WDDX 1.00 DTD:
* Everything. WDDX.pm is the only file that resembles its old form. I
wasn't happy with the parsing code. All the logic was in a couple long,
complicated subs, so it's now been broken out. Each data type now has
its own corresponding parser object. It's _much_ easier to maintain now,
so hopefully it won't take me so long for the next version. :)
* Added code to do proper encoding of control characters, and special
characters like '<', '&', etc. for strings.
* Added support for the 1.00 DTD. New binary and null data types
and restrictions on things like allowed characters in recordset field,
names, case insensitive struct keys, etc.
* Rewrote WDDX::Recordset object and added a slew of methods to
for working with it.
* Changed most variable object methods. Constructors are much less
obfuscated. Got rid of value(). Added to_packet(), and a variety of methods
to go to Perl: to_scalar(), to_arrayref(), to_hashref(), to_gmtime(),
and to_localtime(). This new structure will support to_javascript() when
it's added to the next version.
* WDDX.pm methods to create variables changed for the complex types.
array(), hash(), and recordset() now take array/hash references.
recordset() takes totally different parameters which hopefully will be
much easier to work with when using DBI.
* Updated the README with all the new info. POD next time, I promise. :)
* Moved this history info off the website and into this file.
Version 0.12 (7/19/99)
The module is now fully usable (albeit rough). It can go both from Perl to
WDDX as well as from WDDX to Perl. Lots of changes:
* Added serialization support so it's now possible to go from Perl to
WDDX.
* Fixed a problem due to a misunderstanding of the DTD. I originally
believed that multiple variables could be contained within the root
level of a WDDX packet, even outside a struct. As a result, I was
requiring a <var> tag around everything including top level data. That
was incorrect. Deserialization works as documented now.
* Stripped out all of the tie interface code. It didn't add a lot of
value, especially given the previous change, and it added a lot of
complexity to the code.
* Fixed a bug that wouldn't parse dateTime packet data properly if the
GMT timezone adjustment caused the date to wrap.
* Fixed a bug where certain data types (e.g. booleans) weren't parsed
correctly within arrays.
* Added some basic Usage documentation to the README.
* Changed version numbering: version numbers will always have two digits
after the decimal.
Version 0.3a (6/13/99)
First public version. Completed parsing of all WDDX structures. Can now go
fully from WDDX to Perl.
Current features:
* Object oriented.
* Only requires XML::Parser (plus Carp, but it's now standard and
XML::Parser requires it too)
* Full validation of WDDX DTD syntax during parsing.
* Supports multiple methods for returning parsed data structures:
o may be returned via a hash
o may be exported as true variables to any namespace
* Supports multiple methods for representing parsed data structures:
o structures can be accessed as WDDX variable objects
o structures can be accessed as straight perl values
o structures can be accessed via tie so that data type checking is
maintained while you work with the data; this gives you the
benefit of working with the data in as perlish a manner as
possible while still making it simple to reserialize the data
back into a WDDX packet later; ties for values nested within
complex types are generated dynamically only for those variables
accessed
Version 0.2a (6/1/99)
Split parser and variable types into separate packages. Able to parse basic
(scalar) WDDX data types.
Version 0.1a (5/24/99)
Set up CVS tree and began writing module.