djatoka 0.2.4 → 0.3.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/.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:
|