resync-client 0.1.1 → 0.1.2
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.
- 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:
|