CFPropertyList 2.0.10 → 2.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/rbBinaryCFPropertyList.rb +10 -10
- data/lib/rbCFPropertyList.rb +23 -10
- data/lib/rbCFTypes.rb +11 -3
- metadata +4 -4
@@ -90,19 +90,19 @@ module CFPropertyList
|
|
90
90
|
offsets = []
|
91
91
|
|
92
92
|
0.upto(@object_table.size-1) do |i|
|
93
|
-
binary_str
|
93
|
+
binary_str << @object_table[i]
|
94
94
|
offsets[i] = object_offset
|
95
95
|
object_offset += @object_table[i].bytesize
|
96
96
|
end
|
97
97
|
|
98
98
|
offsets.each do |offset|
|
99
|
-
binary_str
|
99
|
+
binary_str << "#{Binary.pack_it_with_size(offset_size,offset)}"
|
100
100
|
end
|
101
101
|
|
102
|
-
binary_str
|
103
|
-
binary_str
|
104
|
-
binary_str
|
105
|
-
binary_str
|
102
|
+
binary_str << [offset_size, @object_ref_size].pack("x6CC")
|
103
|
+
binary_str << [@count_objects].pack("x4N")
|
104
|
+
binary_str << [0].pack("x4N")
|
105
|
+
binary_str << [table_offset].pack("x4N")
|
106
106
|
|
107
107
|
return binary_str
|
108
108
|
end
|
@@ -472,7 +472,7 @@ module CFPropertyList
|
|
472
472
|
elsif(value.is_a?(CFData)) then
|
473
473
|
val = value.decoded_value
|
474
474
|
@int_size += Binary.bytes_size_int(val.length)
|
475
|
-
@misc_size += val.length
|
475
|
+
@misc_size += val.length + 1
|
476
476
|
@count_objects += 1
|
477
477
|
return
|
478
478
|
end
|
@@ -630,7 +630,7 @@ module CFPropertyList
|
|
630
630
|
bdata = Binary.type_bytes("a", val.value.size) # a is 1010, type indicator for arrays
|
631
631
|
|
632
632
|
val.value.each do |v|
|
633
|
-
bdata
|
633
|
+
bdata << Binary.pack_it_with_size(@object_ref_size, v.to_binary(self));
|
634
634
|
end
|
635
635
|
|
636
636
|
@object_table[saved_object_count] = bdata
|
@@ -647,11 +647,11 @@ module CFPropertyList
|
|
647
647
|
val.value.each_key do |k|
|
648
648
|
str = CFString.new(k)
|
649
649
|
key = str.to_binary(self)
|
650
|
-
bdata
|
650
|
+
bdata << Binary.pack_it_with_size(@object_ref_size,key)
|
651
651
|
end
|
652
652
|
|
653
653
|
val.value.each_value do |v|
|
654
|
-
bdata
|
654
|
+
bdata << Binary.pack_it_with_size(@object_ref_size,v.to_binary(self))
|
655
655
|
end
|
656
656
|
|
657
657
|
@object_table[saved_object_count] = bdata
|
data/lib/rbCFPropertyList.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require 'libxml'
|
4
4
|
require 'kconv'
|
5
5
|
require 'date'
|
6
|
+
require 'time'
|
6
7
|
|
7
8
|
#
|
8
9
|
# CFPropertyList implementation
|
@@ -57,15 +58,20 @@ module CFPropertyList
|
|
57
58
|
end
|
58
59
|
end
|
59
60
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
class String
|
62
|
+
unless("".respond_to?(:blob) && "".respond_to?(:blob=)) then
|
63
|
+
# The blob status of this string (to set to true if a binary string)
|
64
|
+
attr_accessor :blob
|
65
|
+
end
|
65
66
|
|
66
|
-
|
67
|
+
unless("".respond_to?(:blob?)) then
|
68
|
+
# Returns whether or not +str+ is a blob.
|
69
|
+
# @return [true,false] If true, this string contains binary data. If false, its a regular string
|
70
|
+
def blob?
|
71
|
+
@blob
|
72
|
+
end
|
73
|
+
end
|
67
74
|
|
68
|
-
class String
|
69
75
|
unless("".respond_to?(:bytesize)) then
|
70
76
|
def bytesize
|
71
77
|
self.length
|
@@ -73,6 +79,13 @@ class String
|
|
73
79
|
end
|
74
80
|
end
|
75
81
|
|
82
|
+
dirname = File.dirname(__FILE__)
|
83
|
+
require dirname + '/rbCFPlistError.rb'
|
84
|
+
require dirname + '/rbCFTypes.rb'
|
85
|
+
require dirname + '/rbXMLCFPropertyList.rb'
|
86
|
+
require dirname + '/rbBinaryCFPropertyList.rb'
|
87
|
+
|
88
|
+
require 'iconv' unless "".respond_to?("encode")
|
76
89
|
|
77
90
|
module CFPropertyList
|
78
91
|
# Create CFType hierarchy by guessing the correct CFType, e.g.
|
@@ -95,11 +108,11 @@ module CFPropertyList
|
|
95
108
|
elsif(object.is_a?(TrueClass) || object.is_a?(FalseClass)) then
|
96
109
|
return CFBoolean.new(object)
|
97
110
|
elsif(object.is_a?(String)) then
|
98
|
-
return CFString.new(object)
|
111
|
+
return object.blob? ? CFData.new(object, CFData::DATA_RAW) : CFString.new(object)
|
112
|
+
elsif(object.is_a?(IO)) then
|
113
|
+
return CFData.new(object.read(), CFData::DATA_RAW)
|
99
114
|
elsif(object.is_a?(Time) || object.is_a?(DateTime) || object.is_a?(Date)) then
|
100
115
|
return CFDate.new(object)
|
101
|
-
elsif(object.is_a?(IO)) then
|
102
|
-
return CFData.new(object.read, CFData::DATA_RAW)
|
103
116
|
elsif(object.is_a?(Array)) then
|
104
117
|
ary = Array.new
|
105
118
|
object.each do
|
data/lib/rbCFTypes.rb
CHANGED
@@ -157,20 +157,28 @@ module CFPropertyList
|
|
157
157
|
# set value to defined state, either base64 encoded or raw
|
158
158
|
def initialize(value=nil,format=DATA_BASE64)
|
159
159
|
if(format == DATA_RAW) then
|
160
|
-
@
|
160
|
+
@raw_value = value
|
161
|
+
@raw_value.blob = true
|
161
162
|
else
|
162
163
|
@value = value
|
163
164
|
end
|
164
165
|
end
|
165
166
|
|
167
|
+
# get base64 encoded value
|
168
|
+
def encoded_value
|
169
|
+
@value ||= Base64.encode64(@raw_value)
|
170
|
+
end
|
171
|
+
|
166
172
|
# get base64 decoded value
|
167
173
|
def decoded_value
|
168
|
-
|
174
|
+
@raw_value ||= String.new(Base64.decode64(@value))
|
175
|
+
@raw_value.blob = true
|
176
|
+
@raw_value
|
169
177
|
end
|
170
178
|
|
171
179
|
# convert to XML
|
172
180
|
def to_xml
|
173
|
-
return LibXML::XML::Node.new('data') << LibXML::XML::Node.new_text(
|
181
|
+
return LibXML::XML::Node.new('data') << LibXML::XML::Node.new_text(encoded_value())
|
174
182
|
end
|
175
183
|
|
176
184
|
# convert to binary
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: CFPropertyList
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 11
|
10
|
+
version: 2.0.11
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Christian Kruse
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-08-26 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|