Module: PropertyList
- Defined in:
- lib/property-list.rb,
lib/property-list/version.rb,
lib/property-list/xml_parser.rb,
lib/property-list/ascii_parser.rb,
lib/property-list/binary_parser.rb,
lib/property-list/xml_generator.rb,
lib/property-list/binary_markers.rb,
lib/property-list/ascii_generator.rb,
lib/property-list/binary_generator.rb
Defined Under Namespace
Modules: BinaryMarkers Classes: AsciiGenerator, AsciiParser, BinaryGenerator, BinaryParser, OrdSet, SyntaxError, Uid, UnsupportedTypeError, Url, Uuid, XmlGenerator, XmlParser
Constant Summary collapse
- VERSION =
'1.0.3'.freeze
Class Method Summary collapse
-
.dump_ascii(obj, indent_unit: "\t", initial_indent: '', wrap: true, encoding_comment: false, sort_keys: true, gnu_extension: true) ⇒ Object
Generate ASCII (Plain) plist.
-
.dump_binary(obj, options = nil) ⇒ Object
Generate binary plist, the version is auto detected.
-
.dump_xml(obj, segment: false, xml_version: '1.0', gnu_dtd: false, base64_width: 68, base64_indent: true, indent_unit: "\t", initial_indent: '') ⇒ Object
Generate ASCII (Plain) plist.
-
.load(data) ⇒ Object
Load plist (binary or xml or ascii) into a ruby object.
-
.load_ascii(text) ⇒ Object
Parse ASCII plist into a Ruby object.
-
.load_binary(data) ⇒ Object
Parse binary plist into a Ruby object.
-
.load_file(file_name) ⇒ Object
Load plist from file.
-
.load_xml(xml) ⇒ Object
Parse XML plist into a Ruby object.
Class Method Details
.dump_ascii(obj, indent_unit: "\t", initial_indent: '', wrap: true, encoding_comment: false, sort_keys: true, gnu_extension: true) ⇒ Object
Generate ASCII (Plain) plist.
Options:
-
indent_unit:the indent unit, default value is ‘“t”`, set to `”` if you don’t need indent. -
initial_indent:initial indent space, default is ‘”`, the indentation per line equals to `initial_indent + indent * current_indent_level`. -
wrap:wrap the top level output with ‘…` when obj is a Hash, default istrue. -
encoding_comment:add encoding comment ‘// !$UTF8$!` on top of file, default isfalse. -
sort_keys:sort dict keys, default istrue. -
gnu_extensionwhether allow GNUStep extensions for ASCII plist to support serializing more types, default istrue.
13 14 15 16 17 18 19 |
# File 'lib/property-list/ascii_generator.rb', line 13 def self.dump_ascii obj, indent_unit: "\t", initial_indent: '', wrap: true, encoding_comment: false, sort_keys: true, gnu_extension: true generator = AsciiGenerator.new indent_unit: indent_unit, initial_indent: initial_indent, sort_keys: sort_keys, gnu_extension: gnu_extension generator.output << "// !$*UTF8*$!\n" if encoding_comment generator.generate obj, wrap generator.output << "\n" if wrap and obj.is_a?(Hash) generator.output.join end |
.dump_binary(obj, options = nil) ⇒ Object
Generate binary plist, the version is auto detected
5 6 7 8 9 10 |
# File 'lib/property-list/binary_generator.rb', line 5 def self.dump_binary obj, =nil generator = BinaryGenerator.new generator.generate obj binding.pry if $test generator.output.join end |
.dump_xml(obj, segment: false, xml_version: '1.0', gnu_dtd: false, base64_width: 68, base64_indent: true, indent_unit: "\t", initial_indent: '') ⇒ Object
Generate ASCII (Plain) plist.
Options:
-
segment:whether output an XML segment (not wrapped with ‘<?xml>, <DOCTYPE>, <plist>` tags), default isfalse. -
xml_version:you can also specify ‘“1.1”` for www.w3.org/TR/xml11/, default is `“1.0”`, no effect if:segmentis set totrue. -
gnu_dtd:use GNUStep DTD instead (which is a bit different in string escaping), default isfalse. -
indent_unit:the indent unit, default value is ‘“t”`, set to or `”` if you don’t need indent. -
initial_indent:initial indent space, default is ‘”`, the indentation per line equals to `initial_indent + indent * current_indent_level`. -
base64_width:the width of characters per line when serializing data with Base64, default value is68, must be multiple of4. -
base64_indent:whether indent the Base64 encoded data, you can usefalsefor compatibility to generate same output for other frameworks, default value istrue.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/property-list/xml_generator.rb', line 15 def self.dump_xml obj, segment: false, xml_version: '1.0', gnu_dtd: false, base64_width: 68, base64_indent: true, indent_unit: "\t", initial_indent: '' if !base64_width.is_a?(Integer) or base64_width <= 0 or base64_width % 4 != 0 raise ArgumentError, "option :base64_width must be a positive integer and a multiple of 4" end generator = XmlGenerator.new gnu_dtd: gnu_dtd, base64_width: base64_width, base64_indent: base64_indent, indent_unit: indent_unit, initial_indent: initial_indent if segment generator.generate obj else generator.output << %|<?xml version="#{xml_version}" encoding="UTF-8"?>\n| if gnu_dtd generator.output << %|<!DOCTYPE plist PUBLIC "-//GNUstep//DTD plist 0.9//EN" "http://www.gnustep.org/plist-0_9.xml">\n| generator.output << %|<plist>\n| else generator.output << %|<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n| generator.output << %|<plist version="1.0">\n| end generator.generate obj generator.output << %|</plist>\n| end generator.output.join end |
.load(data) ⇒ Object
Load plist (binary or xml or ascii) into a ruby object.
Auto detects format.
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/property-list.rb', line 28 def self.load data case data.byteslice(0, 8) when /\Abplist\d\d/n load_binary data.force_encoding('binary') when /\A<\?xml\ /n load_xml data.force_encoding('utf-8') else load_ascii data.force_encoding('utf-8') end end |
.load_ascii(text) ⇒ Object
Parse ASCII plist into a Ruby object
3 4 5 |
# File 'lib/property-list/ascii_parser.rb', line 3 def self.load_ascii text AsciiParser.new(text).parse end |
.load_binary(data) ⇒ Object
Parse binary plist into a Ruby object
3 4 5 |
# File 'lib/property-list/binary_parser.rb', line 3 def self.load_binary data BinaryParser.new(data).parse end |
.load_file(file_name) ⇒ Object
Load plist from file
Auto detects format
21 22 23 |
# File 'lib/property-list.rb', line 21 def self.load_file file_name load File.binread file_name end |