plist4r 0.1.0 → 0.1.1
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/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