Sha256: db25e0e28f19821a9c7c579492bc5202a0636d5eada7460b28ac5b53a3a87f98

Contents?: true

Size: 1.66 KB

Versions: 7

Compression:

Stored size: 1.66 KB

Contents

module Xcselect
  require "plist"

  # Seams apple stores there internal dates with the base of 2001-01-01
  NSTimeIntervalSince1970 = 978307200.0

  class NKIssue
    include Comparable
    attr_accessor :name
    attr_accessor :uuid
    attr_accessor :date
    attr_accessor :content_path

    def self.find_class_key hash
      hash['$objects'].index(hash['$objects'].select{|o| o['$classname'] == "NKIssue"}.first)
    end

    def self.parse file_name
      begin      
        ns_plist = Plist::parse_xml(read_bin_plist_to_xml(file_name))
        # this is the integer that we will use to filter all archived nkissue objects
        nk_issue_key =  find_class_key(ns_plist)

        # filter just the nkissue hashes
        object_array = ns_plist['$objects']
        obj_key_hashs = object_array.select{|o| o.class == Hash && o['$class'] && nk_issue_key == o['$class']['CF$UID'] }
      
        issues = {}
        obj_key_hashs.each do |nskey|
          issue = NKIssue.new
          issue.name = object_array[nskey['name']['CF$UID']]
          issue.uuid = object_array[nskey['directory']['CF$UID']]
          issue.date = self.archive_time_to_time(object_array[nskey['date']['CF$UID']]['NS.time'])
          issues[issue.name] = issue # unless name.nil?
        end
        return issues        
      rescue Exception => e
        return {}
      end
    end
    
    def to_s
      "<NKIssue:#{name}:#{date} #{uuid}>"
    end

    # convert a date offset from 2001 to epoch
    def self.archive_time_to_time t
      Time.at(t + NSTimeIntervalSince1970)
    end

    def self.read_bin_plist_to_xml plist_path
      `plutil -convert xml1  -o - '#{plist_path}'`
    end
  
  end
  
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
xcselect-0.1.11 lib/xcselect/nkissue.rb
xcselect-0.1.10 lib/xcselect/nkissue.rb
xcselect-0.1.9 lib/xcselect/nkissue.rb
xcselect-0.1.8 lib/xcselect/nkissue.rb
xcselect-0.1.7 lib/xcselect/nkissue.rb
xcselect-0.1.6 lib/xcselect/nkissue.rb
xcselect-0.1.5 lib/xcselect/nkissue.rb