plist4r 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +30 -4
- data/VERSION +1 -1
- data/lib/plist4r.rb +7 -6
- data/lib/plist4r/backend.rb +47 -36
- data/lib/plist4r/backend/example.rb +1 -1
- data/lib/plist4r/backend/haml.rb +3 -3
- data/lib/plist4r/backend/libxml4r.rb +4 -4
- data/lib/plist4r/backend/plutil.rb +2 -0
- data/lib/plist4r/backend/ruby_cocoa.rb +3 -3
- data/lib/plist4r/backend_base.rb +3 -0
- data/lib/plist4r/config.rb +15 -12
- data/lib/plist4r/mixin/data_methods.rb +49 -47
- data/lib/plist4r/mixin/popen4.rb +167 -161
- data/lib/plist4r/mixin/ruby_stdlib.rb +2 -0
- data/lib/plist4r/plist.rb +151 -144
- data/lib/plist4r/plist_cache.rb +54 -50
- data/lib/plist4r/plist_type.rb +44 -43
- data/lib/plist4r/plist_type/info.rb +7 -0
- data/lib/plist4r/plist_type/launchd.rb +0 -2
- data/lib/plist4r/plist_type/plist.rb +7 -0
- data/plist4r.gemspec +12 -3
- data/plists/Picture of Today.plist +75 -0
- data/plists/com.adobe.PDFAdminSettings.plist +0 -0
- data/plists/com.apple.SoftwareUpdate.plist +12 -0
- data/plists/foofoo.xml +53 -0
- data/plists/test.plist +0 -0
- data/spec/plist4r/plist_spec.rb +42 -0
- data/spec/plist4r_spec.rb +56 -3
- data/spec/spec.opts +2 -0
- data/test.rb +14 -0
- metadata +11 -2
data/lib/plist4r/plist_type.rb
CHANGED
@@ -1,59 +1,60 @@
|
|
1
1
|
|
2
2
|
require 'plist4r/mixin/data_methods'
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
module Plist4r
|
5
|
+
class PlistType
|
6
|
+
include ::Plist4r::DataMethods
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def initialize opts, *args, &blk
|
9
|
+
raise unless opts[:hash]
|
10
|
+
@hash = @orig = opts[:hash]
|
11
|
+
end
|
10
12
|
end
|
11
|
-
end
|
12
13
|
|
13
|
-
class
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
class ArrayDict
|
15
|
+
include ::Plist4r::DataMethods
|
16
|
+
|
17
|
+
def initialize orig, index=nil, &blk
|
18
|
+
@orig = orig
|
19
|
+
if index
|
20
|
+
@enclosing_block = self.class.to_s.snake_case + "[#{index}]"
|
21
|
+
@orig = @orig[index]
|
22
|
+
else
|
23
|
+
@enclosing_block = self.class.to_s.snake_case
|
24
|
+
end
|
25
|
+
# puts "@orig = #{@orig.inspect}"
|
26
|
+
# puts "@enclosing_block = #{@enclosing_block}"
|
27
|
+
|
28
|
+
@block = blk
|
29
|
+
@hash = ::ActiveSupport::OrderedHash.new
|
30
|
+
# puts "@hash = #{@hash}"
|
31
|
+
|
32
|
+
instance_eval(&@block) if @block
|
33
|
+
# puts "@hash = #{@hash}"
|
23
34
|
end
|
24
|
-
puts "@orig = #{@orig.inspect}"
|
25
|
-
puts "@enclosing_block = #{@enclosing_block}"
|
26
|
-
|
27
|
-
@block = blk
|
28
|
-
@hash = ::ActiveSupport::OrderedHash.new
|
29
|
-
puts "@hash = #{@hash}"
|
30
35
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def hash
|
36
|
-
@hash
|
37
|
-
end
|
36
|
+
def hash
|
37
|
+
@hash
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
def select *keys
|
41
|
+
keys.each do |k|
|
42
|
+
@hash[k] = @orig[k]
|
43
|
+
end
|
42
44
|
end
|
43
|
-
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
def unselect *keys
|
47
|
+
keys.each do |k|
|
48
|
+
@hash.delete k
|
49
|
+
end
|
48
50
|
end
|
49
|
-
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
def unselect_all
|
53
|
+
@hash = ::ActiveSupport::OrderedHash.new
|
54
|
+
end
|
54
55
|
|
55
|
-
|
56
|
-
|
56
|
+
def select_all
|
57
|
+
@hash = @orig
|
58
|
+
end
|
57
59
|
end
|
58
60
|
end
|
59
|
-
|
data/plist4r.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{plist4r}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["dreamcat4"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-17}
|
13
13
|
s.description = %q{In development. Plist4R is a gem which is striving for 3 things: ease of use, speed, and reliability handling of plists. To help achieve these goals, we may plug-in or re-write this gem with one or several backends. Notably, we try to distinguish this gem by providing easy-to use DSL interface for users. For common plist type(s), such as convenience methods for Launchd Plist}
|
14
14
|
s.email = %q{dreamcat4@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
|
|
33
33
|
"lib/plist4r/backend/libxml4r.rb",
|
34
34
|
"lib/plist4r/backend/plutil.rb",
|
35
35
|
"lib/plist4r/backend/ruby_cocoa.rb",
|
36
|
+
"lib/plist4r/backend_base.rb",
|
36
37
|
"lib/plist4r/config.rb",
|
37
38
|
"lib/plist4r/mixin.rb",
|
38
39
|
"lib/plist4r/mixin/class_attributes.rb",
|
@@ -48,10 +49,17 @@ Gem::Specification.new do |s|
|
|
48
49
|
"lib/plist4r/plist_type/launchd.rb",
|
49
50
|
"lib/plist4r/plist_type/plist.rb",
|
50
51
|
"plist4r.gemspec",
|
52
|
+
"plists/Picture of Today.plist",
|
53
|
+
"plists/com.adobe.PDFAdminSettings.plist",
|
54
|
+
"plists/com.apple.SoftwareUpdate.plist",
|
55
|
+
"plists/foofoo.xml",
|
56
|
+
"plists/test.plist",
|
51
57
|
"spec/examples.rb",
|
58
|
+
"spec/plist4r/plist_spec.rb",
|
52
59
|
"spec/plist4r_spec.rb",
|
53
60
|
"spec/spec.opts",
|
54
|
-
"spec/spec_helper.rb"
|
61
|
+
"spec/spec_helper.rb",
|
62
|
+
"test.rb"
|
55
63
|
]
|
56
64
|
s.homepage = %q{http://github.com/dreamcat4/plist4r}
|
57
65
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -60,6 +68,7 @@ Gem::Specification.new do |s|
|
|
60
68
|
s.summary = %q{Dreamcat4's plist4r gem. For reading/writing plists in ruby}
|
61
69
|
s.test_files = [
|
62
70
|
"spec/examples.rb",
|
71
|
+
"spec/plist4r/plist_spec.rb",
|
63
72
|
"spec/plist4r_spec.rb",
|
64
73
|
"spec/spec_helper.rb"
|
65
74
|
]
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>autoPoll</key>
|
6
|
+
<true/>
|
7
|
+
<key>cMax</key>
|
8
|
+
<integer>129600</integer>
|
9
|
+
<key>debug</key>
|
10
|
+
<true/>
|
11
|
+
<key>debugInXcode</key>
|
12
|
+
<false/>
|
13
|
+
<key>desktopPrefs</key>
|
14
|
+
<dict>
|
15
|
+
<key>BackgroundColor</key>
|
16
|
+
<array>
|
17
|
+
<real>0.254902</real>
|
18
|
+
<real>0.4117647</real>
|
19
|
+
<real>0.6666667</real>
|
20
|
+
</array>
|
21
|
+
<key>Change</key>
|
22
|
+
<string>Never</string>
|
23
|
+
<key>ChangePath</key>
|
24
|
+
<string>/Library/Desktop Pictures/Nature</string>
|
25
|
+
<key>ChangeTime</key>
|
26
|
+
<real>1800</real>
|
27
|
+
<key>DrawBackgroundColor</key>
|
28
|
+
<true/>
|
29
|
+
<key>ImageFileAlias</key>
|
30
|
+
<data>AAAAAAC4AAMAAAAAxY+tngAASCsAAAAAAEh7KwBIe0wAAMaUOpUAAAAACSD//gAAAAAAAAAA/////wABAAwASHsrAEh61QBGMgwADgAUAAkARQBhAHIAdABoAC4AagBwAGcADwAaAAwATQBhAGMAaQBuAHQAbwBzAGgAIABIAEQAEgApTGlicmFyeS9EZXNrdG9wIFBpY3R1cmVzL05hdHVyZS9FYXJ0aC5qcGcAABMAAS8A//8AAA==</data>
|
31
|
+
<key>ImageFilePath</key>
|
32
|
+
<string>/Library/Desktop Pictures/Nature/Earth.jpg</string>
|
33
|
+
<key>NewChangePath</key>
|
34
|
+
<string>/Library/Desktop Pictures/Nature</string>
|
35
|
+
<key>NewImageFilePath</key>
|
36
|
+
<string>/Library/Desktop Pictures/Nature/Earth.jpg</string>
|
37
|
+
<key>Placement</key>
|
38
|
+
<string>Crop</string>
|
39
|
+
<key>Random</key>
|
40
|
+
<false/>
|
41
|
+
</dict>
|
42
|
+
<key>error</key>
|
43
|
+
<data>YnBsaXN0MDDUAQIDBAUIT1BUJHRvcFgkb2JqZWN0c1gkdmVyc2lvblkkYXJjaGl2ZXLRBgdUcm9vdIABrxAUCQoTFCIjJCUmJy00NTo7RUZHSEtVJG51bGzUCwwNDg8QERJWJGNsYXNzVk5TQ29kZVpOU1VzZXJJbmZvWE5TRG9tYWlugBMT/////////BeAA4ACXxAQTlNVUkxFcnJvckRvbWFpbtMVFgsXHCFaTlMub2JqZWN0c1dOUy5rZXlzpBgZGhuACIAJgAuADKQdHh8ggASABYAGgAeAEl8QGk5TRXJyb3JGYWlsaW5nVVJMU3RyaW5nS2V5XxAUTlNFcnJvckZhaWxpbmdVUkxLZXlfEBZOU0xvY2FsaXplZERlc2NyaXB0aW9uXxARTlNVbmRlcmx5aW5nRXJyb3JfEJFodHRwOi8vcGhvdG9ncmFwaHkubmF0aW9uYWxnZW9ncmFwaGljLmNvbS9zdGF0aWNmaWxlcy9OR1MvU2hhcmVkL1N0YXRpY0ZpbGVzL1Bob3RvZ3JhcGh5L0ltYWdlcy9QT0QvYS9hdG9tLWJvbWItYmlraW5pLWF0b2xsLTYzMzE3OC0xMDA1MDkteGwuanBn0ygpCyoYLFdOUy5iYXNlW05TLnJlbGF0aXZlgACACIAK0i4vMDNYJGNsYXNzZXNaJGNsYXNzbmFtZaIxMlVOU1VSTFhOU09iamVjdFVOU1VSTF8QFlRoZSByZXF1ZXN0IHRpbWVkIG91dC7UCwwNDg83ODmAExP////////8F4AOgA1fEBdrQ0ZFcnJvckRvbWFpbkNGTmV0d29ya9MVFgs8QCGjGRgagAmACIALo0FCQ4APgBCAEYASXxAUTlNFcnJvckZhaWxpbmdVUkxLZXlfEBpOU0Vycm9yRmFpbGluZ1VSTFN0cmluZ0tleV8QFk5TTG9jYWxpemVkRGVzY3JpcHRpb27SLi9JSqJKMlxOU0RpY3Rpb25hcnnSLi9MTqJNMldOU0Vycm9yV05TRXJyb3ISAAGGoF8QD05TS2V5ZWRBcmNoaXZlcgAIABEAFgAfACgAMgA1ADoAPABTAFkAYgBpAHAAewCEAIYAjwCRAJMApgCtALgAwADFAMcAyQDLAM0A0gDUANYA2ADaANwA+QEQASkBPQHRAdgB4AHsAe4B8AHyAfcCAAILAg4CFAIdAiMCPAJFAkcCUAJSAlQCbgJ1AnkCewJ9An8CgwKFAocCiQKLAqICvwLYAt0C4ALtAvIC9QL9AwUDCgAAAAAAAAIBAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAMc</data>
|
44
|
+
<key>filename</key>
|
45
|
+
<string></string>
|
46
|
+
<key>frequency</key>
|
47
|
+
<string>daily</string>
|
48
|
+
<key>hMin</key>
|
49
|
+
<integer>240</integer>
|
50
|
+
<key>ignoreLostConnectivity</key>
|
51
|
+
<false/>
|
52
|
+
<key>imageSource</key>
|
53
|
+
<data>YnBsaXN0MDDUAQIDBAUI2ttUJHRvcFgkb2JqZWN0c1gkdmVyc2lvblkkYXJjaGl2ZXLRBgdUcm9vdIABrxAwCQofICElLC0uNjlBSktMVFlhYmVocHR5eoKGi4ycnZ6foKGnqKyytbm/wMTIzNDVVSRudWxs2gsMDQ4PEBESExQVFhcYGRoYHB0cWGRhdGFGaWxlU3VpZFV0aXRsZVdkYXRhVXJsW2Rlc2NyaXB0aW9uXxAPX29iakluaXRpYWxpemVkWGltYWdlVXJsVXF1ZXJ5ViRjbGFzc1VlcnJvcoADgASAB4ACgAiABoACgACAL4AAXxCRaHR0cDovL3Bob3RvZ3JhcGh5Lm5hdGlvbmFsZ2VvZ3JhcGhpYy5jb20vc3RhdGljZmlsZXMvTkdTL1NoYXJlZC9TdGF0aWNGaWxlcy9QaG90b2dyYXBoeS9JbWFnZXMvUE9EL2EvYXRvbS1ib21iLWJpa2luaS1hdG9sbC02MzMxNzgtMTAwNTA5LXhsLmpwZ18QaC9Vc2Vycy9pZC9QaWN0dXJlIG9mIFRvZGF5L3Rlc3QvcGljdHVyZXMvTmF0aW9uYWwgR2VvZ3JhcGhpYy9hdG9tLWJvbWItYmlraW5pLWF0b2xsLTYzMzE3OC0xMDA1MDkteGwuanBn0iITIyRZTlMuc3RyaW5nXxAoYWJlODJhYmFmY2I2NTM1NzQwNzIxODFlYzMxYzQwMDRjZDBiZjc4YYAF0iYnKClYJGNsYXNzZXNaJGNsYXNzbmFtZaMpKitfEA9OU011dGFibGVTdHJpbmdYTlNTdHJpbmdYTlNPYmplY3QJbxBVAEEAdABvAG0AaQBjACAAQgBvAG0AYgAgAFQAZQBzAHQAIABQAGgAbwB0AG8ALAAgAEIAaQBrAGkAbgBpACAAQQB0AG8AbABsACAAVwBhAGwAbABwAGEAcABlAHIAICATACAATgBhAHQAaQBvAG4AYQBsACAARwBlAG8AZwByAGEAcABoAGkAYwAgAFAAaABvAHQAbwAgAG8AZgAgAHQAaABlACAARABhAHnULzATMTIzNDVfEA9OU0F0dHJpYnV0ZUluZm9cTlNBdHRyaWJ1dGVzWE5TU3RyaW5ngCyACoAugAnSIhM3JF8RAURBdG9tIEJvbWIgVGVzdCwgQmlraW5pIEF0b2xsClBob3RvZ3JhcGggYnkgVS5TLiBOYXZ5ClRoaXMgbW9udGggaW4gUGhvdG8gb2YgdGhlIERheTogSW1hZ2VzIEZyb20gdGhlIE5hdGlvbmFsIEdlb2dyYXBoaWMgQXJjaGl2ZQpUaGUgc2Vjb25kIGF0b21pYyBib21iIHRlc3RlZCBpbiBPcGVyYXRpb24gQ3Jvc3Nyb2FkcwoKRnJvbSB0aGUgdXBjb21pbmcgTmF0aW9uYWwgR2VvZ3JhcGhpYyBib29rIFRoZSBJbWFnZSBDb2xsZWN0aW9uLCBkdWUgZmFsbCAyMDA5LiBTaG9wIGZvciBvdGhlciBwaG90b2dyYXBoeSBib29rcyBmcm9tIE5hdGlvbmFsIEdlb2dyYXBoaWMuCgqABdI6EztAWk5TLm9iamVjdHOkPD0+P4ALgBSAGIAcgCvTOkITQ0ZJV05TLmtleXOiREWADoAQokdIgAyADYATXxAQTlNQYXJhZ3JhcGhTdHlsZVZOU0ZvbnTUTU5PE1AcUlNfEBJOU1BhcmFncmFwaFNwYWNpbmdaTlNUYWJTdG9wc1tOU0FsaWdubWVudCNAGAAAAAAAAIAAEASAD9ImJ1VYo1ZXK18QF05TTXV0YWJsZVBhcmFncmFwaFN0eWxlXxAQTlNQYXJhZ3JhcGhTdHlsZV8QF05TTXV0YWJsZVBhcmFncmFwaFN0eWxl1FpbE1xdXl9gVk5TU2l6ZVZOU05hbWVYTlNmRmxhZ3MjQDYAAAAAAACAEYASEBBfEBFMdWNpZGFHcmFuZGUtQm9sZNImJ2NkomQrVk5TRm9udNImJ2ZnomcrXE5TRGljdGlvbmFyedM6QhNpbEmiamuAFYAWokdIgAyADYAT1E1OTxNxHFJTI0AYAAAAAAAAgACAD9RaWxNcdXZfeCNAJgAAAAAAAIAXgBIQEFxMdWNpZGFHcmFuZGXTOkITe35Jonx9gBmAGqJHSIAMgA2AE9RNTk8TgxxSUyNAGAAAAAAAAIAAgA/UWlsTXIeIX4ojQCYAAAAAAACAG4ASEBBfEBFIZWx2ZXRpY2EtT2JsaXF1ZdM6QhONlEmmjo9rkZKTgCGAIoAWgCWAJ4AoppWWSJhHmoAdgB6ADYAfgAyAIIATW05TVW5kZXJsaW5lVk5TTGlua1dOU0NvbG9yWE5TQ3Vyc29yEAHToqMTHKWmV05TLmJhc2VbTlMucmVsYXRpdmWAAIAjgCRfEG9odHRwOi8vc2hvcC5uYXRpb25hbGdlb2dyYXBoaWMuY29tL2NvdXBvbi5qc3A/Y29kZT1NUjIwMjEyJlVSTD0lMkZqdW1wLmpzcCUzRml0ZW1JRCUzRDQ0NDUlMjZpdGVtVHlwZSUzRFBST0RVQ1TSJiepq6KqK1VOU1VSTFVOU1VSTNOtrhOvsLFVTlNSR0JcTlNDb2xvclNwYWNlTxARMCAwIDAuOTMzMzMzMzM3MwAQAoAm0iYns7SitCtXTlNDb2xvctRNTk8TthxSUyNAGAAAAAAAAIAAgA/TursTvL2+WU5TSG90U3BvdFxOU0N1cnNvclR5cGWAKRAMgCpXezgsIC04fdImJ8HDosIrWE5TQ3Vyc29yWE5TQ3Vyc29y0iYnxcajxscrXk5TTXV0YWJsZUFycmF5V05TQXJyYXnSyRPKy1dOUy5kYXRhTxAQHQAYAUsCYwEUAiABEQMcAYAt0iYnzc6jzs8rXU5TTXV0YWJsZURhdGFWTlNEYXRh0iYn0dSj0tMrXxAZTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZ18QEk5TQXR0cmlidXRlZFN0cmluZ18QGU5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmfSJifW2aPX2CtdUFRJbWFnZVNvdXJjZVtMT1dlYlNvdXJjZV1QVEltYWdlU291cmNlEgABhqBfEA9OU0tleWVkQXJjaGl2ZXIACAARABYAHwAoADIANQA6ADwAbwB1AIoAkwCXAJ0ApQCxAMMAzADSANkA3wDhAOMA5QDnAOkA6wDtAO8A8QDzAYcB8gH3AgECLAIuAjMCPAJHAksCXQJmAm8CcAMdAyYDOANFA04DUANSA1QDVgNbBKMEpQSqBLUEugS8BL4EwATCBMQEywTTBNYE2ATaBN0E3wThBOME9gT9BQYFGwUmBTIFOwU9BT8FQQVGBUoFZAV3BZEFmgWhBagFsQW6BbwFvgXABdQF2QXcBeMF6AXrBfgF/wYCBgQGBgYJBgsGDQYPBhgGIQYjBiUGLgY3BjkGOwY9BkoGUQZUBlYGWAZbBl0GXwZhBmoGcwZ1BncGgAaJBosGjQaPBqMGqgaxBrMGtQa3BrkGuwa9BsQGxgbIBsoGzAbOBtAG0gbeBuUG7Qb2BvgG/wcHBxMHFQcXBxkHiweQB5MHmQefB6YHrAe5B80HzwfRB9YH2QfhB+oH8wf1B/cH/ggICBUIFwgZCBsIIwgoCCsINAg9CEIIRghVCF0IYghqCH0IfwiECIgIlgidCKIIpgjCCNcI8wj4CPwJCgkWCSQJKQAAAAAAAAIBAAAAAAAAANwAAAAAAAAAAAAAAAAAAAk7</data>
|
54
|
+
<key>lastUpdate</key>
|
55
|
+
<date>2009-10-05T16:37:47Z</date>
|
56
|
+
<key>maxPictures</key>
|
57
|
+
<integer>1</integer>
|
58
|
+
<key>nextDueDate</key>
|
59
|
+
<date>2009-10-05T22:45:00Z</date>
|
60
|
+
<key>pollingInterval</key>
|
61
|
+
<integer>28799</integer>
|
62
|
+
<key>previousPolls</key>
|
63
|
+
<integer>2</integer>
|
64
|
+
<key>ptEnabled</key>
|
65
|
+
<false/>
|
66
|
+
<key>savePath</key>
|
67
|
+
<string>~/Picture of Today/test/pictures/National Geographic</string>
|
68
|
+
<key>selectedSource</key>
|
69
|
+
<integer>4</integer>
|
70
|
+
<key>updateInterval</key>
|
71
|
+
<integer>86400</integer>
|
72
|
+
<key>updateTime</key>
|
73
|
+
<date>2000-01-01T23:45:00Z</date>
|
74
|
+
</dict>
|
75
|
+
</plist>
|
Binary file
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>WebIconDatabaseDirectoryDefaultsKey</key>
|
6
|
+
<string>~/Library/Icons</string>
|
7
|
+
<key>WebKitDefaultFontSize</key>
|
8
|
+
<integer>11</integer>
|
9
|
+
<key>WebKitStandardFont</key>
|
10
|
+
<string>Lucida Grande</string>
|
11
|
+
</dict>
|
12
|
+
</plist>
|
data/plists/foofoo.xml
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
+
<plist version="1.0">
|
4
|
+
<dict>
|
5
|
+
<key>EnableTransactions</key>
|
6
|
+
<true/>
|
7
|
+
<key>ExitTimeOut</key>
|
8
|
+
<integer>60</integer>
|
9
|
+
<key>KeepAlive</key>
|
10
|
+
<dict>
|
11
|
+
<key>PathState</key>
|
12
|
+
<dict>
|
13
|
+
<key>/private/var/spool/cups/cache/org.cups.cupsd</key>
|
14
|
+
<true/>
|
15
|
+
</dict>
|
16
|
+
</dict>
|
17
|
+
<key>Label</key>
|
18
|
+
<string>org.cups.cupsd</string>
|
19
|
+
<key>ProgramArguments</key>
|
20
|
+
<array>
|
21
|
+
<string>/usr/sbin/cupsd</string>
|
22
|
+
<string>-l</string>
|
23
|
+
</array>
|
24
|
+
<key>SHAuthorizationRight</key>
|
25
|
+
<string>system.preferences</string>
|
26
|
+
<key>ServiceIPC</key>
|
27
|
+
<true/>
|
28
|
+
<key>Sockets</key>
|
29
|
+
<dict>
|
30
|
+
<key>Listeners</key>
|
31
|
+
<array>
|
32
|
+
<dict>
|
33
|
+
<key>SockNodeName</key>
|
34
|
+
<string>::1</string>
|
35
|
+
<key>SockServiceName</key>
|
36
|
+
<string>ipp</string>
|
37
|
+
</dict>
|
38
|
+
<dict>
|
39
|
+
<key>SockNodeName</key>
|
40
|
+
<string>127.0.0.1</string>
|
41
|
+
<key>SockServiceName</key>
|
42
|
+
<string>ipp</string>
|
43
|
+
</dict>
|
44
|
+
<dict>
|
45
|
+
<key>SockPathMode</key>
|
46
|
+
<integer>49663</integer>
|
47
|
+
<key>SockPathName</key>
|
48
|
+
<string>/private/var/run/cupsd</string>
|
49
|
+
</dict>
|
50
|
+
</array>
|
51
|
+
</dict>
|
52
|
+
</dict>
|
53
|
+
</plist>
|
data/plists/test.plist
ADDED
Binary file
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), "..", "spec_helper"))
|
2
|
+
|
3
|
+
module PlistSpecHelper
|
4
|
+
def test_xml_plist
|
5
|
+
@test_xml_plist ||= <<-'EOC'
|
6
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
7
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
8
|
+
<plist version="1.0"><dict></dict></plist>
|
9
|
+
EOC
|
10
|
+
end
|
11
|
+
|
12
|
+
def valid_plist_attributes
|
13
|
+
{
|
14
|
+
:from_string => test_xml_plist,
|
15
|
+
:filename => "test_xml.plist"
|
16
|
+
:plist_type => "test_type"
|
17
|
+
:backends => ["test"]
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe Plist4r::Plist, "initialize" do
|
24
|
+
before do
|
25
|
+
# set expected plist object
|
26
|
+
# mock and stub the method call
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "when the first argument is not a Hash, String, or Symbol"
|
30
|
+
before do
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should raise an error" do
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should return the new Plist object" do
|
38
|
+
# .should_be an_instance_of(::Plist4r::Plist)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
data/spec/plist4r_spec.rb
CHANGED
@@ -1,7 +1,60 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
-
describe
|
4
|
-
|
5
|
-
|
3
|
+
describe Plist4r, "new" do
|
4
|
+
before do
|
5
|
+
# set expected plist object
|
6
|
+
# mock and stub the method call
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should run Plist.new with the supplied arguments" do
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return the new Plist object" do
|
13
|
+
# .should_be an_instance_of(::Plist4r::Plist)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Plist4r, "open" do
|
18
|
+
before do
|
19
|
+
# set expected plist object
|
20
|
+
# mock and stub the method call
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should raise an error when no filename is given" do
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should run Plist.new with the supplied filename, and any other supplied arguments" do
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe Plist4r, "string_detect_format" do
|
31
|
+
before do
|
32
|
+
end
|
33
|
+
it "should detect the plist format of the string given" do
|
6
34
|
end
|
7
35
|
end
|
36
|
+
|
37
|
+
describe Plist4r, "file_detect_format" do
|
38
|
+
before do
|
39
|
+
end
|
40
|
+
it "should detect the plist format of the file given" do
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
describe String, "to_plist" do
|
46
|
+
before do
|
47
|
+
# set expected plist object
|
48
|
+
# mock and stub the method call
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should run ::Plist4r.new with the supplied string (self)" do
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return the new Plist object" do
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
|
60
|
+
|
data/spec/spec.opts
CHANGED