Parent

Class/Module Index [+]

Quicksearch

Facter::Util::CFPropertyList::List

Class representing a Facter::Util::CFPropertyList. Instanciate with new

Constants

FORMAT_AUTO

Format constant for automatic format recognizing

FORMAT_BINARY

Format constant for binary format

FORMAT_XML

Format constant for XML format

Attributes

filename[RW]

Path of PropertyList

format[RW]

Path of PropertyList

value[RW]

the root value in the plist file

Public Class Methods

new(opts={}) click to toggle source

initialize a new Facter::Util::CFPropertyList, arguments are:

:file

Parse a file

:format

Format is one of FORMAT_BINARY or FORMAT_XML. Defaults to FORMAT_AUTO

:data

Parse a string

All arguments are optional

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 238
def initialize(opts={})
  @filename = opts[:file]
  @format = opts[:format] || FORMAT_AUTO
  @data = opts[:data]

  load(@filename) unless @filename.nil?
  load_str(@data) unless @data.nil?
end

Public Instance Methods

load(file=nil,format=nil) click to toggle source

Read a plist file

file = nil

The filename of the file to read. If nil, use filename instance variable

format = nil

The format of the plist file. Auto-detect if nil

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 303
def load(file=nil,format=nil)
  file = @filename if file.nil?
  format = @format if format.nil?
  @value = {}

  raise IOError.new("File #{file} not readable!") unless File.readable? file

  case format
  when List::FORMAT_BINARY, List::FORMAT_XML then
    prsr = @@parsers[format-1].new
    @value = prsr.load({:file => file})

  when List::FORMAT_AUTO then # what we now do is ugly, but neccessary to recognize the file format
    magic_number = IO.read(file,8)
    filetype = magic_number[0..5]
    version = magic_number[6..7]

    prsr = nil
    if filetype == "bplist" then
      raise CFFormatError.new("Wong file version #{version}") unless version == "00"
      prsr = Binary.new
    else
      prsr = XML.new
    end

    @value = prsr.load({:file => file})
  end
end
load_binary(filename=nil) click to toggle source

read a binary plist file

filename = nil

The filename to read from; if nil, read from the file defined by instance variable filename

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 255
def load_binary(filename=nil)
  load(filename,List::FORMAT_BINARY)
end
load_binary_str(str=nil) click to toggle source

load a plist from a binary string

str

The string containing the plist

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 267
def load_binary_str(str=nil)
  load_str(str,List::FORMAT_BINARY)
end
load_str(str=nil,format=nil) click to toggle source

load a plist from a string

str = nil

The string containing the plist

format = nil

The format of the plist

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 274
def load_str(str=nil,format=nil)
  str = @data if str.nil?
  format = @format if format.nil?

  @value = {}
  case format
  when List::FORMAT_BINARY, List::FORMAT_XML then
    prsr = @@parsers[format-1].new
    @value = prsr.load({:data => str})

  when List::FORMAT_AUTO then # what we now do is ugly, but neccessary to recognize the file format
    filetype = str[0..5]
    version = str[6..7]

    prsr = nil
    if filetype == "bplist" then
      raise CFFormatError.new("Wong file version #{version}") unless version == "00"
      prsr = Binary.new
    else
      prsr = XML.new
    end

    @value = prsr.load({:data => str})
  end
end
load_xml(filename=nil) click to toggle source

Load an XML PropertyList

filename = nil

The filename to read from; if nil, read from the file defined by instance variable filename

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 249
def load_xml(filename=nil)
  load(filename,List::FORMAT_XML)
end
load_xml_str(str=nil) click to toggle source

load a plist from a XML string

str

The string containing the plist

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 261
def load_xml_str(str=nil)
  load_str(str,List::FORMAT_XML)
end
save(file=nil,format=nil,opts={}) click to toggle source

Serialize Facter::Util::CFPropertyList object to specified format and write it to file

file = nil

The filename of the file to write to. Uses filename instance variable if nil

format = nil

The format to save in. Uses format instance variable if nil

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 335
def save(file=nil,format=nil,opts={})
  format = @format if format.nil?
  file = @filename if file.nil?

  raise CFFormatError.new("Format #{format} not supported, use List::FORMAT_BINARY or List::FORMAT_XML") if format != FORMAT_BINARY && format != FORMAT_XML

  if(!File.exists?(file)) then
    raise IOError.new("File #{file} not writable!") unless File.writable?(File.dirname(file))
  elsif(!File.writable?(file)) then
    raise IOError.new("File #{file} not writable!")
  end

  opts[:root] = @value
  prsr = @@parsers[format-1].new
  content = prsr.to_str(opts)

  File.open(file, 'wb') {
    |fd|
    fd.write content
  }
end
to_str(format=List::FORMAT_BINARY,opts={}) click to toggle source

convert plist to string

format = List::FORMAT_BINARY

The format to save the plist

opts={}

Pass parser options

# File lib/facter/util/cfpropertylist/lib/rbCFPropertyList.rb, line 360
def to_str(format=List::FORMAT_BINARY,opts={})
  prsr = @@parsers[format-1].new
  opts[:root] = @value
  return prsr.to_str(opts)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.