djatoka 0.2.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +3 -2
- data/Gemfile.lock +1 -1
- data/README.rdoc +8 -13
- data/djatoka.gemspec +1 -1
- data/lib/djatoka/iiif_request.rb +4 -4
- data/lib/djatoka/metadata.rb +71 -73
- data/lib/djatoka/view_helpers.rb +36 -31
- data/test/test_iiif_request.rb +11 -7
- data/test/test_metadata.rb +57 -54
- data/test/test_resolver.rb +1 -2
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 740300c47eff6616ff1596b35ee242ef1df34e0d
|
4
|
+
data.tar.gz: babda837e272e04a71298a47f36c0a14b8c64b92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe31d8abaa6ae8acf712640ebd165660248113e2f2e8f06d6cdd621db6292c3dbfdbc51a1587195463cdacad48b045eb27eae37d5a626b4f6b803e0d92f035a2
|
7
|
+
data.tar.gz: 9245d8e471aecd3b5efd3cf4005782899c17db9539061e24a5a6b7d707155a4467d3fd2b2741781b84c41393b2539449aa2c139c19e3ac7fe7cd354170a76d3f
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -106,30 +106,26 @@ This gem can translate parameters from {International Image Interoperability Fra
|
|
106
106
|
|
107
107
|
# Set IIIF parameters and create a Djatoka::Region
|
108
108
|
# Note: All IIIF parameters are required before creating a Djatoka::Region
|
109
|
-
djatoka_region = iiif_request.region('full').size('full').rotation('0').quality('
|
109
|
+
djatoka_region = iiif_request.region('full').size('full').rotation('0').quality('default').format('jpg').djatoka_region
|
110
110
|
|
111
111
|
# Use the Djatoka::Region as normal
|
112
112
|
djatoka_region.url
|
113
113
|
|
114
114
|
# IIIF Info Request (Metadata)
|
115
|
+
# (See the 2.0 Info Request spec)}[http://iiif.io/api/image/2.0/#information-request]
|
115
116
|
# First, create a Djatoka::Metadata object and perform the request to the server for metadata.
|
116
117
|
metadata = resolver.metadata(identifier).perform
|
117
118
|
|
118
119
|
# Create a IIIF Info json response string
|
119
120
|
# Set values to optional fields by passing in a block and calling setters on the yielded Mash
|
120
|
-
json = metadata.to_iiif_json do |
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
info.image_host = 'http://myserver.com/image'
|
121
|
+
json = metadata.to_iiif_json do |opts|
|
122
|
+
opts.tile_width = 512 # tile_* can be string or int
|
123
|
+
opts.tile_height = "512"
|
124
|
+
opts.compliance_level = 1
|
125
|
+
opts.formats = ["jpg", "png"]
|
126
|
+
opts.qualities = ["default", "gray"]
|
127
127
|
end
|
128
128
|
|
129
|
-
# If you want the xml flavor of a IIIF Info response, use
|
130
|
-
xml = metadata.to_iiif_xml
|
131
|
-
# It can be called with the same type of block as #to_iiif_json
|
132
|
-
|
133
129
|
== Commandline
|
134
130
|
|
135
131
|
There is also a little commandline utility for outputting the OpenURL.
|
@@ -153,4 +149,3 @@ Jason Ronallo, Willy Mene
|
|
153
149
|
== Copyright
|
154
150
|
|
155
151
|
Copyright (c) 2010 North Carolina State University. See LICENSE for details.
|
156
|
-
|
data/djatoka.gemspec
CHANGED
data/lib/djatoka/iiif_request.rb
CHANGED
@@ -39,7 +39,7 @@ module Djatoka
|
|
39
39
|
# id = 'someImageId1234'
|
40
40
|
#
|
41
41
|
# request = Djatoka::IiifRequest.new(resolver, id)
|
42
|
-
# djatoka_region = request.region('full').size('full').rotation('0').quality('
|
42
|
+
# djatoka_region = request.region('full').size('full').rotation('0').quality('default').format('jpg').djatoka_region
|
43
43
|
class IiifRequest
|
44
44
|
|
45
45
|
ALL_PARAMS = Set.new(['region', 'size', 'rotation', 'quality', 'format'])
|
@@ -105,7 +105,7 @@ module Djatoka
|
|
105
105
|
raise IiifException.new(msg)
|
106
106
|
end
|
107
107
|
|
108
|
-
region = @resolver.region(@
|
108
|
+
region = @resolver.region(@id)
|
109
109
|
|
110
110
|
if(@iiif_params[:region] =~ /^(\d+),(\d+),(\d+),(\d+)$/)
|
111
111
|
region.region("#{$2},#{$1},#{$4},#{$3}")
|
@@ -150,7 +150,7 @@ module Djatoka
|
|
150
150
|
end
|
151
151
|
region.format(type.to_s)
|
152
152
|
|
153
|
-
unless(@iiif_params[:quality] =~ /^(
|
153
|
+
unless(@iiif_params[:quality] =~ /^(default|color|gray|bitonal)$/i)
|
154
154
|
raise IiifInvalidParam.new 'quality', @iiif_params[:quality]
|
155
155
|
end
|
156
156
|
|
@@ -160,4 +160,4 @@ module Djatoka
|
|
160
160
|
|
161
161
|
end
|
162
162
|
|
163
|
-
end
|
163
|
+
end
|
data/lib/djatoka/metadata.rb
CHANGED
@@ -5,6 +5,10 @@ class Djatoka::Metadata
|
|
5
5
|
:levels, :layer_count, :response, :resolver
|
6
6
|
include Djatoka::Net
|
7
7
|
|
8
|
+
IIIF_20_CONTEXT_URI = 'http://iiif.io/api/image/2/context.json'
|
9
|
+
IIIF_20_PROTOCOL_URI = 'http://iiif.io/api/image'
|
10
|
+
IIIF_20_BASE_COMPLIANCE_URI = 'http://iiif.io/api/image/2'
|
11
|
+
|
8
12
|
def initialize(resolver, rft_id)
|
9
13
|
@resolver = resolver
|
10
14
|
@rft_id = rft_id
|
@@ -76,90 +80,84 @@ class Djatoka::Metadata
|
|
76
80
|
all_levels.keys.sort.last
|
77
81
|
end
|
78
82
|
|
79
|
-
# Builds a String containing the JSON response to a IIIF Image Information Request
|
83
|
+
# Builds a String containing the JSON-LD response to a IIIF Image Information Request
|
80
84
|
#
|
81
|
-
# * {Documentation about the Image Info Request}[http://
|
85
|
+
# * {Documentation about the Image Info Request}[http://iiif.io/api/image/2.0/#information-request]
|
82
86
|
#
|
83
|
-
# It will fill in the required
|
84
|
-
#
|
85
|
-
# The method yields a Mash where you can set the value of the optional
|
87
|
+
# It will fill in the required @context, @id, protocol, width, height, and profile properties. It will also fill in
|
88
|
+
# sizes as determined from the Djatoka levels from Djatoka::Metadata#levels
|
89
|
+
# The method yields a Mash where you can set the value of the optional properties. Here's an example:
|
86
90
|
#
|
87
|
-
# metadata.
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
#
|
93
|
-
# info.image_host = 'http://myserver.com/image'
|
91
|
+
# metadata.to_iiif_json do |opts|
|
92
|
+
# opts.tile_width = 512 # tile_* can be string or int
|
93
|
+
# opts.tile_height = "512"
|
94
|
+
# opts.compliance_level = 1
|
95
|
+
# opts.formats = ["jpg", "png"]
|
96
|
+
# opts.qualities = ["default", "gray"]
|
94
97
|
# end
|
95
|
-
def to_iiif_json(&block)
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
98
|
+
def to_iiif_json(iiif_id, &block)
|
99
|
+
info = Hashie::Mash.new
|
100
|
+
info[:@context] = IIIF_20_CONTEXT_URI
|
101
|
+
info[:@id] = iiif_id
|
102
|
+
info.width = @width.to_i
|
103
|
+
info.height = @height.to_i
|
104
|
+
info.protocol = IIIF_20_PROTOCOL_URI
|
105
|
+
|
106
|
+
sizes = []
|
107
|
+
level_sizes = all_levels
|
108
|
+
levels_as_i.each do |l|
|
109
|
+
sizes << level_sizes[l]
|
110
|
+
end
|
111
|
+
info.sizes = sizes
|
109
112
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
#
|
118
|
-
# metadata.to_iiif_json do |info|
|
119
|
-
# info.tile_width = 512
|
120
|
-
# info.tile_height = 512
|
121
|
-
# info.formats = ['jpg', 'png']
|
122
|
-
# info.qualities = ['native', 'grey']
|
123
|
-
# info.profile = 'http://library.stanford.edu/iiif/image-api/compliance.html#level1'
|
124
|
-
# info.image_host = 'http://myserver.com/image'
|
125
|
-
# end
|
126
|
-
def to_iiif_xml(&block)
|
127
|
-
builder = Nokogiri::XML::Builder.new do |xml|
|
128
|
-
info = Hashie::Mash.new
|
129
|
-
yield(info)
|
130
|
-
xml.info('xmlns' => 'http://library.stanford.edu/iiif/image-api/ns/') {
|
131
|
-
xml.identifier @rft_id
|
132
|
-
xml.width @width
|
133
|
-
xml.height @height
|
134
|
-
xml.scale_factors {
|
135
|
-
levels_as_i.each {|lvl| xml.scale_factor lvl}
|
136
|
-
}
|
137
|
-
|
138
|
-
#optional fields
|
139
|
-
xml.tile_width info.tile_width if(info.tile_width?)
|
140
|
-
xml.tile_height info.tile_height if(info.tile_height?)
|
141
|
-
if(info.formats?)
|
142
|
-
xml.formats {
|
143
|
-
info.formats.each {|mt| xml.format mt}
|
144
|
-
}
|
145
|
-
end
|
146
|
-
if(info.qualities?)
|
147
|
-
xml.qualities {
|
148
|
-
info.qualities.each {|q| xml.quality q}
|
149
|
-
}
|
150
|
-
end
|
151
|
-
xml.profile info.profile if(info.profile?)
|
152
|
-
xml.image_host info.image_host if(info.image_host?)
|
153
|
-
}
|
113
|
+
if block_given?
|
114
|
+
opts = Hashie::Mash.new
|
115
|
+
yield(opts)
|
116
|
+
process_optional_iiif_fields info, opts
|
117
|
+
else
|
118
|
+
# Assume level 0 compliance if no options passed in
|
119
|
+
info.profile = [ "#{IIIF_20_BASE_COMPLIANCE_URI}/level0.json" ]
|
154
120
|
end
|
155
|
-
|
121
|
+
|
122
|
+
JSON.pretty_generate(info)
|
156
123
|
end
|
157
124
|
|
158
125
|
private
|
126
|
+
|
127
|
+
def process_optional_iiif_fields info, opts
|
128
|
+
tiles = {}
|
129
|
+
if opts.tile_width
|
130
|
+
tiles["width"] = opts.tile_width.to_i
|
131
|
+
end
|
132
|
+
if opts.tile_height
|
133
|
+
tiles["height"] = opts.tile_height.to_i
|
134
|
+
end
|
135
|
+
unless tiles.empty?
|
136
|
+
tiles["scaleFactors"] = levels_as_i
|
137
|
+
info.tiles = [tiles]
|
138
|
+
end
|
139
|
+
|
140
|
+
profile = []
|
141
|
+
if opts.compliance_level
|
142
|
+
c_level = opts.compliance_level
|
143
|
+
else
|
144
|
+
c_level = '0'
|
145
|
+
end
|
146
|
+
profile << "#{IIIF_20_BASE_COMPLIANCE_URI}/level#{c_level}.json"
|
147
|
+
|
148
|
+
profile_options = {}
|
149
|
+
if opts.formats
|
150
|
+
profile_options["formats"] = opts.formats
|
151
|
+
end
|
152
|
+
if opts.qualities
|
153
|
+
profile_options["qualities"] = opts.qualities
|
154
|
+
end
|
155
|
+
profile << profile_options unless profile_options.empty?
|
156
|
+
info.profile = profile
|
157
|
+
end
|
159
158
|
# Just the levels themselves, as a sorted array of integers
|
160
159
|
def levels_as_i
|
161
|
-
all_levels.keys.map{ |l| l.to_i}.sort
|
160
|
+
all_levels.keys.map{ |l| l.to_i}.sort.reject{|l| l == 0}
|
162
161
|
end
|
163
162
|
|
164
163
|
end
|
165
|
-
|
data/lib/djatoka/view_helpers.rb
CHANGED
@@ -11,6 +11,11 @@ module Djatoka
|
|
11
11
|
# <tt>:resolver</tt> parameter when using one of these helpers.
|
12
12
|
module ViewHelpers
|
13
13
|
|
14
|
+
def djatoka_image_url(rft_id, params={})
|
15
|
+
resolver, region = setup_djatoka_image_tag(rft_id, params)
|
16
|
+
region.url
|
17
|
+
end
|
18
|
+
|
14
19
|
# Returns an image_tag. Unless params are passed in which constrain the
|
15
20
|
# <tt>scale</tt> or <tt>level</tt> of the image, this will be the highest
|
16
21
|
# resolution of the given image.
|
@@ -20,12 +25,13 @@ module Djatoka
|
|
20
25
|
# djatoka_image_tag('info:lanl-repo/ds/5aa182c2-c092-4596-af6e-e95d2e263de3',
|
21
26
|
# {:scale => 150, :region => [1400,500,1400,1500], :class => 'volleyball'})
|
22
27
|
def djatoka_image_tag(rft_id, params={})
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
else
|
28
|
+
url = djatoka_image_url(rft_id, params)
|
29
|
+
image_tag url, clean_image_tag_params(params)
|
30
|
+
end
|
27
31
|
|
28
|
-
|
32
|
+
def djatoka_square_image_url(rft_id, params={})
|
33
|
+
resolver, region = setup_djatoka_image_tag(rft_id, params)
|
34
|
+
region.square.url
|
29
35
|
end
|
30
36
|
|
31
37
|
# Returns an image_tag for a square image. The long side is cropped.
|
@@ -35,42 +41,41 @@ module Djatoka
|
|
35
41
|
# {:scale => 250, :class => 'djatoka_image_larger',
|
36
42
|
# :resolver => 'http://african.lanl.gov/adore-djatoka/resolver' })
|
37
43
|
def djatoka_square_image_tag(rft_id, params={})
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
else
|
44
|
+
url = djatoka_square_image_url(rft_id, params)
|
45
|
+
image_tag(url, clean_square_image_tag_params(params)) #+ debug(region)
|
46
|
+
end
|
42
47
|
|
43
|
-
|
48
|
+
def djatoka_top_left_square_image_url(rft_id, params={})
|
49
|
+
resolver, region = setup_djatoka_image_tag(rft_id, params)
|
50
|
+
region.top_left_square.url
|
44
51
|
end
|
45
52
|
|
46
53
|
# FIXME DRY
|
47
54
|
def djatoka_top_left_square_image_tag(rft_id, params={})
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
else
|
55
|
+
url = djatoka_top_left_square_image_url(rft_id, params)
|
56
|
+
image_tag(url, clean_square_image_tag_params(params))
|
57
|
+
end
|
52
58
|
|
53
|
-
|
59
|
+
def djatoka_bottom_right_square_image_url(rft_id, params={})
|
60
|
+
resolver, region = setup_djatoka_image_tag(rft_id, params)
|
61
|
+
region.bottom_right_square.url
|
54
62
|
end
|
55
63
|
|
56
64
|
def djatoka_bottom_right_square_image_tag(rft_id, params={})
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
else
|
65
|
+
url = djatoka_bottom_right_square_image_url(rft_id, params)
|
66
|
+
image_tag(url, clean_square_image_tag_params(params))
|
67
|
+
end
|
61
68
|
|
62
|
-
|
69
|
+
def djatoka_smallbox_image_url(rft_id, params={})
|
70
|
+
resolver, region = setup_djatoka_image_tag(rft_id, params)
|
71
|
+
region.smallbox.url
|
63
72
|
end
|
64
73
|
|
65
74
|
# Returns an image tag for an image exactly 75x75
|
66
75
|
# djatoka_smallbox_image_tag('info:lanl-repo/ds/5aa182c2-c092-4596-af6e-e95d2e263de3')
|
67
76
|
def djatoka_smallbox_image_tag(rft_id, params={})
|
68
|
-
|
69
|
-
|
70
|
-
image_tag region.smallbox.url, clean_square_image_tag_params(params)
|
71
|
-
else
|
72
|
-
|
73
|
-
end
|
77
|
+
url = djatoka_smallbox_image_url(rft_id, params)
|
78
|
+
image_tag url, clean_square_image_tag_params(params)
|
74
79
|
end
|
75
80
|
|
76
81
|
# Include djatoka_openlayers_script on any page you need pan and zoom to
|
@@ -123,19 +128,19 @@ module Djatoka
|
|
123
128
|
nil
|
124
129
|
end
|
125
130
|
end
|
126
|
-
|
131
|
+
|
127
132
|
def clean_image_tag_params(params)
|
128
133
|
new_params = params.dup
|
129
|
-
if new_params[:scale]
|
134
|
+
if new_params[:scale]
|
130
135
|
new_params.delete(:scale)
|
131
136
|
end
|
132
137
|
new_params
|
133
138
|
end
|
134
|
-
|
139
|
+
|
135
140
|
def clean_square_image_tag_params(params)
|
136
141
|
new_params = params.dup
|
137
|
-
if new_params[:scale]
|
138
|
-
new_params[:height] = new_params[:scale] unless new_params[:height]
|
142
|
+
if new_params[:scale]
|
143
|
+
new_params[:height] = new_params[:scale] unless new_params[:height]
|
139
144
|
new_params[:width] = new_params[:scale] unless new_params[:width]
|
140
145
|
new_params.delete(:scale)
|
141
146
|
end
|
data/test/test_iiif_request.rb
CHANGED
@@ -9,9 +9,13 @@ class TestDjatokaIiifRequest < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
context 'from a IIIF request with all defaults' do
|
11
11
|
setup do
|
12
|
-
@region = @req.region('full').size('full').rotation('0').quality('
|
12
|
+
@region = @req.region('full').size('full').rotation('0').quality('default').format('jpg').djatoka_region
|
13
13
|
end
|
14
14
|
|
15
|
+
should 'set id properly' do
|
16
|
+
assert_equal @identifier, @region.rft_id
|
17
|
+
end
|
18
|
+
|
15
19
|
should 'set region to nil from full' do
|
16
20
|
assert_nil @region.query.region
|
17
21
|
end
|
@@ -32,7 +36,7 @@ class TestDjatokaIiifRequest < Test::Unit::TestCase
|
|
32
36
|
|
33
37
|
context 'translates region parameters' do
|
34
38
|
setup do
|
35
|
-
@req.size('full').rotation('0').quality('
|
39
|
+
@req.size('full').rotation('0').quality('default').format('jpg')
|
36
40
|
end
|
37
41
|
|
38
42
|
should 'set x,y,w,h requests' do
|
@@ -49,7 +53,7 @@ class TestDjatokaIiifRequest < Test::Unit::TestCase
|
|
49
53
|
|
50
54
|
context 'translates size parameters' do
|
51
55
|
setup do
|
52
|
-
@req.region('10,20,50,100').rotation('0').quality('
|
56
|
+
@req.region('10,20,50,100').rotation('0').quality('default').format('jpg')
|
53
57
|
end
|
54
58
|
|
55
59
|
should 'set "w," requests to the correct scale value' do
|
@@ -85,7 +89,7 @@ class TestDjatokaIiifRequest < Test::Unit::TestCase
|
|
85
89
|
|
86
90
|
context 'translates rotation parameters' do
|
87
91
|
setup do
|
88
|
-
@req.region('10,20,50,100').size('800,').quality('
|
92
|
+
@req.region('10,20,50,100').size('800,').quality('default').format('jpg')
|
89
93
|
end
|
90
94
|
|
91
95
|
should 'set values that are numeric' do
|
@@ -105,7 +109,7 @@ class TestDjatokaIiifRequest < Test::Unit::TestCase
|
|
105
109
|
|
106
110
|
context 'translates format parameters' do
|
107
111
|
setup do
|
108
|
-
@req.region('full').size('full').rotation('0').quality('
|
112
|
+
@req.region('full').size('full').rotation('0').quality('default')
|
109
113
|
end
|
110
114
|
|
111
115
|
should 'set the format from a valid extension as from the end of a URL' do
|
@@ -151,12 +155,12 @@ class TestDjatokaIiifRequest < Test::Unit::TestCase
|
|
151
155
|
|
152
156
|
context '#all_params_present?' do
|
153
157
|
should 'return true when all the valid params have been set' do
|
154
|
-
@req.region('full').size('full').rotation('0').quality('
|
158
|
+
@req.region('full').size('full').rotation('0').quality('default').format('jpg')
|
155
159
|
assert @req.all_params_present?
|
156
160
|
end
|
157
161
|
|
158
162
|
should 'return false when params are missing' do
|
159
|
-
@req.region('full').size('full').quality('
|
163
|
+
@req.region('full').size('full').quality('default').format('jpg')
|
160
164
|
assert_equal false, @req.all_params_present?
|
161
165
|
end
|
162
166
|
end
|
data/test/test_metadata.rb
CHANGED
@@ -116,71 +116,74 @@ class TestDjatokaMetadata < Test::Unit::TestCase
|
|
116
116
|
should 'create json responses' do
|
117
117
|
iiif_json = <<-EOF
|
118
118
|
{
|
119
|
-
"
|
119
|
+
"@context": "http://iiif.io/api/image/2/context.json",
|
120
|
+
"@id": "http://yourserver.edu/iiif/your%2Fimage_id",
|
120
121
|
"width": 5120,
|
121
122
|
"height": 3372,
|
122
|
-
"
|
123
|
-
"
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
123
|
+
"protocol": "http://iiif.io/api/image",
|
124
|
+
"tiles" : [
|
125
|
+
{
|
126
|
+
"width": 512,
|
127
|
+
"height": 512,
|
128
|
+
"scaleFactors": [1, 2, 3, 4, 5, 6]
|
129
|
+
}
|
130
|
+
],
|
131
|
+
"sizes": [
|
132
|
+
{"height": 106, "width": 160},
|
133
|
+
{"height": 211, "width": 320},
|
134
|
+
{"height": 422, "width": 640},
|
135
|
+
{"height": 843, "width": 1280},
|
136
|
+
{"height": 1686, "width": 2560},
|
137
|
+
{"height": 3372, "width": 5120}
|
138
|
+
],
|
139
|
+
"profile": [
|
140
|
+
"http://iiif.io/api/image/2/level1.json",
|
141
|
+
{
|
142
|
+
"formats": [ "jpg", "png" ],
|
143
|
+
"qualities": [ "default", "gray" ]
|
144
|
+
}
|
145
|
+
]
|
129
146
|
}
|
130
147
|
EOF
|
131
148
|
expected = JSON.parse(iiif_json)
|
132
149
|
|
133
|
-
str = @metadata.to_iiif_json do |
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
info.image_host = 'http://myserver.com/image'
|
150
|
+
str = @metadata.to_iiif_json('http://yourserver.edu/iiif/your%2Fimage_id') do |opts|
|
151
|
+
opts.tile_width = 512 # tile_* can be string or int
|
152
|
+
opts.tile_height = "512"
|
153
|
+
opts.compliance_level = 1
|
154
|
+
opts.formats = ["jpg", "png"]
|
155
|
+
opts.qualities = ["default", "gray"]
|
140
156
|
end
|
141
157
|
assert_equal expected, JSON.parse(str)
|
142
158
|
end
|
143
159
|
|
144
|
-
should 'create
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
<profile>http://library.stanford.edu/iiif/image-api/compliance.html#level1</profile>
|
170
|
-
<image_host>http://myserver.com/image</image_host>
|
171
|
-
</info>
|
172
|
-
EOXML
|
173
|
-
|
174
|
-
str = @metadata.to_iiif_xml do |info|
|
175
|
-
info.tile_width = '512'
|
176
|
-
info.tile_height = 512 # tile_* can be string or int
|
177
|
-
info.formats = ['jpg', 'png']
|
178
|
-
info.qualities = ['native', 'grey']
|
179
|
-
info.profile = 'http://library.stanford.edu/iiif/image-api/compliance.html#level1'
|
180
|
-
info.image_host = 'http://myserver.com/image'
|
181
|
-
end
|
182
|
-
assert EquivalentXml.equivalent?(str, iiif_xml)
|
160
|
+
should 'create a minimal json response with required properties if no options are passed in' do
|
161
|
+
iiif_json = <<-EOF
|
162
|
+
{
|
163
|
+
"@context": "http://iiif.io/api/image/2/context.json",
|
164
|
+
"@id": "http://yourserver.edu/iiif/your%2Fimage_id",
|
165
|
+
"width": 5120,
|
166
|
+
"height": 3372,
|
167
|
+
"protocol": "http://iiif.io/api/image",
|
168
|
+
"sizes": [
|
169
|
+
{"height": 106, "width": 160},
|
170
|
+
{"height": 211, "width": 320},
|
171
|
+
{"height": 422, "width": 640},
|
172
|
+
{"height": 843, "width": 1280},
|
173
|
+
{"height": 1686, "width": 2560},
|
174
|
+
{"height": 3372, "width": 5120}
|
175
|
+
],
|
176
|
+
"profile": [
|
177
|
+
"http://iiif.io/api/image/2/level0.json"
|
178
|
+
]
|
179
|
+
}
|
180
|
+
EOF
|
181
|
+
expected = JSON.parse(iiif_json)
|
182
|
+
|
183
|
+
str = @metadata.to_iiif_json('http://yourserver.edu/iiif/your%2Fimage_id')
|
184
|
+
assert_equal expected, JSON.parse(str)
|
183
185
|
end
|
186
|
+
|
184
187
|
end #IIIF Info Responses
|
185
188
|
|
186
189
|
end #with_a_resolver
|
data/test/test_resolver.rb
CHANGED
@@ -64,7 +64,7 @@ class TestDjatokaResolver < Test::Unit::TestCase
|
|
64
64
|
:region => 'full',
|
65
65
|
:size => 'full',
|
66
66
|
:rotation => '0',
|
67
|
-
:quality => '
|
67
|
+
:quality => 'default',
|
68
68
|
:format => 'jpg'
|
69
69
|
}
|
70
70
|
end
|
@@ -118,4 +118,3 @@ class TestDjatokaResolver < Test::Unit::TestCase
|
|
118
118
|
|
119
119
|
end #with_a_resolver
|
120
120
|
end
|
121
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: djatoka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Ronallo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-01-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: addressable
|
@@ -213,8 +213,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
213
|
version: '0'
|
214
214
|
requirements: []
|
215
215
|
rubyforge_project: djatoka
|
216
|
-
rubygems_version: 2.
|
216
|
+
rubygems_version: 2.4.2
|
217
217
|
signing_key:
|
218
218
|
specification_version: 4
|
219
219
|
summary: Djatoka image server helpers for Ruby and Rails.
|
220
|
-
test_files:
|
220
|
+
test_files:
|
221
|
+
- test/fixtures/5aa182c2-c092-4596-af6e-e95d2e263de3.json
|
222
|
+
- test/fixtures/b820f537-26a1-4af8-b86a-e7a4cac6187a.json
|
223
|
+
- test/fixtures/empty-metadata.json
|
224
|
+
- test/fixtures/https_metadata_request.json
|
225
|
+
- test/fixtures/ping-5aa182c2-c092-4596-af6e-e95d2e263de3.json
|
226
|
+
- test/fixtures/ping-asdf.json
|
227
|
+
- test/fixtures/ua023_015-006-bx0003-014-075-metadata.json
|
228
|
+
- test/helper.rb
|
229
|
+
- test/test_common.rb
|
230
|
+
- test/test_djatoka.rb
|
231
|
+
- test/test_iiif_request.rb
|
232
|
+
- test/test_metadata.rb
|
233
|
+
- test/test_region.rb
|
234
|
+
- test/test_resolver.rb
|
235
|
+
- test/test_view_helpers.rb
|
236
|
+
has_rdoc:
|