wax_iiif 0.1.2 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/Gemfile +1 -1
- data/README.md +45 -1
- data/lib/wax_iiif.rb +1 -0
- data/lib/wax_iiif/builder.rb +13 -11
- data/lib/wax_iiif/collection.rb +1 -1
- data/lib/wax_iiif/image_info.rb +1 -1
- data/lib/wax_iiif/manifest.rb +3 -4
- data/spec/wax_iiif/builder_spec.rb +2 -2
- data/spec/wax_iiif/image_variant_spec.rb +15 -15
- data/wax_iiif.gemspec +11 -10
- metadata +39 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c8960705254abe3b74d5e75c7972d07f4152f840c2de845f6555905bc1abb42
|
4
|
+
data.tar.gz: ae4d3e69e8b3ebccedc19d09005209e8b97232adcce67c1a9a78a9fbc05d80dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d7161eccce1b681d6bdb543ac5dcbdf1bd3506a51e755a16a39a4c2091e8d3e874c9e6122004cb799ff2eab1fac95d8224572870771a0696c7904d90a040be3
|
7
|
+
data.tar.gz: 15f1b8cbd87bfeadbea25e781f4ecd8d5301a1ed036fce8a94bada86bb4dac0b376b655b18c77f00eaeec1c47499f05d7726e0a1caff0002135aca100e16e43b
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
Welcome to the Changelog! Below is the first attempt at a log for this project.
|
4
|
+
|
5
|
+
|
6
|
+
## v0.2.0
|
7
|
+
#### Date: 09/10/2019
|
8
|
+
|
9
|
+
#### Breaking Changes:
|
10
|
+
- N/A
|
11
|
+
|
12
|
+
#### Non-breaking Changes:
|
13
|
+
- :white_check_mark: `wax_iiif` can now run its `build` process in parallel. (Credit: [@KitaitiMakoto](https://github.com/KitaitiMakoto))
|
14
|
+
- :white_check_mark: `progress_bar` on `builder.process_data` shows up faster.
|
15
|
+
|
16
|
+
#### Dependency Changes:
|
17
|
+
- \+ `gem 'parallel'`
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,52 @@
|
|
1
1
|
# wax_iiif
|
2
|
-
[](https://badge.fury.io/rb/wax_iiif) [](https://travis-ci.org/minicomp/wax_iiif) [](https://codeclimate.com/github/minicomp/wax_iiif/maintainability) [](https://codeclimate.com/github/minicomp/wax_iiif/test_coverage)
|
2
|
+
[](https://badge.fury.io/rb/wax_iiif) [](https://travis-ci.org/minicomp/wax_iiif) [](https://codeclimate.com/github/minicomp/wax_iiif/maintainability) [](https://codeclimate.com/github/minicomp/wax_iiif/test_coverage) [](https://libraries.io/github/minicomp/wax_iiif)
|
3
3
|
|
4
4
|
 [](https://www.rubydoc.info/github/minicomp/wax_iiif/)
|
5
5
|
|
6
6
|
This fork is *mostly* a copy of the [iiif_s3 gem](https://github.com/cmoa/iiif_s3) with all the s3 dependencies and functionality removed. It creates level 0 IIIF derivatives for static exhibition sites with [Minicomp/Wax](https://github.com/minicomp/wax/) via [Wax_Tasks](https://github.com/minicomp/wax_tasks/).
|
7
7
|
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
This library assumes that you have ImageMagick installed. If you need to install it, follow the instructions:
|
11
|
+
|
12
|
+
on OSX, `brew install imagemagick ` should be sufficient.
|
13
|
+
|
14
|
+
If you have issues with TIFF files, try
|
15
|
+
|
16
|
+
```shell
|
17
|
+
|
18
|
+
brew update
|
19
|
+
brew reinstall --with-libtiff --ignore-dependencies imagemagick
|
20
|
+
|
21
|
+
```
|
22
|
+
|
23
|
+
If you plan to work with PDFs, you should also have a copy of GhostScript installed.
|
24
|
+
|
25
|
+
on OSX, `brew install gs`
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
Add this line to your application's Gemfile:
|
30
|
+
|
31
|
+
gem 'wax_iiif'
|
32
|
+
|
33
|
+
And then execute:
|
34
|
+
|
35
|
+
$ bundle
|
36
|
+
|
37
|
+
Or install it yourself as:
|
38
|
+
|
39
|
+
$ gem install wax_iiif
|
40
|
+
|
41
|
+
## Usage
|
42
|
+
|
8
43
|
Documentation for using `wax_iiif` without `wax_tasks` is forthcoming. In the meantime, check out [rubydoc](https://www.rubydoc.info/gems/wax_iiif).
|
44
|
+
|
45
|
+
|
46
|
+
## Contributing
|
47
|
+
|
48
|
+
1. Fork it ( https://github.com/minicomp/wax_iiif/fork )
|
49
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
50
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
51
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
52
|
+
5. Create a new Pull Request
|
data/lib/wax_iiif.rb
CHANGED
data/lib/wax_iiif/builder.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative 'utilities'
|
|
2
2
|
|
3
3
|
require 'pathname'
|
4
4
|
require 'progress_bar'
|
5
|
+
require 'parallel'
|
5
6
|
|
6
7
|
module WaxIiif
|
7
8
|
# Builder class
|
@@ -60,20 +61,26 @@ module WaxIiif
|
|
60
61
|
#
|
61
62
|
# Take the loaded data and generate all the files.
|
62
63
|
#
|
64
|
+
# @param [Integer] thread_count Thread count to use for processing images concurrently. Defaults to number of processors.
|
65
|
+
#
|
63
66
|
# @return [Void]
|
64
67
|
#
|
65
|
-
def process_data
|
68
|
+
def process_data(thread_count: Parallel.processor_count)
|
69
|
+
puts Rainbow("Running on #{thread_count} threads.").blue
|
70
|
+
|
66
71
|
return nil if @data.nil? # do nothing without data.
|
67
72
|
|
68
73
|
@manifests = []
|
69
74
|
|
70
75
|
data = @data.group_by(&:manifest_id)
|
71
76
|
bar = ProgressBar.new(data.length)
|
77
|
+
bar.write
|
72
78
|
|
73
79
|
data.each do |key, value|
|
74
80
|
manifest_id = key
|
75
81
|
image_records = value
|
76
|
-
resources = process_image_records(image_records
|
82
|
+
resources = process_image_records(image_records,
|
83
|
+
thread_count: thread_count)
|
77
84
|
|
78
85
|
# Generate the manifest
|
79
86
|
if manifest_id.to_s.empty?
|
@@ -128,13 +135,7 @@ module WaxIiif
|
|
128
135
|
# remove optional header
|
129
136
|
vals.shift if vals[0][0] == HEADER_VAL
|
130
137
|
|
131
|
-
@data = vals.collect
|
132
|
-
{
|
133
|
-
'image_path' => data[0],
|
134
|
-
'id' => data[1],
|
135
|
-
'label' => data[2]
|
136
|
-
}
|
137
|
-
end
|
138
|
+
@data = vals.collect { |d| { 'image_path' => d[0], 'id' => d[1], 'label' => d[2] } }
|
138
139
|
end
|
139
140
|
|
140
141
|
protected
|
@@ -239,11 +240,12 @@ module WaxIiif
|
|
239
240
|
obj
|
240
241
|
end
|
241
242
|
|
242
|
-
def process_image_records(image_records
|
243
|
+
def process_image_records(image_records,
|
244
|
+
thread_count: Parallel.processor_count)
|
243
245
|
resources = {}
|
244
246
|
|
245
247
|
# genrate the images
|
246
|
-
|
248
|
+
Parallel.each(image_records, in_threads: thread_count) do |image_record|
|
247
249
|
# It attempts to load the info files and skip generation - not currently working.
|
248
250
|
info_file = image_info_file_name(image_record)
|
249
251
|
if File.exist?(info_file)
|
data/lib/wax_iiif/collection.rb
CHANGED
@@ -36,7 +36,7 @@ module WaxIiif
|
|
36
36
|
#
|
37
37
|
# @return [String] The JSON representation as a string
|
38
38
|
#
|
39
|
-
def to_json
|
39
|
+
def to_json(*_args)
|
40
40
|
obj = base_properties
|
41
41
|
obj['collections'] = collect_object(collections) unless collections.empty?
|
42
42
|
obj['manifests'] = collect_object(manifests) unless manifests.empty?
|
data/lib/wax_iiif/image_info.rb
CHANGED
data/lib/wax_iiif/manifest.rb
CHANGED
@@ -48,7 +48,7 @@ module WaxIiif
|
|
48
48
|
#
|
49
49
|
# @return [String] the JSON-LD representation of the manifest as a string.
|
50
50
|
#
|
51
|
-
def to_json
|
51
|
+
def to_json(*_args)
|
52
52
|
obj = base_properties
|
53
53
|
|
54
54
|
obj['thumbnail'] = @primary.variants['thumbnail'].uri
|
@@ -106,10 +106,9 @@ module WaxIiif
|
|
106
106
|
#--------------------------------------------------------------------------
|
107
107
|
def build_canvas(data)
|
108
108
|
canvas_id = generate_id "canvas/#{data.id}"
|
109
|
-
|
110
109
|
obj = {
|
111
110
|
'@type' => CANVAS_TYPE,
|
112
|
-
'@id'
|
111
|
+
'@id' => canvas_id,
|
113
112
|
'label' => data.section_label,
|
114
113
|
'width' => data.variants['full'].width.floor,
|
115
114
|
'height' => data.variants['full'].height.floor,
|
@@ -130,7 +129,7 @@ module WaxIiif
|
|
130
129
|
annotation_id = generate_id "annotation/#{data.id}"
|
131
130
|
{
|
132
131
|
'@type' => ANNOTATION_TYPE,
|
133
|
-
'@id'
|
132
|
+
'@id' => annotation_id,
|
134
133
|
'motivation' => MOTIVATION,
|
135
134
|
'resource' => {
|
136
135
|
'@id' => data.variants['full'].uri,
|
@@ -45,7 +45,7 @@ describe WaxIiif::Builder do
|
|
45
45
|
include_context('fake data')
|
46
46
|
|
47
47
|
before(:example) do
|
48
|
-
@iiif = WaxIiif::Builder.new({base_url: 'http://0.0.0.0', verbose:
|
48
|
+
@iiif = WaxIiif::Builder.new({base_url: 'http://0.0.0.0', verbose: false, thumbnail_size: 120})
|
49
49
|
@iiif.load(@fake_data)
|
50
50
|
allow(@iiif).to receive(:generate_tiles) {nil}
|
51
51
|
allow(@iiif).to receive(:generate_variants) {@fake_variants}
|
@@ -73,7 +73,7 @@ describe WaxIiif::Builder do
|
|
73
73
|
|
74
74
|
before(:example) do
|
75
75
|
@dir = Dir.mktmpdir
|
76
|
-
@iiif = WaxIiif::Builder.new({output_dir: @dir, base_url: 'http://0.0.0.0', verbose:
|
76
|
+
@iiif = WaxIiif::Builder.new({output_dir: @dir, base_url: 'http://0.0.0.0', verbose: false, thumbnail_size: 120})
|
77
77
|
@iiif.load(@fake_data)
|
78
78
|
@info_json = "#{@dir}/images/1/info.json"
|
79
79
|
allow(@iiif).to receive(:generate_tiles) {nil}
|
@@ -34,18 +34,18 @@ describe WaxIiif::ImageVariant do
|
|
34
34
|
@img = WaxIiif::ImageVariant.new(data, config, 100)
|
35
35
|
end
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
37
|
+
it 'has a uri' do
|
38
|
+
expect(@img.uri).to eq("#{@img.generate_image_id(1)}/full/100,/0/default.jpg")
|
39
|
+
end
|
40
|
+
it 'has an id' do
|
41
|
+
expect(@img.id).to eq(@img.generate_image_id(1))
|
42
|
+
end
|
43
|
+
it 'has a width' do
|
44
|
+
expect(@img.width).to eq(100)
|
45
|
+
end
|
46
|
+
it 'has a mime type' do
|
47
|
+
expect(@img.mime_type).to eq('image/jpeg')
|
48
|
+
end
|
49
49
|
end
|
50
50
|
|
51
51
|
context 'Full Image' do
|
@@ -58,9 +58,9 @@ describe WaxIiif::ImageVariant do
|
|
58
58
|
config = WaxIiif::Config.new
|
59
59
|
@img = WaxIiif::FullImage.new(data, config)
|
60
60
|
end
|
61
|
-
|
62
|
-
|
63
|
-
|
61
|
+
it 'has the default filestring' do
|
62
|
+
expect(@img.uri).to include 'full/full'
|
63
|
+
end
|
64
64
|
|
65
65
|
end
|
66
66
|
end
|
data/wax_iiif.gemspec
CHANGED
@@ -3,25 +3,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |spec|
|
5
5
|
spec.name = 'wax_iiif'
|
6
|
-
spec.version = '0.
|
6
|
+
spec.version = '0.2.0'
|
7
7
|
spec.authors = ['Marii Nyrop', 'David Newbury']
|
8
|
-
spec.email = ['
|
8
|
+
spec.email = ['marii@nyu.edu']
|
9
9
|
spec.summary = 'Minimal IIIF level 0 generator'
|
10
10
|
spec.description = 'Minimal IIIF level 0 generator for use with minicomp/wax'
|
11
11
|
spec.homepage = 'https://github.com/minicomp/wax_iiif'
|
12
12
|
spec.license = 'MIT'
|
13
13
|
|
14
|
-
spec.
|
15
|
-
spec.
|
16
|
-
spec.
|
17
|
-
spec.
|
14
|
+
spec.required_ruby_version = '>= 2.4'
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
18
19
|
|
19
|
-
spec.
|
20
|
-
|
21
|
-
spec.add_development_dependency 'dotenv', '~> 2.5'
|
20
|
+
spec.add_development_dependency 'dotenv', '~> 2.7'
|
22
21
|
spec.add_development_dependency 'rspec', '~> 3.8'
|
23
22
|
spec.add_development_dependency 'simplecov', '~> 0.16'
|
24
23
|
|
25
|
-
spec.add_runtime_dependency 'mini_magick', '~> 4.
|
24
|
+
spec.add_runtime_dependency 'mini_magick', '~> 4.9'
|
25
|
+
spec.add_runtime_dependency 'parallel', '~> 1.17'
|
26
26
|
spec.add_runtime_dependency 'progress_bar', '~> 1.3'
|
27
|
+
spec.add_runtime_dependency 'rainbow', '~> 3.0'
|
27
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wax_iiif
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marii Nyrop
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-09-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dotenv
|
@@ -17,14 +17,14 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '2.
|
20
|
+
version: '2.7'
|
21
21
|
type: :development
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '2.
|
27
|
+
version: '2.7'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rspec
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,14 +59,28 @@ dependencies:
|
|
59
59
|
requirements:
|
60
60
|
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '4.
|
62
|
+
version: '4.9'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '4.
|
69
|
+
version: '4.9'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: parallel
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.17'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '1.17'
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: progress_bar
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,9 +95,23 @@ dependencies:
|
|
81
95
|
- - "~>"
|
82
96
|
- !ruby/object:Gem::Version
|
83
97
|
version: '1.3'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: rainbow
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - "~>"
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '3.0'
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - "~>"
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '3.0'
|
84
112
|
description: Minimal IIIF level 0 generator for use with minicomp/wax
|
85
113
|
email:
|
86
|
-
-
|
114
|
+
- marii@nyu.edu
|
87
115
|
executables: []
|
88
116
|
extensions: []
|
89
117
|
extra_rdoc_files: []
|
@@ -92,6 +120,7 @@ files:
|
|
92
120
|
- ".rspec"
|
93
121
|
- ".rubocop.yml"
|
94
122
|
- ".travis.yml"
|
123
|
+
- CHANGELOG.md
|
95
124
|
- Gemfile
|
96
125
|
- LICENSE.md
|
97
126
|
- README.md
|
@@ -132,8 +161,7 @@ files:
|
|
132
161
|
homepage: https://github.com/minicomp/wax_iiif
|
133
162
|
licenses:
|
134
163
|
- MIT
|
135
|
-
metadata:
|
136
|
-
yard.run: yri
|
164
|
+
metadata: {}
|
137
165
|
post_install_message:
|
138
166
|
rdoc_options: []
|
139
167
|
require_paths:
|
@@ -142,15 +170,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
142
170
|
requirements:
|
143
171
|
- - ">="
|
144
172
|
- !ruby/object:Gem::Version
|
145
|
-
version: '
|
173
|
+
version: '2.4'
|
146
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
175
|
requirements:
|
148
176
|
- - ">="
|
149
177
|
- !ruby/object:Gem::Version
|
150
178
|
version: '0'
|
151
179
|
requirements: []
|
152
|
-
|
153
|
-
rubygems_version: 2.7.6
|
180
|
+
rubygems_version: 3.0.4
|
154
181
|
signing_key:
|
155
182
|
specification_version: 4
|
156
183
|
summary: Minimal IIIF level 0 generator
|