wax_iiif 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
[![Gem Version](https://badge.fury.io/rb/wax_iiif.svg)](https://badge.fury.io/rb/wax_iiif) [![Build Status](https://travis-ci.org/minicomp/wax_iiif.svg?branch=master)](https://travis-ci.org/minicomp/wax_iiif) [![Maintainability](https://api.codeclimate.com/v1/badges/a7d79a1b819cef81eb11/maintainability)](https://codeclimate.com/github/minicomp/wax_iiif/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/a7d79a1b819cef81eb11/test_coverage)](https://codeclimate.com/github/minicomp/wax_iiif/test_coverage)
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/wax_iiif.svg)](https://badge.fury.io/rb/wax_iiif) [![Build Status](https://travis-ci.org/minicomp/wax_iiif.svg?branch=master)](https://travis-ci.org/minicomp/wax_iiif) [![Maintainability](https://api.codeclimate.com/v1/badges/a7d79a1b819cef81eb11/maintainability)](https://codeclimate.com/github/minicomp/wax_iiif/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/a7d79a1b819cef81eb11/test_coverage)](https://codeclimate.com/github/minicomp/wax_iiif/test_coverage) [![Libraries.io dependency status for GitHub repo](https://img.shields.io/librariesio/github/minicomp/wax_iiif)](https://libraries.io/github/minicomp/wax_iiif)
|
3
3
|
|
4
4
|
![License](https://img.shields.io/badge/license-MIT-green.svg) [![docs](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](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
|