resync-client 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +42 -0
  3. data/.rubocop.yml +23 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +2 -0
  6. data/Gemfile +3 -0
  7. data/LICENSE.md +22 -0
  8. data/README.md +59 -0
  9. data/Rakefile +56 -0
  10. data/example.rb +49 -0
  11. data/lib/resync/client/bitstream.rb +79 -0
  12. data/lib/resync/client/client.rb +58 -0
  13. data/lib/resync/client/downloadable.rb +35 -0
  14. data/lib/resync/client/dump.rb +25 -0
  15. data/lib/resync/client/http_helper.rb +111 -0
  16. data/lib/resync/client/resync_extensions.rb +85 -0
  17. data/lib/resync/client/version.rb +6 -0
  18. data/lib/resync/client/zip_package.rb +66 -0
  19. data/lib/resync/client.rb +3 -0
  20. data/resync-client.gemspec +35 -0
  21. data/spec/data/examples/capability-list.xml +25 -0
  22. data/spec/data/examples/change-dump-manifest.xml +41 -0
  23. data/spec/data/examples/change-dump.xml +41 -0
  24. data/spec/data/examples/change-list-index.xml +22 -0
  25. data/spec/data/examples/change-list.xml +36 -0
  26. data/spec/data/examples/resource-dump-manifest.xml +25 -0
  27. data/spec/data/examples/resource-dump.xml +39 -0
  28. data/spec/data/examples/resource-list-index.xml +21 -0
  29. data/spec/data/examples/resource-list.xml +24 -0
  30. data/spec/data/examples/source-description.xml +25 -0
  31. data/spec/data/resourcedump/manifest.xml +18 -0
  32. data/spec/data/resourcedump/resourcedump.xml +16 -0
  33. data/spec/data/resourcedump/resourcedump.zip +0 -0
  34. data/spec/data/resourcedump/resources/res1 +7 -0
  35. data/spec/data/resourcedump/resources/res2 +7 -0
  36. data/spec/rspec_custom_matchers.rb +11 -0
  37. data/spec/spec_helper.rb +31 -0
  38. data/spec/todo.rb +65 -0
  39. data/spec/unit/resync/client/bitstream_spec.rb +90 -0
  40. data/spec/unit/resync/client/client_spec.rb +130 -0
  41. data/spec/unit/resync/client/dump_spec.rb +26 -0
  42. data/spec/unit/resync/client/http_helper_spec.rb +235 -0
  43. data/spec/unit/resync/client/resync_extensions_spec.rb +148 -0
  44. data/spec/unit/resync/client/zip_package_spec.rb +44 -0
  45. metadata +238 -0
