Nokogiri-PList

DESCRIPTION:

Nokogiri-plist provides the functionality for dealing with XML in Apple’s property list format.

There is already a plist gem (github.com/bleything/plist) that has similar functionality. I didn’t realize it until I had written most of this gem. However this gem uses Nokogiri, so the implementation is simpler. The plist gem does its own XML parsing. I figured since I was already using Nokogiri in my project, it’s better to build on top of that. I did get ideas from the original gem. I have benchmarked my gem against that gem and it performs similarly. Once I come up with a little more scientific benchmarks, I’ll show them.‘

FEATURES:

  • Parsers plist files into simple basic Ruby objects

  • Generates plist XML from Ruby objects

  • Uses the awesome Nokogiri gem

USAGE:

Sample plist (test.plist)

<plist>
  <dict>
    <key>Beers</key>
    <array>
      <string>Black Butte</string>
      <string>Steel Reserve</string>
      <string>Bass Pale Ale</string>
    </array>
    <key>Beer Drinker</key><string>Casey</key>
    <key>Beers Drank</key><integer>4123</integer>
  </dict>
</plist>

>  require 'nokogiri-plist'

Parse the plist XML

>  plist = Nokogiri::PList(open('test.plist'))
=> { "Beers" => ["Black Butte", "Steel Reserve", "Bass Pale Ale"], "Beers Drank" => 4123, "Beer Drinker" => "Casey"}

Read a dict property thats value is an array

>  plist["Beers"]
=> ["Black Butte", "Steel Reserve", "Bass Pale Ale"]

Read another value

>  plist["Beer Drinker"]
=> "Casey"

Turn it into a string containing XML

> puts plist.to_plist_xml
  <dict>
    <key>Beers</key>
    <array>
      <string>Black Butte</string>
      <string>Steel Reserve</string>
      <string>Bass Pale Ale</string>
    </array>
    <key>Beers Drank</key><integer>4123</integer>
    <key>Beer Drinker</key><string>Casey</string>
  </dict>

Convert a string into a plist XML string

> "beer".to_plist_xml
=> "<string>beer</string>" 

Convert an array to a plist XML string

> puts (1..3).to_a.to_plist_xml
<array>
  <integer>1</integer>
  <integer>2</integer>
  <integer>3</integer>
</array>

REQUIREMENTS:

  • Ruby (tested with 1.9.1 and 1.8.7)

  • nokogiri

  • shoulda and mocha (only if you want to run the tests)

INSTALL:

  • sudo

    gem install nokogiri-plist