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 is `true`.
-
‘encoding_comment:` add encoding comment `// !$UTF8$!` on top of file, default is `false`.
-
‘sort_keys:` sort dict keys, default is `true`.
-
‘gnu_extension` whether allow GNUStep extensions for ASCII plist to support serializing more types, default is `true`.
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 is `false`.
-
‘xml_version:` you can also specify `“1.1”` for www.w3.org/TR/xml11/, default is `“1.0”`, no effect if `:segment` is set to `true`.
-
‘gnu_dtd:` use GNUStep DTD instead (which is a bit different in string escaping), default is `false`.
-
‘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 is `68`, must be multiple of `4`.
-
‘base64_indent:` whether indent the Base64 encoded data, you can use `false` for compatibility to generate same output for other frameworks, default value is `true`.
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 |