RubyAEOSA improvements, esp. for iTunes

Trying to do things faster than they can go with AppleScript and iTunes by using Ruby, but found that a lot of the information about a track doesn't get translated when going through to_rbobj.

In particular, the file track's "location" (a file alias) and "date played" and "date added" (dates) came through in unusable form.

I've pasted my fix below. to_rbobj for TypeAlias now returns a File object, since the whole point of an Alias is that it tracks a file via its inode, not its name or path. Hopefully a File object will behave similarly. TypeLongDateTime now comes back as a Date object.

There was also the problem of fields that in AppleScript would contain "missing value," which appears in RubyAEOSA as an AEDesc with type "TypeType" and value "msng." I just sort of attached a solution with chewing-gum for that case, because I don't understand what a TypeType record actually is. iTunes track properties that would be "missing data" will read in Ruby as "nil".

module OSX
  class AEDesc
    require 'date'

       def to_file
         d = to_path
         File.new(d)
       end

       def to_date
         d = coerce(TypeLongDateTime)
            Date.new(1904, 1, 1) + Date.time_to_day_fraction(0, 0, d.rawdata.unpack('q')[0])
       end

       def to_type
           d = rawdata
      if d == 'msng' then nil else d end
       end

      def to_rbobj
            case __typestr__
               when TypeBoolean, TypeTrue, TypeFalse then to_bool
               when TypeChar, TypeUnicodeText, TypeStyledUnicodeText, TypeUTF8Text,
          TypeEncodedString, TypeCString, TypePString then to_s
               when TypeKeyword, TypeApplSignature then rawdata
               when TypeFSS, TypeFSRef then to_path
               when TypeAlias then to_file
               when TypeShortInteger, TypeInteger, TypeMagnitude then to_i
               when TypeShortFloat, TypeFloat, TypeExtended then to_f
               when TypeAEList then to_a
               when TypeAERecord then to_hash
             when TypeLongDateTime then to_date
             when TypeNull then nil
        when TypeType then to_type
        else self
           end
       end
  end
end