Module: Plist::Emit

Included in:
Array, Hash
Defined in:
lib/plist/generator.rb

Overview

Create a plist

You can dump an object to a plist in one of two ways:

  • Plist::Emit.dump(obj)

  • obj.to_plist

    • This requires that you mixin the Plist::Emit module, which is already done for Array and Hash.

The following Ruby classes are converted into native plist types:

Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time, true, false
  • Array and Hash are both recursive; their elements will be converted into plist nodes inside the <array> and <dict> containers (respectively).

  • IO (and its descendants) and StringIO objects are read from and their contents placed in a <data> element.

  • User classes may implement to_plist_node to dictate how they should be serialized; otherwise the object will be passed to Marshal.dump and the result placed in a <data> element.

For detailed usage instructions, refer to USAGE and the methods documented below.

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.dump(obj, envelope = true, format = :xml) ⇒ Object

The following Ruby classes are converted into native plist types:

Array, Bignum, Date, DateTime, Fixnum, Float, Hash, Integer, String, Symbol, Time

Write us (via RubyForge) if you think another class can be coerced safely into one of the expected plist classes.

IO and StringIO objects are encoded and placed in <data> elements; other objects are Marshal.dump‘ed unless they implement to_plist_node.

The envelope parameters dictates whether or not the resultant plist fragment is wrapped in the normal XML/plist header and footer. Set it to false if you only want the fragment.



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/plist/generator.rb', line 46

def self.dump(obj, envelope = true, format = :xml)
  case format
  when :xml
    output = plist_node(obj)
    output = wrap(output) if envelope
  when :binary
    raise(ArgumentError, "binary plists must have an envelope") unless envelope
    output = Plist::Binary.binary_plist(obj)
  else
    raise(ArgumentError, "unknown plist format `#{format}'")
  end
  return output
end

.save_plist(obj, filename, format = :xml) ⇒ Object

Writes the serialized object’s plist to the specified filename.



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/plist/generator.rb', line 61

def self.save_plist(obj, filename, format = :xml)
  File.open(filename, 'wb') do |f|
    case format
    when :xml
      f.write(obj.to_plist(true, format))
    when :binary
      f.write(Plist::Binary.binary_plist(obj))
    else
      raise(ArgumentError, "unknown plist format `#{format}'")
    end
  end
end

Instance Method Details

#save_plist(filename, format = :xml) ⇒ Object

Helper method for injecting into classes. Calls Plist::Emit.save_plist with self.



34
35
36
# File 'lib/plist/generator.rb', line 34

def save_plist(filename, format = :xml)
  Plist::Emit.save_plist(self, filename, format)
end

#to_plist(envelope = true, format = :xml) ⇒ Object

Helper method for injecting into classes. Calls Plist::Emit.dump with self.



29
30
31
# File 'lib/plist/generator.rb', line 29

def to_plist(envelope = true, format = :xml)
  return Plist::Emit.dump(self, envelope, format)
end