resync-client 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +4 -0
- data/lib/resync/client/dump.rb +5 -4
- data/lib/resync/client/version.rb +1 -1
- data/lib/resync/client/zip_packages.rb +51 -0
- data/resync-client.gemspec +1 -1
- data/spec/unit/resync/client/zip_packages_spec.rb +54 -0
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 541947c7770153caf12143dc26d885166877c4bd
|
4
|
+
data.tar.gz: 5b7aa7977c089a5d09c7997d92088a695cece901
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d4c7fa6f2ea310e34ff78c2fe956c99e1967ec4c4bba23d88a42cf5e0cc11ff5e4d84e8f88d2b79cf3f446132dbf97ab8e20ae903d90d58fa6306361c2e7c45
|
7
|
+
data.tar.gz: b23323bc0c7ca29050e4379d8596fb7d4b51f16f9f14fee80e62be12f0b4d2fd0fd34b541825d77b8d8f825b883cdf94bc569e007b02d8c8994dc9d341b5d34f
|
data/CHANGES.md
CHANGED
data/lib/resync/client/dump.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'zip_packages'
|
2
2
|
|
3
3
|
module Resync
|
4
4
|
# Extends {ChangeDump} and {ResourceDump} to provide
|
@@ -16,10 +16,11 @@ module Resync
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
# A list of the {ZipPackage}s for each resource
|
20
|
-
# @return [
|
19
|
+
# A list (downloaded lazily) of the {ZipPackage}s for each resource
|
20
|
+
# @return [ZipPackages] the zip packages for each resource
|
21
21
|
def zip_packages
|
22
|
-
|
22
|
+
@zip_packages ||= ZipPackages.new(resources)
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
25
26
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Resync
|
2
|
+
# Lazily retrieves and caches the zip packages for the specified
|
3
|
+
# list of resources. The packages are cached to temporary files
|
4
|
+
# which are deleted on exit; if they are deleted while the
|
5
|
+
# interpreter is running, the behavior is undefined (but bad things
|
6
|
+
# are likely to happen).
|
7
|
+
class ZipPackages
|
8
|
+
include Enumerable
|
9
|
+
|
10
|
+
# Creates a new {ZipPackages} wrapper for the specified list
|
11
|
+
# of resources.
|
12
|
+
# @param resources [Array<Resource>] The list of resources to
|
13
|
+
# get zip packages for.
|
14
|
+
def initialize(resources)
|
15
|
+
@resources = resources
|
16
|
+
@packages = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
# Gets the size of this list of packages.
|
20
|
+
# @return the size of the underlying array.
|
21
|
+
def size
|
22
|
+
@resources.size
|
23
|
+
end
|
24
|
+
|
25
|
+
# Gets the zip package at the specified index, downloading it
|
26
|
+
# if necessary.
|
27
|
+
#
|
28
|
+
# @return [ZipPackage] the zip package for the resource at the
|
29
|
+
# specified index in the underlying array.
|
30
|
+
def [](key)
|
31
|
+
resource = @resources[key]
|
32
|
+
package_for(resource)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Gets the zip package for the specified resource, downloading it
|
36
|
+
# if necessary.
|
37
|
+
# @return [ZipPackage] the package for the resource
|
38
|
+
def package_for(resource)
|
39
|
+
@packages[resource] ||= resource.zip_package
|
40
|
+
end
|
41
|
+
|
42
|
+
# Lazily iterates the given block for each zip package, downloading
|
43
|
+
# as necessary.
|
44
|
+
# @param &block [Block] The block to iterate
|
45
|
+
def each
|
46
|
+
@resources.lazy.each do |resource|
|
47
|
+
yield package_for(resource)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/resync-client.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
25
|
spec.add_dependency 'resync', '~> 0.1', '>= 0.1.1'
|
26
|
-
spec.add_dependency 'rubyzip', '~> 1.1
|
26
|
+
spec.add_dependency 'rubyzip', '~> 1.1'
|
27
27
|
|
28
28
|
spec.add_development_dependency 'equivalent-xml', '~> 0.6.0'
|
29
29
|
spec.add_development_dependency 'rake', '~> 10.4'
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Resync
|
4
|
+
describe ZipPackages do
|
5
|
+
it 'is lazy' do
|
6
|
+
resources = Array.new(3) { |i| Resource.new(uri: "http://example.org/res#{i}") }
|
7
|
+
|
8
|
+
zip_packages = ZipPackages.new(resources)
|
9
|
+
|
10
|
+
zip_package = instance_double(ZipPackage)
|
11
|
+
expect(resources[0]).not_to receive(:zip_package)
|
12
|
+
expect(resources[1]).not_to receive(:zip_package)
|
13
|
+
expect(resources[2]).to receive(:zip_package).and_return(zip_package)
|
14
|
+
|
15
|
+
expect(zip_packages[2]).to be(zip_package)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'caches zip packages' do
|
19
|
+
resources = Array.new(3) { |i| Resource.new(uri: "http://example.org/res#{i}") }
|
20
|
+
|
21
|
+
zip_packages = ZipPackages.new(resources)
|
22
|
+
|
23
|
+
zip_package = instance_double(ZipPackage)
|
24
|
+
expect(resources[1]).to receive(:zip_package).once.and_return(zip_package)
|
25
|
+
|
26
|
+
expect(zip_packages[1]).to be(zip_package)
|
27
|
+
expect(zip_packages[1]).to be(zip_package)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'supports lazy iteration' do
|
31
|
+
manifests = Array.new(3) { instance_double(ChangeDumpManifest) }
|
32
|
+
all_packages = Array.new(3) do |index|
|
33
|
+
zip_package = instance_double(ZipPackage)
|
34
|
+
allow(zip_package).to receive(:manifest).and_return(manifests[index])
|
35
|
+
zip_package
|
36
|
+
end
|
37
|
+
resources = Array.new(3) do |index|
|
38
|
+
resource = Resource.new(uri: "http://example.org/res#{index}")
|
39
|
+
if index > 1
|
40
|
+
expect(resource).not_to receive(:zip_package)
|
41
|
+
else
|
42
|
+
expect(resource).to receive(:zip_package).and_return(all_packages[index])
|
43
|
+
end
|
44
|
+
resource
|
45
|
+
end
|
46
|
+
|
47
|
+
zip_packages = ZipPackages.new(resources)
|
48
|
+
zip_packages.each_with_index do |zip_package, index|
|
49
|
+
expect(zip_package.manifest).to be(manifests[index])
|
50
|
+
break if index >= 1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resync-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Moles
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: resync
|
@@ -36,14 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 1.1
|
39
|
+
version: '1.1'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: 1.1
|
46
|
+
version: '1.1'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: equivalent-xml
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,6 +168,7 @@ files:
|
|
168
168
|
- lib/resync/client/resync_extensions.rb
|
169
169
|
- lib/resync/client/version.rb
|
170
170
|
- lib/resync/client/zip_package.rb
|
171
|
+
- lib/resync/client/zip_packages.rb
|
171
172
|
- resync-client.gemspec
|
172
173
|
- spec/data/examples/capability-list.xml
|
173
174
|
- spec/data/examples/change-dump-manifest.xml
|
@@ -193,6 +194,7 @@ files:
|
|
193
194
|
- spec/unit/resync/client/http_helper_spec.rb
|
194
195
|
- spec/unit/resync/client/resync_extensions_spec.rb
|
195
196
|
- spec/unit/resync/client/zip_package_spec.rb
|
197
|
+
- spec/unit/resync/client/zip_packages_spec.rb
|
196
198
|
homepage: http://github.com/dmolesUC3/resync-client
|
197
199
|
licenses:
|
198
200
|
- MIT
|
@@ -213,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
215
|
version: '0'
|
214
216
|
requirements: []
|
215
217
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.4.
|
218
|
+
rubygems_version: 2.4.7
|
217
219
|
signing_key:
|
218
220
|
specification_version: 4
|
219
221
|
summary: Client library for ResourceSync
|
@@ -242,4 +244,5 @@ test_files:
|
|
242
244
|
- spec/unit/resync/client/http_helper_spec.rb
|
243
245
|
- spec/unit/resync/client/resync_extensions_spec.rb
|
244
246
|
- spec/unit/resync/client/zip_package_spec.rb
|
247
|
+
- spec/unit/resync/client/zip_packages_spec.rb
|
245
248
|
has_rdoc:
|