@@ -0,0 +1,66 @@
1
+ require 'rexml/document'
2
+ require 'zip'
3
+ require_relative 'bitstream'
4
+
5
+ module Resync
6
+ # A ZIP package of resources or changes, providing access to individual
7
+ # bitstreams based on the included manifest file.
8
+ #
9
+ class ZipPackage
10
+
11
+ # ------------------------------------------------------------
12
+ # Attributes
13
+
14
+ # @return [Zip::File] the ZIP file wrapped by this package
15
+ attr_reader :zipfile
16
+
17
+ # @return [ResourceDumpManifest, ChangeDumpManifest] the manifest
18
+ # for the ZIP package
19
+ attr_reader :manifest
20
+
21
+ # ------------------------------------------------------------
22
+ # Initializer
23
+
24
+ # Creates a new +ZipPackage+ for the specified file.
25
+ #
26
+ # @param zipfile [Zip::File, String] the ZIP file, or a path to it.
27
+ def initialize(zipfile)
28
+ self.zipfile = zipfile
29
+ end
30
+
31
+ # ------------------------------------------------------------
32
+ # Public methods
33
+
34
+ # Gets the bitstream for the specified resource. (Note that this
35
+ # does no validation; if the resource is not in the manifest, or
36
+ # the corresponding entry is not in the ZIP file, the behavior of
37
+ # the returned {Bitstream} is undefined.)
38
+ #
39
+ # @return [Bitstream] a bitstream wrapping the ZIP entry for the
40
+ # specified resource.
41
+ def bitstream_for(resource)
42
+ Bitstream.new(zipfile: @zipfile, resource: resource)
43
+ end
44
+
45
+ # Gets all bitstreams declared in the package manifest.
46
+ # @return [Array<Bitstream>] a list of all bitstreams in the package
47
+ def bitstreams
48
+ manifest.resources.map { |r| bitstream_for(r) }
49
+ end
50
+
51
+ # ------------------------------------------------------------
52
+ # Private methods
53
+
54
+ private
55
+
56
+ def zipfile=(value)
57
+ zipfile = value.is_a?(Zip::File) ? value : Zip::File.open(value)
58
+ manifest_entry = zipfile.find_entry('manifest.xml')
59
+ fail "No manifest.xml found in zipfile #{zipfile.name}" unless manifest_entry
60
+ manifest_stream = manifest_entry.get_input_stream
61
+ @manifest = XMLParser.parse(manifest_stream)
62
+ @zipfile = zipfile
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,3 @@
1
+ require 'resync'
2
+
3
+ Dir.glob(File.expand_path('../client/*.rb', __FILE__), &method(:require))
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'resync/client/version'
6
+ require 'uri'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'resync-client'
10
+ spec.version = Resync::Client::VERSION
11
+ spec.authors = ['David Moles']
12
+ spec.email = ['david.moles@ucop.edu']
13
+ spec.summary = 'Client library for ResourceSync'
14
+ spec.description = 'A Ruby client for the ResourceSync web synchronization framework'
15
+ spec.license = 'MIT'
16
+
17
+ origin_uri = URI(`git config --get remote.origin.url`.chomp)
18
+ spec.homepage = URI::HTTP.build(host: origin_uri.host, path: origin_uri.path.chomp('.git')).to_s
19
+
20
+ spec.files = `git ls-files -z`.split("\x0")
21
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.add_dependency 'resync', '~> 0.1.0'
26
+ spec.add_dependency 'rubyzip', '~> 1.1.7'
27
+
28
+ spec.add_development_dependency 'equivalent-xml', '~> 0.6.0'
29
+ spec.add_development_dependency 'rake', '~> 10.4'
30
+ spec.add_development_dependency 'rspec', '~> 3.2'
31
+ spec.add_development_dependency 'rubocop', '~> 0.29.1'
32
+ spec.add_development_dependency 'simplecov', '~> 0.9.2'
33
+ spec.add_development_dependency 'simplecov-console', '~> 0.2.0'
34
+ spec.add_development_dependency 'yard', '~> 0.8'
35
+ end
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="describedby"
5
+ href="http://example.com/info_about_set1_of_resources.xml"/>
6
+ <rs:ln rel="up"
7
+ href="http://example.com/resourcesync_description.xml"/>
8
+ <rs:md capability="capabilitylist"/>
9
+ <url>
10
+ <loc>http://example.com/dataset1/resourcelist.xml</loc>
11
+ <rs:md capability="resourcelist"/>
12
+ </url>
13
+ <url>
14
+ <loc>http://example.com/dataset1/resourcedump.xml</loc>
15
+ <rs:md capability="resourcedump"/>
16
+ </url>
17
+ <url>
18
+ <loc>http://example.com/dataset1/changelist.xml</loc>
19
+ <rs:md capability="changelist"/>
20
+ </url>
21
+ <url>
22
+ <loc>http://example.com/dataset1/changedump.xml</loc>
23
+ <rs:md capability="changedump"/>
24
+ </url>
25
+ </urlset>
@@ -0,0 +1,41 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="changedump-manifest"
7
+ from="2013-01-02T00:00:00Z"
8
+ until="2013-01-03T00:00:00Z"/>
9
+ <url>
10
+ <loc>http://example.com/res7.html</loc>
11
+ <lastmod>2013-01-02T12:00:00Z</lastmod>
12
+ <rs:md change="created"
13
+ hash="md5:1c1b0e264fa9b7e1e9aa6f9db8d6362b"
14
+ length="4339"
15
+ type="text/html"
16
+ path="/changes/res7.html"/>
17
+ </url>
18
+ <url>
19
+ <loc>http://example.com/res9.pdf</loc>
20
+ <lastmod>2013-01-02T13:00:00Z</lastmod>
21
+ <rs:md change="updated"
22
+ hash="md5:f906610c3d4aa745cb2b986f25b37c5a"
23
+ length="38297"
24
+ type="application/pdf"
25
+ path="/changes/res9.pdf"/>
26
+ </url>
27
+ <url>
28
+ <loc>http://example.com/res5.tiff</loc>
29
+ <lastmod>2013-01-02T19:00:00Z</lastmod>
30
+ <rs:md change="deleted"/>
31
+ </url>
32
+ <url>
33
+ <loc>http://example.com/res7.html</loc>
34
+ <lastmod>2013-01-02T20:00:00Z</lastmod>
35
+ <rs:md change="updated"
36
+ hash="md5:0988647082c8bc51778894a48ec3b576"
37
+ length="5426"
38
+ type="text/html"
39
+ path="/changes/res7-v2.html"/>
40
+ </url>
41
+ </urlset>
@@ -0,0 +1,41 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="changedump"
7
+ from="2013-01-01T00:00:00Z"/>
8
+ <url>
9
+ <loc>http://example.com/20130101-changedump.zip</loc>
10
+ <lastmod>2013-01-01T23:59:59Z</lastmod>
11
+ <rs:md type="application/zip"
12
+ length="3109"
13
+ from="2013-01-01T00:00:00Z"
14
+ until="2013-01-02T00:00:00Z"/>
15
+ <rs:ln rel="contents"
16
+ href="http://example.com/20130101-changedump-manifest.xml"
17
+ type="application/xml"/>
18
+ </url>
19
+ <url>
20
+ <loc>http://example.com/20130102-changedump.zip</loc>
21
+ <lastmod>2013-01-02T23:59:59Z</lastmod>
22
+ <rs:md type="application/zip"
23
+ length="6629"
24
+ from="2013-01-02T00:00:00Z"
25
+ until="2013-01-03T00:00:00Z"/>
26
+ <rs:ln rel="contents"
27
+ href="http://example.com/20130102-changedump-manifest.xml"
28
+ type="application/xml"/>
29
+ </url>
30
+ <url>
31
+ <loc>http://example.com/20130103-changedump.zip</loc>
32
+ <lastmod>2013-01-03T23:59:59Z</lastmod>
33
+ <rs:md type="application/zip"
34
+ length="8124"
35
+ from="2013-01-03T00:00:00Z"
36
+ until="2013-01-04T00:00:00Z"/>
37
+ <rs:ln rel="contents"
38
+ href="http://example.com/20130103-changedump-manifest.xml"
39
+ type="application/xml"/>
40
+ </url>
41
+ </urlset>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="changelist"
7
+ from="2013-01-01T00:00:00Z"/>
8
+ <sitemap>
9
+ <loc>http://example.com/20130101-changelist.xml</loc>
10
+ <rs:md from="2013-01-01T00:00:00Z"
11
+ until="2013-01-02T00:00:00Z"/>
12
+ </sitemap>
13
+ <sitemap>
14
+ <loc>http://example.com/20130102-changelist.xml</loc>
15
+ <rs:md from="2013-01-02T00:00:00Z"
16
+ until="2013-01-03T00:00:00Z"/>
17
+ </sitemap>
18
+ <sitemap>
19
+ <loc>http://example.com/20130103-changelist.xml</loc>
20
+ <rs:md from="2013-01-03T00:00:00Z"/>
21
+ </sitemap>
22
+ </sitemapindex>
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="changelist"
7
+ from="2013-01-03T00:00:00Z"/>
8
+ <url>
9
+ <loc>http://example.com/res4</loc>
10
+ <lastmod>2013-01-03T17:00:00Z</lastmod>
11
+ <rs:md change="updated"
12
+ hash="sha-256:f4OxZX_x_DFGFDgghgdfb6rtSx-iosjf6735432nklj"
13
+ length="56778"
14
+ type="application/json"/>
15
+ <rs:ln rel="http://www.openarchives.org/rs/terms/patch"
16
+ href="http://example.com/res4-json-patch"
17
+ modified="2013-01-03T17:00:00Z"
18
+ hash="sha-256:y66dER_t_HWEIKpesdkeb7rtSc-ippjf9823742opld"
19
+ length="73"
20
+ type="application/json-patch"/>
21
+ </url>
22
+ <url>
23
+ <loc>http://example.com/res5-full.tiff</loc>
24
+ <lastmod>2013-01-03T18:00:00Z</lastmod>
25
+ <rs:md change="updated"
26
+ hash="sha-256:f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk"
27
+ length="9788456778"
28
+ type="image/tiff"/>
29
+ <rs:ln rel="http://www.openarchives.org/rs/terms/patch"
30
+ href="http://example.com/res5-diff"
31
+ modified="2013-01-03T18:00:00Z"
32
+ hash="sha-256:h986gT_t_87HTkjHYE76G558hY-jdfgy76t55sadJUYT"
33
+ length="4533"
34
+ type="application/x-tiff-diff"/>
35
+ </url>
36
+ </urlset>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="resourcedump-manifest"
7
+ at="2013-01-03T09:00:00Z"
8
+ completed="2013-01-03T09:02:00Z"/>
9
+ <url>
10
+ <loc>http://example.com/res1</loc>
11
+ <lastmod>2013-01-02T13:00:00Z</lastmod>
12
+ <rs:md hash="md5:1584abdf8ebdc9802ac0c6a7402c03b6"
13
+ length="8876"
14
+ type="text/html"
15
+ path="/resources/res1"/>
16
+ </url>
17
+ <url>
18
+ <loc>http://example.com/res2</loc>
19
+ <lastmod>2013-01-02T14:00:00Z</lastmod>
20
+ <rs:md hash="md5:1e0d5cb8ef6ba40c99b14c0237be735e sha-256:854f61290e2e197a11bc91063afce22e43f8ccc655237050ace766adc68dc784"
21
+ length="14599"
22
+ type="application/pdf"
23
+ path="/resources/res2"/>
24
+ </url>
25
+ </urlset>
@@ -0,0 +1,39 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="resourcedump"
7
+ at="2013-01-03T09:00:00Z"
8
+ completed="2013-01-03T09:04:00Z"/>
9
+ <url>
10
+ <loc>http://example.com/resourcedump-part1.zip</loc>
11
+ <rs:md type="application/zip"
12
+ length="4765"
13
+ at="2013-01-03T09:00:00Z"
14
+ completed="2013-01-03T09:02:00Z"/>
15
+ <rs:ln rel="contents"
16
+ href="http://example.com/resourcedump_manifest-part1.xml"
17
+ type="application/xml"/>
18
+ </url>
19
+ <url>
20
+ <loc>http://example.com/resourcedump-part2.zip</loc>
21
+ <rs:md type="application/zip"
22
+ length="9875"
23
+ at="2013-01-03T09:01:00Z"
24
+ completed="2013-01-03T09:03:00Z"/>
25
+ <rs:ln rel="contents"
26
+ href="http://example.com/resourcedump_manifest-part2.xml"
27
+ type="application/xml"/>
28
+ </url>
29
+ <url>
30
+ <loc>http://example.com/resourcedump-part3.zip</loc>
31
+ <rs:md type="application/zip"
32
+ length="2298"
33
+ at="2013-01-03T09:03:00Z"
34
+ completed="2013-01-03T09:04:00Z"/>
35
+ <rs:ln rel="contents"
36
+ href="http://example.com/resourcedump_manifest-part3.xml"
37
+ type="application/xml"/>
38
+ </url>
39
+ </urlset>
@@ -0,0 +1,21 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:md capability="resourcelist"
7
+ at="2013-01-03T09:00:00Z"
8
+ completed="2013-01-03T09:10:00Z"/>
9
+ <sitemap>
10
+ <loc>http://example.com/resourcelist1.xml</loc>
11
+ <rs:md at="2013-01-03T09:00:00Z"/>
12
+ </sitemap>
13
+ <sitemap>
14
+ <loc>http://example.com/resourcelist2.xml</loc>
15
+ <rs:md at="2013-01-03T09:03:00Z"/>
16
+ </sitemap>
17
+ <sitemap>
18
+ <loc>http://example.com/resourcelist3.xml</loc>
19
+ <rs:md at="2013-01-03T09:07:00Z"/>
20
+ </sitemap>
21
+ </sitemapindex>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/dataset1/capabilitylist.xml"/>
6
+ <rs:ln rel="index"
7
+ href="http://example.com/dataset1/resourcelist-index.xml"/>
8
+ <rs:md capability="resourcelist"
9
+ at="2013-01-03T09:00:00Z"/>
10
+ <url>
11
+ <loc>http://example.com/res3</loc>
12
+ <lastmod>2013-01-02T13:00:00Z</lastmod>
13
+ <rs:md hash="md5:1584abdf8ebdc9802ac0c6a7402c8753"
14
+ length="4385"
15
+ type="application/pdf"/>
16
+ </url>
17
+ <url>
18
+ <loc>http://example.com/res4</loc>
19
+ <lastmod>2013-01-02T14:00:00Z</lastmod>
20
+ <rs:md hash="md5:4556abdf8ebdc9802ac0c6a7402c9881"
21
+ length="883"
22
+ type="image/png"/>
23
+ </url>
24
+ </urlset>
@@ -0,0 +1,25 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="describedby"
5
+ href="http://example.com/info_about_source.xml"/>
6
+ <rs:md capability="description"/>
7
+ <url>
8
+ <loc>http://example.com/capabilitylist1.xml</loc>
9
+ <rs:md capability="capabilitylist"/>
10
+ <rs:ln rel="describedby"
11
+ href="http://example.com/info_about_set1_of_resources.xml"/>
12
+ </url>
13
+ <url>
14
+ <loc>http://example.com/capabilitylist2.xml</loc>
15
+ <rs:md capability="capabilitylist"/>
16
+ <rs:ln rel="describedby"
17
+ href="http://example.com/info_about_set2_of_resources.xml"/>
18
+ </url>
19
+ <url>
20
+ <loc>http://example.com/capabilitylist3.xml</loc>
21
+ <rs:md capability="capabilitylist"/>
22
+ <rs:ln rel="describedby"
23
+ href="http://example.com/info_about_set3_of_resources.xml"/>
24
+ </url>
25
+ </urlset>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:md capability="resourcedump-manifest"
5
+ at="2015-05-05T16:19:25Z"/>
6
+ <url>
7
+ <loc>http://example.com/res1</loc>
8
+ <lastmod>2015-05-22T16:14:55Z</lastmod>
9
+ <rs:md hash="md5:51b99b46c9980623b36b27e06a7e4a46"
10
+ path="/resources/res1"/>
11
+ </url>
12
+ <url>
13
+ <loc>http://example.com/res2</loc>
14
+ <lastmod>2015-05-22T16:16:04Z</lastmod>
15
+ <rs:md hash="md5:6205d276e0c120eb4bac47c14a8297d8"
16
+ path="/resources/res2"/>
17
+ </url>
18
+ </urlset>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
3
+ xmlns:rs="http://www.openarchives.org/rs/terms/">
4
+ <rs:ln rel="up"
5
+ href="http://example.com/capabilitylist.xml"/>
6
+ <rs:md capability="resourcedump"
7
+ at="2015-05-22T16:06:04Z"
8
+ completed="2015-05-05T16:23:20Z"/>
9
+ <url>
10
+ <loc>http://example.com/resourcedump.zip</loc>
11
+ <rs:md type="application/zip"
12
+ length="1334"
13
+ at="2015-05-22T16:06:04Z"
14
+ completed="2015-05-05T16:23:20Z"/>
15
+ </url>
16
+ </urlset>
@@ -0,0 +1,7 @@
1
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
2
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
3
+ minim veniam, quis nostrud exercitation ullamco laboris nisi ut
4
+ aliquip ex ea commodo consequat. Duis aute irure dolor in
5
+ reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
6
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
7
+ culpa qui officia deserunt mollit anim id est laborum.
@@ -0,0 +1,7 @@
1
+ Quo usque tandem abutere, Catilina, patientia nostra? quam diu etiam
2
+ furor iste tuus nos eludet? quem ad finem sese effrenata iactabit
3
+ audacia? Nihilne te nocturnum praesidium Palati, nihil urbis vigiliae,
4
+ nihil timor populi, nihil concursus bonorum omnium, nihil hic
5
+ munitissimus habendi senatus locus, nihil horum ora voltusque
6
+ moverunt? Patere tua consilia non sentis, constrictam iam horum omnium
7
+ scientia teneri coniurationem tuam non vides?
@@ -0,0 +1,11 @@
1
+ require 'rspec/expectations'
2
+
3
+ RSpec::Matchers.define :request_for do |h|
4
+ match do |actual|
5
+ begin
6
+ !h.key?(:uri) || actual.uri == h[:uri] &&
7
+ !h.key?(:method) || actual.method == h[:method] &&
8
+ !h.key?(:headers) || actual.to_hash == h[:headers]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ # ------------------------------------------------------------
2
+ # SimpleCov setup
3
+
4
+ if ENV['COVERAGE']
5
+ require 'simplecov'
6
+ require 'simplecov-console'
7
+
8
+ SimpleCov.minimum_coverage 100
9
+ SimpleCov.start do
10
+ add_filter '/spec/'
11
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
12
+ SimpleCov::Formatter::HTMLFormatter,
13
+ SimpleCov::Formatter::Console,
14
+ ]
15
+ end
16
+ end
17
+
18
+ # ------------------------------------------------------------
19
+ # Rspec configuration
20
+
21
+ RSpec.configure do |config|
22
+ config.raise_errors_for_deprecations!
23
+ config.mock_with :rspec
24
+ end
25
+
26
+ require 'rspec_custom_matchers'
27
+
28
+ # ------------------------------------------------------------
29
+ # resync-client
30
+
31
+ require 'resync/client'
data/spec/todo.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'rspec/core'
2
+ require 'resync/client'
3
+
4
+ # List of TODO items in spec form
5
+ module Resync
6
+ describe Client do
7
+ describe 'discovery' do
8
+ it 'retrieves a Source Description from a URI'
9
+ end
10
+
11
+ describe 'capability lists' do
12
+ it 'retrieves a Capability List from a URI'
13
+ end
14
+
15
+ describe 'resource lists' do
16
+ it 'retrieves a Resource List from a URI'
17
+ end
18
+
19
+ describe 'resource list indices' do
20
+ it 'retrieves a Resource List Index from a URI'
21
+ end
22
+
23
+ describe 'resource dumps' do
24
+ it 'retrieves a Resource Dump from a URI'
25
+ describe 'bitstream packages' do
26
+ it 'can download and cache a bitstream package'
27
+ it 'can extract a resource dump manifest from a ZIP bitstream package'
28
+ it 'can extract a resource from a ZIP bitstream package based on a path in a manifest'
29
+ end
30
+ end
31
+
32
+ describe 'resource dump manifests' do
33
+ it 'retrieves a Resource Dump Manifest from a URI'
34
+ end
35
+
36
+ describe 'change lists' do
37
+ it 'retrieves a Change List from a URI'
38
+ end
39
+
40
+ describe 'change list indices' do
41
+ it 'retrieves a Change List Index from a URI'
42
+ end
43
+
44
+ describe 'change dumps' do
45
+ it 'retrieves a Change Dump from a URI'
46
+ describe 'bitstream packages' do
47
+ it 'gets the "contents" link URI for the change dump manifest, if present'
48
+ it 'can download and cache a bitstream package'
49
+ it 'can extract a change dump manifest from a ZIP bitstream package'
50
+ it 'can extract a resource from a ZIP bitstream package based on a path in a manifest'
51
+ end
52
+ end
53
+
54
+ describe 'change dump manifests' do
55
+ it 'retrieves a Change Dump Manifest from a URI'
56
+ end
57
+
58
+ describe 'error handling' do
59
+ it 'handles server errors gracefully'
60
+ end
61
+
62
+ it 'does something clever for mirrors, alternate representations, and related resources'
63
+
64
+ end
65
+ end