0.657 - 2008-08-14 - Date#to_time renamed to Date#vpim_to_time. Apparently Rails also patches the core. - Debian doesn't like RFCs. I think there is a problem with the DFG, not the IETF. The value of a standard is that it can't be modified (if anybody could publish a modified version of an RFC without restriction chaos would ensue). Still, we lost that argument, and I'll try and help packagers out. - View, gives various views of calendars. Experimental. - Fixed doc comment refs to common Property module. - Vtodo#duration and #due now work correctly (the missing one will be calculated from the other). - Vevent::Maker#add_rrule, #set_rrule are new, using Rrule::Maker. - There is now (half-of) an Rrule::Maker class to help construct RRULE values. - Vjournal can be encoded now (it was broken). - Better code coverage by the tests. - Recurrence#occurrences now returns an Enumerator instead of an Rrule. Both have #each, and both yield the same thing, so that isn't an API change. However, Rrule had an each_until, and the Enumerator doesn't. Use the dountil argument to #occurrences to get the same effect. The asymetry of this API caused me (non-aesthetic) trouble, now Rrule is an internal implementation detail. Also, this would have had to change eventually, because occurrences need to be the union of multiple RRULE and RDATE fields. - Recurrence#rrule, returns an Rrule for the first RRULE field. Can be used as transition. - Icalendar#calscale was broken, and is now unit tested, along with #version and #protocol?. - Icalendar#{each,events,todos,journals} all yield components, or return an enumerator. - Icalendar is enumerable. - Repo and Repo::Calendar are enumerable. - #occurrences will call Rrule#each if a block is provided - Recurrence rules with DTSTART in UTC will now sortof work (thanks to Max Werner for providing the patch). - Added convenience methods for setting and getting title and org fiels (thanks to Jade Meskill for providing the patch). - Modified Icalendar#create2 so only prodid can be supplied and cal is yielded so events/etc. can be pushed. - Support Highrisehq.com's broken google talk field (see test_vcard.rb for examples, thanks to Terry Tong for reporting). 0.619 - 2008-03-30 - Fixed some problems with rescue statements not being specific enough. - Vcard#birthday may now return a DateTime. - Added Vcard#urls - Fixed a mispelled Uri in Vcard#url - Global fix of misspellings of "occurrence" - KAddressBook compatibility fix - allow / in field names, even though it is illegal in vCard 3.0. 0.604 - 2008-03-13 - Fixed a bug with lower-case UTF-16 encoded cards not being detected properly. - Skip over invalidly encoded vCard fields when enumerating them. 0.602 - 2008-03-12 - Updated reminder utility to work with iCal 3. - Reworked gem to include tests, samples, and binaries. 0.597 - 2008-03-01 - Support for BYSETPOS in recurrence rules (development supported by ZipDX.com) - Support for FREQ=weekly in recurrence rules (development supported by ZipDX.com) - Fixed an encode_text() bug (patch supplied by Jan Becvar) - Fixed problem with interaction between BYMONTH and BYDAY (patch supplied by Sam Stephenson of 32signals.com) - Vevent::Maker - Started adding high-level iCalendar encoding APIs - Vpim::Vcard::Maker - the vCard maker is moved here - Vpim::Maker - deprecated - Vcard::make, Maker::Vcard#delete_if - new - Vcard::Maker#add_name - deprecate, see Vcard::Maker#name - Vcard::Maker#fullname= - deprecate, see Vcard::Maker#name - Added high-level vCard decoding API. - Beginning to depend on ruby1.8. I'm willing to try for backwards compat if I get feedback that this causes difficulties. - Icalendar#components - new - Icalendar#vevents - deprecated, see Icalendar#components - split Vtodo and Vjournal into own files - Added Recurrence module to Vtodo and Vjournal - Property::Common#sequence - new - Property::Common#attachments - new - Icalendar::Attachment - new - Maker::Vcard#add_url - new - ex_mkyourown.rb - new example - Modularized the component property accessor methods, and added lots of Icalendar property support for Vevent, Vtodo, and Vjournal. - Fixed support for TEXT decoding. - Use Subversion revision as release sub-version. - It appears that a top-level vpim.rb that requires everything else is needed for ruby-gems, gemspec seems to work now. - Don't package backup files (.../*.rb~). - Icalendar decoding optimizations. Icalendar.decode is about twice as fast now, and more optimizations are scheduled. - Continue the move to using uppercase for all syntactic elements that can be mixed case. The API might eventually allow only uppercase, it appears case-insensitive comparisons still have a noticeable effect on performance. 0.17 - 2006-03-08 - DirectoryInfo#delete - new - Maker::Vcard#fullname - new - Provide an example of how to create, copy, and modify version 2.1 vCards. - Maker::Vcard.make2 - new - Maker::Vcard.make - deprecated - Profiled decoding of a huge iCalendar file. Performance appears to be dominated by overhead of String#downcase (20% of time spent in Field#name?). Keeping the field group, field name, and field's parameter's names internally in uppercase and using ruby 1.8's String#casecmp? is a first attempt at optimization. This is a change in the default case returned, but it aligns with the RFC and common usage. - Maker::Vcard.make - full_name is now optional, it will be derived from name/N: - Maker::Vcard#add_field - better argument checking - Maker::Vcard#copy - new - Vcard#[] - now limits return to fields with values - Vcard#name - new - Vcard::Name - new - Vcard#nicknames - new - Field#params and Field#param - deprecated and undocumented, I could never remember the difference - Field#pnames - new - Field#pvalues - new - Methods.casecmp? - new - Field#pref= - new - Field#pvalue_idel - new - Field#pvalue_iadd - new 0.16 - 2006-02-19 - Packaged in gem format, experimental. - Read vCards in UTF-8 or UTF-16, big or little endian, with or without a byte order mark (BOM). - Fixed bug with rrule occurences containing the end of the interval. Reported with patch by Brad Ediger. 0.15 - 2005-07-29 - Fixed bug with param values with quoted strings, particularly a quoted string containing a : character, like name;param="file:///":value Thanks to Tamiji Homma for reporting this and sending me an example calendar. - Vtodo.create - new - Icalendar#push - allow Vtodos to be added Thanks to Maximillian Dornseif for contributing the above two Vtodo patches. - Vevent.duration - bug fixes so duration can be calculated from begin/end, and end can be calculated from begin/duration - Vcard#nickname that strips whitespace to see if there really is a nickname - Vcard#birthday - returns birthday as a date - Vevent#create_yearly - easy, cheesy way to create yearly recurring events - vcf-to-ics.rb: example of how to create calendars of bdays from vcards - Icalendar.create() like Vevent.create(), it will take arrays of Fields, or Hashes of String => value. - maker/vcard.rb: Added support for X-AIM, an Apple extension. 0.14 - 2005-02-01 - Fix: if an RRULE didn't ever yield an event (a bug in the rule) dountil was never tested. - Change: don't throw an ArgumentError with infinite events, just stop when the Time is no longer representable 0.13 - 2005-01-20 - Was calling to_time with an arg, fixed. 0.12 - 2005-01-17 - Removed require of pp from the library and utilities where it wasn't needed, it was causing problems because it doesn't exist on ruby 1.6 systems. - Added Field#to_date, returns field value as an array of Date objects - Changed Field#to_time - it now auto-detects format of values (DATE/DATE-TIME), and doesn't take/require a default_kind argument. - Added IMPP support to Vpim::Maker::Vcard. - Makefile wasn't copying the Maker classes into the release. - Duration value not returned unless it was negative, fixed. - An RRULE's UNTIL was always being assumed to be a DATE-TIME, but it can be a DATE. I fixed this, but is something of a hack, see comments and TODO. - Use String#scan instead of String#gsub, when appropriate (I didn't know it existed when I stated the project). - Run tests on 3 ruby versions. - Don't include docs in release package, it makes it way too large. - Change: use String.unpack instead of iconv to convert UCS-2 to UTF-8, removing dependency on iconv (it wasn't standard in ruby 1.6). - Change: simplified mutt_ab_query.rb, and renamed to vcf-to-mutt. - Change: reminder.rb sorts todo items by priority. - New: Vtodo#priority - the priority of the vTodo component. 0.11 - 2004-11-17 - Added a Vpim::Maker::Vcard class to simplify the creation of vCards, modelled after the RSS maker from ruby's RSS library. 0.10 - 2004-11-07 - If events don't have a recurrence rule, they occur once, but they were being returned even if they occurred after "dountil". Fixed. - New sample of converting tab-delimited files to a vcard file, from Dane G. Avilla. Thanks! 0.9a - 2004-10-31 - Made sure all events occur once in rrules. - New sample of encoding: mutt-aliases-vcard.rb - Added ToDo support to reminder.rb. 0.9 - 2004-06-17 - Field now is mutable, you can change the group, value, params, etc. - Using the Enumerator object for DirectoryInfo now, instead of all the each_by_X, and field_by_X() APIs. - Moved homepage and docs to Ruby Forge. - DirectoryInfo.create: added a profile argument - DirectoryInfo#push: now pushes to 1 before the end - DirectoryInfo#push_end: pushes onto end, in case you really want to - Field.create: a Date or Time object value will now be encoded as date or time - Vpim.encode_date(): encodes an RFC2425 date - Vpim.encode_time(): encodes an RFC2425 time - Vpim.encode_date_time(): encodes an RFC2425 date-time - Icalendar#encode(): encodes an Icalendar - Icalendar#push(): pushes a calendar component onto a calendar - Vevent#accept(): accepts an event invitation - Vevent#create(): creates a new event - Address#copy(): create a copy of Address. If the original Address was frozen, this one won't be. - Address#partstat=(): set or change the PARTSTAT. - Field#copy(): create a copy of Field. If the original Field was frozen, this one won't be. 0.8 - 2004-04-01 - Moved DirectoryInfo::Field into it's own file, vpim/field.rb. - New: Vpim::Duration - crude way of getting days/hours/mins/secs from a duration in seconds. - New: Icalendar#create() and Icalendar#create_reply() - New: Icalendar#encode(), #to_s is an alias to #encode. - New: Icalendar#protocol?() - Change: Icalendar#version() raises an error if there is no VERSION - Change: made all the DirectoryInfo, Vcard, and Field .new() class methods private, and replaced with the 2 class methods: - decode() decodes a string, returning a ruby object - create() creates a new object and all objects now get encoded using: - encode() takes a ruby object, and encodes it as a string They become more symetrical, and the overloaded meanings of .new() dissappear - with .new() are you decoding, encoding, creating...? - Change: Icalendar::Vevent#attendees() can return only attendees with a particular URI. - New: Icalendar::Address#==() - New: Icalendar::Vevent#attendee?() - Fixed bug: Field#encode() was adding an unexpecte NL to the line. - Change: Field#name?() can accept a symbol. - New: DirectoryInfo has an #each(), so I included Enumerable. Because of this #to_a() now returns all the Fields in a DirectoryInfo. - New: DirectoryInfo#push() and DirectoryInfo@push_uniq(). - Change: DirectoryInfo#<<() is now an alias for DirectoryInfo#push() - Change: DirectoryInfo#each() and DirectoryInfo#each_by() now return self instead of nil, I think this is more rubyish. - New: Date#to_time() - converts a Date, and maybe a DateTime, to a Time - New: Icalendar#protocol() - New: Icalendar::Address - New: Icalendar::Vevent#organizer()/attendees(), which return an Icalendar::Address - New: An array of all the values of fields named name, converted to text, using Field.to_text(). 0.7 - 2004-03-21 - Bug fixes, not all files were requiring vpim.rb, which had the definition of the invalid encoding error. - Implemented much requested feature: ignore empty lines in input. This is an invalid encoding, but I'm tired of fighting it. 0.6 - 2004-03-20 WARNING: major API renamings! - Replaced the Vpim::Errors::*Error exception classes with a single exception class: Vpim::InvalidEncodingError. That, and a message, is all I really need. I don't think people need different classes for different types of encoding errors, either the library can decode it for them, or it can't. - Renamed project to "vpim" (to reflect vCard and vCalendar/iCalendar support), renamed top-level Rfc2425 module to Vpim, split vard.rb into multiple files. - Add support for iCalendar (RFC2445), see vpim/icalendar.rb. Currently only supports VEVENT, no VTODO or VALARM yet, but is useable to print my upcoming iCal events. - Implemented the iCalendar recurrence rules mini-language, which is possibly of more general use than just for iCalendar. - Fixed bug in time decoding where usec would be nil instead of zero when no usec were present in the time value. - Field#to_time now assumes that time is in local time, unless the timezone is "Z", meaning UTC. - Field#to_text - new method, unescapes newlines, commas, and escape characters. - Field#field(name) - new method, returns the first field named +name+. 0.5 - 3003-11-23 - ab-query.rb - short option for --me was mistyped as -v, instead of -m. - mutt_ab_query.rb - added a --pipe option, so that the output of an other script can be directly queried. - New method: Rfc2425.version - Decode vCard 2.1 abbreviated parameters (ones where the name of the parameter is missing, only the value is present, which only works for type and encoding). - Vcard.decode() now support UCS-2 encoded vCards, by translating anything that looks like UCS-2 to UTF-8 before decoding. 0.4 - 2003-04-14 - More support for decoding date, time, and date-time values. - New method Field#to_time(). - Can pass an IO object to decode APIs, its entire contents is read as a string. - Field#group?() now considers nil as equivalent to no group, so you can use each_group(nil) to iterate through all fields without a group. 0.3 - - Added description of how to use mutt_ab_query.rb - Added support for querying the kind of a value, and began support for decoding date and time values. 0.2 - - Supports encoding. - Supports accessing values using []. - No longer have methods return an Array, or nil if the array is zero length, I just return an Array. - mutt_ab_query.rb - an example of using vcard.rb to do lookups in the OS X Address Book from Mutt 0.1 - - First release. --- vim:expandtab:tabstop=8:softtabstop=2:shiftwidth=2