pairtree 0.0.0 → 0.1.0

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.
@@ -0,0 +1,32 @@
1
+ desc "Generate RDoc"
2
+ task :doc => ['doc:generate']
3
+
4
+ namespace :doc do
5
+ project_root = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
6
+ doc_destination = File.join(project_root, 'rdoc')
7
+
8
+ begin
9
+ require 'yard'
10
+ require 'yard/rake/yardoc_task'
11
+
12
+ YARD::Rake::YardocTask.new(:generate) do |yt|
13
+ yt.files = Dir.glob(File.join(project_root, 'lib', '*.rb')) +
14
+ Dir.glob(File.join(project_root, 'lib', '**', '*.rb')) +
15
+ [ File.join(project_root, 'README.rdoc') ] +
16
+ [ File.join(project_root, 'LICENSE') ]
17
+
18
+ yt.options = ['--output-dir', doc_destination, '--readme', 'README.rdoc']
19
+ end
20
+ rescue LoadError
21
+ desc "Generate YARD Documentation"
22
+ task :generate do
23
+ abort "Please install the YARD gem to generate rdoc."
24
+ end
25
+ end
26
+
27
+ desc "Remove generated documenation"
28
+ task :clean do
29
+ rm_r doc_destination if File.exists?(doc_destination)
30
+ end
31
+
32
+ end
@@ -0,0 +1,24 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{pairtree}
3
+ s.summary = %q{Ruby Pairtree implementation}
4
+ s.version = "0.1.0"
5
+ s.homepage = %q{http://github.com/microservices/pairtree}
6
+ s.licenses = ["Apache2"]
7
+ s.rubygems_version = %q{1.3.7}
8
+
9
+ s.authors = ["Chris Beer"]
10
+ s.date = %q{2010-12-23}
11
+ s.email = %q{chris@cbeer.info}
12
+ s.files = `git ls-files`.split("\n")
13
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ s.extra_rdoc_files = ["LICENSE.txt", "README.textile"]
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.require_paths = ["lib"]
17
+
18
+
19
+ s.add_development_dependency "bundler", "~> 1.0.0"
20
+ s.add_development_dependency "rspec", ">= 2.0"
21
+ s.add_development_dependency "yard"
22
+ s.add_development_dependency "RedCloth"
23
+ end
24
+
@@ -0,0 +1,87 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'pairtree'
3
+
4
+ describe "Pairtree encoding" do
5
+
6
+ def roundtrip(id, expected_encoded=nil, expected_path=nil)
7
+ encoded = Pairtree::Identifier.encode(id)
8
+ unless expected_encoded.nil?
9
+ encoded.should == expected_encoded
10
+ end
11
+ unless expected_path.nil?
12
+ path = Pairtree::Path.id_to_path(id)
13
+ path.should == expected_path
14
+ end
15
+ Pairtree::Identifier.decode(encoded).should == id
16
+ end
17
+
18
+ it "should handle a" do
19
+ roundtrip('a', 'a', 'a/a')
20
+ end
21
+
22
+ it "should handle ab" do
23
+ roundtrip('ab', 'ab', 'ab/ab')
24
+ end
25
+
26
+ it "should handle abc" do
27
+ roundtrip('abc', 'abc', 'ab/c/abc')
28
+ end
29
+
30
+ it "should handle abcd" do
31
+ roundtrip('abcd', 'abcd', 'ab/cd/abcd')
32
+ end
33
+
34
+ it "should handle space" do
35
+ roundtrip('hello world', 'hello^20world', 'he/ll/o^/20/wo/rl/d/hello^20world')
36
+ end
37
+
38
+ it "should handle slash" do
39
+ roundtrip("/","=",'=/=')
40
+ end
41
+
42
+ it "should handle urn" do
43
+ roundtrip('http://n2t.info/urn:nbn:se:kb:repos-1','http+==n2t,info=urn+nbn+se+kb+repos-1','ht/tp/+=/=n/2t/,i/nf/o=/ur/n+/nb/n+/se/+k/b+/re/po/s-/1/http+==n2t,info=urn+nbn+se+kb+repos-1')
44
+ end
45
+
46
+ it "should handle wtf" do
47
+ roundtrip('what-the-*@?#!^!?', "what-the-^2a@^3f#!^5e!^3f", "wh/at/-t/he/-^/2a/@^/3f/#!/^5/e!/^3/f/what-the-^2a@^3f#!^5e!^3f")
48
+ end
49
+
50
+ it "should handle special characters" do
51
+ roundtrip('\\"*+,<=>?^|', "^5c^22^2a^2b^2c^3c^3d^3e^3f^5e^7c")
52
+ end
53
+
54
+ it "should roundtrip hardcore Unicode" do
55
+ roundtrip(%{
56
+ 1. Euro Symbol: €.
57
+ 2. Greek: Μπορώ να φάω σπασμένα γυαλιά χωρίς να πάθω τίποτα.
58
+ 3. Íslenska / Icelandic: Ég get etið gler án þess að meiða mig.
59
+ 4. Polish: Mogę jeść szkło, i mi nie szkodzi.
60
+ 5. Romanian: Pot să mănânc sticlă și ea nu mă rănește.
61
+ 6. Ukrainian: Я можу їсти шкло, й воно мені не пошкодить.
62
+ 7. Armenian: Կրնամ ապակի ուտել և ինծի անհանգիստ չըներ։
63
+ 8. Georgian: მინას ვჭამ და არა მტკივა.
64
+ 9. Hindi: मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा नहीं होती.
65
+ 10. Hebrew(2): אני יכול לאכול זכוכית וזה לא מזיק לי.
66
+ 11. Yiddish(2): איך קען עסן גלאָז און עס טוט מיר נישט װײ.
67
+ 12. Arabic(2): أنا قادر على أكل الزجاج و هذا لا يؤلمني.
68
+ 13. Japanese: 私はガラスを食べられます。それは私を傷つけません。
69
+ 14. Thai: ฉันกินกระจกได้ แต่มันไม่ทำให้ฉันเจ็บ "
70
+ })
71
+ end
72
+
73
+ it "should roundtrip French" do
74
+ roundtrip('Années de Pèlerinage')
75
+ roundtrip(%{
76
+ Années de Pèlerinage (Years of Pilgrimage) (S.160, S.161,
77
+ S.163) is a set of three suites by Franz Liszt for solo piano. Liszt's
78
+ complete musical style is evident in this masterwork, which ranges from
79
+ virtuosic fireworks to sincerely moving emotional statements. His musical
80
+ maturity can be seen evolving through his experience and travel. The
81
+ third volume is especially notable as an example of his later style: it
82
+ was composed well after the first two volumes and often displays less
83
+ showy virtuosity and more harmonic experimentation.
84
+ })
85
+ end
86
+
87
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'pairtree'
3
+
4
+ describe "Pairtree::Obj" do
5
+
6
+ before(:all) do
7
+ @base_path = File.join(File.dirname(__FILE__), "../test_data/working")
8
+ Dir.chdir(File.join(File.dirname(__FILE__), "../test_data")) do
9
+ FileUtils.cp_r('fixtures/pairtree_root_spec', './working')
10
+ end
11
+ @root = Pairtree.at(@base_path)
12
+ @obj = @root.get('pfx:abc123def')
13
+ end
14
+
15
+ after(:all) do
16
+ FileUtils.rm_rf(@base_path)
17
+ end
18
+
19
+ it "should read a file" do
20
+ @obj.read('content.xml').should == '<content/>'
21
+ end
22
+
23
+ it "should have entries" do
24
+ @obj.entries.should == ['content.xml']
25
+ end
26
+
27
+ it "should glob" do
28
+ @obj['*.xml'].should == ['content.xml']
29
+ @obj['*.txt'].should == []
30
+ end
31
+
32
+ it "should be enumerable" do
33
+ block_body = mock('block_body')
34
+ block_body.should_receive(:yielded).with('content.xml')
35
+ @obj.each { |file| block_body.yielded(file) }
36
+ end
37
+
38
+ describe "Call a bunch of File methods" do
39
+ before(:each) do
40
+ @target = File.join(@base_path, 'pairtree_root/ab/c1/23/de/f/abc123def/content.xml')
41
+ end
42
+
43
+ it "should open a file" do
44
+ File.should_receive(:open).with(@target,'r')
45
+ @obj.open('content.xml','r')
46
+ end
47
+
48
+ it "should call delete" do
49
+ File.should_receive(:delete).with(@target)
50
+ @obj.delete('content.xml')
51
+ end
52
+
53
+ it "should call link" do
54
+ File.should_receive(:link).with(@target,@target + '.2')
55
+ @obj.link('content.xml','content.xml.2')
56
+ end
57
+
58
+ it "should call rename" do
59
+ File.should_receive(:rename).with(@target,@target + '.new')
60
+ @obj.rename('content.xml','content.xml.new')
61
+ end
62
+
63
+ it "should call utime" do
64
+ File.should_receive(:utime).with(0,1,@target)
65
+ @obj.utime(0,1,'content.xml')
66
+ end
67
+ end
68
+
69
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'pairtree'
3
+
4
+ describe "Pairtree::Path" do
5
+
6
+ after(:each) do
7
+ Pairtree::Path.set_leaf { |id| id }
8
+ end
9
+
10
+ it "should generate an encoded id as the leaf path by default" do
11
+ Pairtree::Path.leaf('abc/def').should == "abc=def"
12
+ end
13
+
14
+ it "should accept a nil override" do
15
+ Pairtree::Path.set_leaf nil
16
+ Pairtree::Path.leaf('abc/def').should == ""
17
+ end
18
+
19
+ it "should accept a scalar override" do
20
+ Pairtree::Path.set_leaf 'obj'
21
+ Pairtree::Path.leaf('abc/def').should == "obj"
22
+ end
23
+
24
+ it "should accept a Proc override" do
25
+ lp = Proc.new { |id| id.reverse }
26
+ Pairtree::Path.set_leaf(lp)
27
+ Pairtree::Path.leaf('abc/def').should == "fed=cba"
28
+ end
29
+
30
+ it "should accept a block override" do
31
+ Pairtree::Path.set_leaf { |id| id.reverse }
32
+ Pairtree::Path.leaf('abc/def').should == "fed=cba"
33
+ end
34
+
35
+ end
@@ -0,0 +1,63 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'pairtree'
3
+
4
+ describe "Pairtree::Root" do
5
+
6
+ before(:all) do
7
+ @base_path = File.join(File.dirname(__FILE__), "../test_data/working")
8
+ Dir.chdir(File.join(File.dirname(__FILE__), "../test_data")) do
9
+ FileUtils.cp_r('fixtures/pairtree_root_spec', './working')
10
+ end
11
+ @root = Pairtree.at(@base_path)
12
+ end
13
+
14
+ after(:all) do
15
+ FileUtils.rm_rf(@base_path)
16
+ end
17
+
18
+ it "should have the correct prefix" do
19
+ @root.prefix.should == 'pfx:'
20
+ end
21
+
22
+ it "should be in the correct location" do
23
+ File.expand_path(@root.path).should == File.expand_path(@base_path)
24
+ File.expand_path(@root.root).should == File.expand_path(File.join(@base_path, "pairtree_root"))
25
+ end
26
+
27
+ it "should list identifiers" do
28
+ @root.list.should == ['pfx:abc123def']
29
+ end
30
+
31
+ it "should verify whether an identifier exists" do
32
+ @root.exists?('pfx:abc123def').should be_true
33
+ @root.exists?('pfx:abc123jkl').should be_false
34
+ end
35
+
36
+ it "should raise an exception if an invalid prefix is used" do
37
+ lambda { @root.exists?('xfp:abc123def') }.should raise_error(Pairtree::IdentifierError)
38
+ end
39
+
40
+ it "should get a ppath for a valid ID" do
41
+ obj = @root.get 'pfx:abc123def'
42
+ obj.class.should == Pairtree::Obj
43
+ File.expand_path(obj.path).should == File.expand_path(File.join(@base_path, "pairtree_root/ab/c1/23/de/f/abc123def/"))
44
+ end
45
+
46
+ it "should raise an exception when attempting to get a ppath for an invalid ID" do
47
+ lambda { @root.get 'pfx:abc123jkl' }.should raise_error(Errno::ENOENT)
48
+ end
49
+
50
+ it "should create a new ppath" do
51
+ obj = @root.mk 'pfx:abc123jkl'
52
+ obj.class.should == Pairtree::Obj
53
+ File.expand_path(obj.path).should == File.expand_path(File.join(@base_path, "pairtree_root/ab/c1/23/jk/l/abc123jkl/"))
54
+ @root.exists?('pfx:abc123jkl').should be_true
55
+ end
56
+
57
+ it "should delete a ppath" do
58
+ @root.exists?('pfx:abc123jkl').should be_true
59
+ @root.purge!('pfx:abc123jkl')
60
+ @root.exists?('pfx:abc123jkl').should be_false
61
+ end
62
+
63
+ end
@@ -0,0 +1,69 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'pairtree'
3
+
4
+ describe "Pairtree" do
5
+
6
+ before(:all) do
7
+ @base_path = File.join(File.dirname(__FILE__), "../test_data/working")
8
+ end
9
+
10
+ it "should raise an error if a non-existent is specified without :create" do
11
+ lambda { Pairtree.at(@base_path) }.should raise_error(Pairtree::PathError)
12
+ end
13
+
14
+ describe "new pairtree" do
15
+ after(:all) do
16
+ FileUtils.rm_rf(@base_path)
17
+ end
18
+
19
+ it "should create a new pairtree" do
20
+ prefix = 'my_prefix:'
21
+ pt = Pairtree.at(@base_path, :prefix => prefix, :create => true)
22
+ pt.prefix.should == prefix
23
+ File.read(File.join(@base_path, 'pairtree_prefix')).should == prefix
24
+ pt.root.should == File.join(@base_path, 'pairtree_root')
25
+ pt.pairtree_version.should == Pairtree::SPEC_VERSION
26
+ end
27
+
28
+ end
29
+
30
+ describe "existing pairtree" do
31
+ before(:all) do
32
+ Dir.chdir(File.join(File.dirname(__FILE__), "../test_data")) do
33
+ FileUtils.cp_r('fixtures/pairtree_root_spec', './working')
34
+ end
35
+ end
36
+
37
+ after(:all) do
38
+ FileUtils.rm_rf(@base_path)
39
+ end
40
+
41
+ it "should raise an error if a regular file is specified as a root" do
42
+ lambda { Pairtree.at(File.join(@base_path, "pairtree_prefix"), :create => true) }.should raise_error(Pairtree::PathError)
43
+ end
44
+
45
+ it "should read the prefix if none is specified" do
46
+ Pairtree.at(@base_path).prefix.should == File.read(File.join(@base_path, 'pairtree_prefix'))
47
+ end
48
+
49
+ it "should not complain if the given prefix matches the saved prefix" do
50
+ Pairtree.at(@base_path, :prefix => 'pfx:').prefix.should == File.read(File.join(@base_path, 'pairtree_prefix'))
51
+ end
52
+
53
+ it "should raise an error if the given prefix does not match the saved prefix" do
54
+ lambda { Pairtree.at(@base_path, :prefix => 'wrong-prefix:') }.should raise_error(Pairtree::IdentifierError)
55
+ end
56
+
57
+ it "should not complain if the given version matches the saved version" do
58
+ Pairtree.at(@base_path, :version => Pairtree::SPEC_VERSION).pairtree_version.should == Pairtree::SPEC_VERSION
59
+ Pairtree.at(@base_path, :version => Pairtree::SPEC_VERSION, :create => true).pairtree_version.should == Pairtree::SPEC_VERSION
60
+ end
61
+
62
+ it "should raise an error if the given version does not match the saved version" do
63
+ lambda { Pairtree.at(@base_path, :version => 0.2) }.should raise_error(Pairtree::VersionMismatch)
64
+ lambda { Pairtree.at(@base_path, :version => 0.2, :create => true) }.should raise_error(Pairtree::VersionMismatch)
65
+ end
66
+
67
+ end
68
+
69
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'bundler/setup'
5
+ require 'rspec'
6
+ require 'rspec/autorun'
7
+
8
+ RSpec.configure do |config|
9
+
10
+ end
@@ -0,0 +1 @@
1
+ This directory conforms to Pairtree Version 0.1. Updated spec: http://www.cdlib.org/inside/diglib/pairtree/pairtreespec.html
metadata CHANGED
@@ -1,141 +1,123 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pairtree
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 0
10
- version: 0.0.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Chris Beer
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2010-12-23 00:00:00 -05:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2010-12-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: &2164523720 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
22
  type: :development
23
23
  prerelease: false
24
- name: shoulda
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: *2164523720
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2164523000 !ruby/object:Gem::Requirement
26
28
  none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
34
- requirement: *id001
35
- - !ruby/object:Gem::Dependency
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
36
33
  type: :development
37
34
  prerelease: false
38
- name: bundler
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
35
+ version_requirements: *2164523000
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: &2164522020 !ruby/object:Gem::Requirement
40
39
  none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 23
45
- segments:
46
- - 1
47
- - 0
48
- - 0
49
- version: 1.0.0
50
- requirement: *id002
51
- - !ruby/object:Gem::Dependency
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
52
44
  type: :development
53
45
  prerelease: false
54
- name: jeweler
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
46
+ version_requirements: *2164522020
47
+ - !ruby/object:Gem::Dependency
48
+ name: RedCloth
49
+ requirement: &2164521500 !ruby/object:Gem::Requirement
56
50
  none: false
57
- requirements:
58
- - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 1
61
- segments:
62
- - 1
63
- - 5
64
- - 1
65
- version: 1.5.1
66
- requirement: *id003
67
- - !ruby/object:Gem::Dependency
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
68
55
  type: :development
69
56
  prerelease: false
70
- name: rcov
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 3
77
- segments:
78
- - 0
79
- version: "0"
80
- requirement: *id004
57
+ version_requirements: *2164521500
81
58
  description:
82
59
  email: chris@cbeer.info
83
60
  executables: []
84
-
85
61
  extensions: []
86
-
87
- extra_rdoc_files:
62
+ extra_rdoc_files:
88
63
  - LICENSE.txt
89
- - README.rdoc
90
- files:
64
+ - README.textile
65
+ files:
91
66
  - .document
67
+ - .gitignore
92
68
  - Gemfile
93
69
  - LICENSE.txt
94
- - README.rdoc
70
+ - README.textile
95
71
  - Rakefile
96
- - VERSION
97
72
  - lib/pairtree.rb
98
- - lib/pairtree/client.rb
99
73
  - lib/pairtree/identifier.rb
100
74
  - lib/pairtree/obj.rb
101
75
  - lib/pairtree/path.rb
102
76
  - lib/pairtree/root.rb
103
- - test/helper.rb
104
- - test/test_pairtree.rb
105
- has_rdoc: true
106
- homepage: http://github.com/cbeer/pairtree
107
- licenses:
108
- - MIT
77
+ - lib/tasks/rdoc.rake
78
+ - pairtree.gemspec
79
+ - spec/pairtree/pairtree_encoding_spec.rb
80
+ - spec/pairtree/pairtree_obj_spec.rb
81
+ - spec/pairtree/pairtree_path_spec.rb
82
+ - spec/pairtree/pairtree_root_spec.rb
83
+ - spec/pairtree/pairtree_spec.rb
84
+ - spec/spec_helper.rb
85
+ - spec/test_data/fixtures/pairtree_root_spec/pairtree_prefix
86
+ - spec/test_data/fixtures/pairtree_root_spec/pairtree_root/ab/c1/23/de/f/abc123def/content.xml
87
+ - spec/test_data/fixtures/pairtree_root_spec/pairtree_version0_1
88
+ homepage: http://github.com/microservices/pairtree
89
+ licenses:
90
+ - Apache2
109
91
  post_install_message:
110
92
  rdoc_options: []
111
-
112
- require_paths:
93
+ require_paths:
113
94
  - lib
114
- required_ruby_version: !ruby/object:Gem::Requirement
95
+ required_ruby_version: !ruby/object:Gem::Requirement
115
96
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
- version: "0"
123
- required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
102
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
132
107
  requirements: []
133
-
134
108
  rubyforge_project:
135
- rubygems_version: 1.3.7
109
+ rubygems_version: 1.8.10
136
110
  signing_key:
137
111
  specification_version: 3
138
112
  summary: Ruby Pairtree implementation
139
- test_files:
140
- - test/helper.rb
141
- - test/test_pairtree.rb
113
+ test_files:
114
+ - spec/pairtree/pairtree_encoding_spec.rb
115
+ - spec/pairtree/pairtree_obj_spec.rb
116
+ - spec/pairtree/pairtree_path_spec.rb
117
+ - spec/pairtree/pairtree_root_spec.rb
118
+ - spec/pairtree/pairtree_spec.rb
119
+ - spec/spec_helper.rb
120
+ - spec/test_data/fixtures/pairtree_root_spec/pairtree_prefix
121
+ - spec/test_data/fixtures/pairtree_root_spec/pairtree_root/ab/c1/23/de/f/abc123def/content.xml
122
+ - spec/test_data/fixtures/pairtree_root_spec/pairtree_version0_1
123
+ has_rdoc: