triannon 0.3.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/triannon/annotations_controller.rb +40 -12
- data/app/models/triannon/annotation.rb +8 -4
- data/config/routes.rb +14 -1
- data/lib/triannon/version.rb +1 -1
- metadata +7 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: feb01d17b07570a2f93644aa4f630272df6281f8
|
4
|
+
data.tar.gz: 707da73463f69cc9f28b0f6fafe8b6e0d94d1756
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a89db206c12919c93630d4377ac6204583c042bfae99379ad73c3ff0da2a3e61bbace6306f4c47853da3fd018893a0d487eeabbf02c2ff7ef4599b770754795c
|
7
|
+
data.tar.gz: c29ddde43c40c2e536140c41f67019957632da471b1449d5dbe3a5c6d5904f3a0b9d5e97520146d07e76f38fadf0c6e2b193396953effe05a3cf1d4a00817d8d
|
@@ -14,7 +14,7 @@ module Triannon
|
|
14
14
|
# GET /annotations/annotations/1
|
15
15
|
def show
|
16
16
|
respond_to do |format|
|
17
|
-
format.jsonld {
|
17
|
+
format.jsonld { render_jsonld_per_context (params[:jsonld_context]) }
|
18
18
|
format.ttl {
|
19
19
|
accept_return_type = mime_type_from_accept(["application/x-turtle", "text/turtle"])
|
20
20
|
render :body => @annotation.graph.to_ttl, content_type: accept_return_type if accept_return_type }
|
@@ -23,7 +23,7 @@ module Triannon
|
|
23
23
|
render :body => @annotation.graph.to_rdfxml, content_type: accept_return_type if accept_return_type }
|
24
24
|
format.json {
|
25
25
|
accept_return_type = mime_type_from_accept(["application/json", "text/x-json", "application/jsonrequest"])
|
26
|
-
|
26
|
+
render_jsonld_per_context(params[:jsonld_context], accept_return_type) }
|
27
27
|
format.xml {
|
28
28
|
accept_return_type = mime_type_from_accept(["application/xml", "text/xml", "application/x-xml"])
|
29
29
|
render :xml => @annotation.graph.to_rdfxml, content_type: accept_return_type if accept_return_type }
|
@@ -36,9 +36,10 @@ module Triannon
|
|
36
36
|
@annotation = Annotation.new
|
37
37
|
end
|
38
38
|
|
39
|
-
#
|
40
|
-
|
41
|
-
|
39
|
+
# NOT YET IMPLEMENTED
|
40
|
+
# GET /annotations/annotations/1/edit
|
41
|
+
# def edit
|
42
|
+
# end
|
42
43
|
|
43
44
|
# POST /annotations/annotations
|
44
45
|
def create
|
@@ -61,14 +62,15 @@ module Triannon
|
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
65
|
+
# NOT YET IMPLEMENTED
|
64
66
|
# PATCH/PUT /annotations/annotations/1
|
65
|
-
def update
|
66
|
-
if @annotation.update(params)
|
67
|
-
redirect_to @annotation, notice: 'Annotation was successfully updated.'
|
68
|
-
else
|
69
|
-
render :edit
|
70
|
-
end
|
71
|
-
end
|
67
|
+
# def update
|
68
|
+
# if @annotation.update(params)
|
69
|
+
# redirect_to @annotation, notice: 'Annotation was successfully updated.'
|
70
|
+
# else
|
71
|
+
# render :edit
|
72
|
+
# end
|
73
|
+
# end
|
72
74
|
|
73
75
|
# DELETE /annotations/annotations/1
|
74
76
|
def destroy
|
@@ -106,5 +108,31 @@ module Triannon
|
|
106
108
|
def ext_ref_error(exception)
|
107
109
|
render plain: exception.message, status: 403
|
108
110
|
end
|
111
|
+
|
112
|
+
# render json_ld respecting requested context
|
113
|
+
# @param [String] req_context set to "iiif" or "oa". Default is OA
|
114
|
+
# @param [String] mime_type the mime type to be set in the Content-Type header of the HTTP response
|
115
|
+
def render_jsonld_per_context (req_context, mime_type=nil)
|
116
|
+
case req_context
|
117
|
+
when "iiif", "IIIF"
|
118
|
+
if mime_type
|
119
|
+
render :json => @annotation.jsonld_iiif, content_type: mime_type
|
120
|
+
else
|
121
|
+
render :json => @annotation.jsonld_iiif
|
122
|
+
end
|
123
|
+
when "oa", "OA"
|
124
|
+
if mime_type
|
125
|
+
render :json => @annotation.jsonld_oa, content_type: mime_type
|
126
|
+
else
|
127
|
+
render :json => @annotation.jsonld_oa
|
128
|
+
end
|
129
|
+
else
|
130
|
+
if mime_type
|
131
|
+
render :json => @annotation.jsonld_oa, content_type: mime_type
|
132
|
+
else
|
133
|
+
render :json => @annotation.jsonld_oa
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
109
137
|
end
|
110
138
|
end
|
@@ -70,13 +70,17 @@ module Triannon
|
|
70
70
|
# @return json-ld representation of graph with OpenAnnotation context as a url
|
71
71
|
def jsonld_oa
|
72
72
|
inline_context = graph.dump(:jsonld, :context => "http://www.w3.org/ns/oa.jsonld")
|
73
|
-
|
73
|
+
hash_from_json = JSON.parse(inline_context)
|
74
|
+
hash_from_json["@context"] = "http://www.w3.org/ns/oa.jsonld"
|
75
|
+
hash_from_json.to_json
|
74
76
|
end
|
75
77
|
|
76
78
|
# @return json-ld representation of graph with IIIF context as a url
|
77
79
|
def jsonld_iiif
|
78
80
|
inline_context = graph.dump(:jsonld, :context => "http://iiif.io/api/presentation/2/context.json")
|
79
|
-
|
81
|
+
hash_from_json = JSON.parse(inline_context)
|
82
|
+
hash_from_json["@context"] = "http://iiif.io/api/presentation/2/context.json"
|
83
|
+
hash_from_json.to_json
|
80
84
|
end
|
81
85
|
|
82
86
|
# query for a subject with type of RDF::OpenAnnotation.Annotation
|
@@ -122,7 +126,7 @@ private
|
|
122
126
|
if data
|
123
127
|
data.strip!
|
124
128
|
case data
|
125
|
-
when /\A\{.+\}\Z/m
|
129
|
+
when /\A\{.+\}\Z/m # (Note: \A and \Z and m are needed instead of ^$ due to \n in data)
|
126
130
|
g ||= RDF::Graph.new << JSON::LD::API.toRdf(json_ld) if json_ld
|
127
131
|
self.data = g.dump(:ttl) if g
|
128
132
|
when /\A<.+>\Z/m # (Note: \A and \Z and m are needed instead of ^$ due to \n in data)
|
@@ -138,7 +142,7 @@ private
|
|
138
142
|
end
|
139
143
|
g
|
140
144
|
end
|
141
|
-
|
145
|
+
|
142
146
|
def json_ld
|
143
147
|
if data.match(/"@context"\s*\:\s*"http\:\/\/www\.w3\.org\/ns\/oa-context-20130208\.json"/)
|
144
148
|
data.sub!("\"http://www.w3.org/ns/oa-context-20130208.json\"", json_oa_context)
|
data/config/routes.rb
CHANGED
@@ -1,5 +1,18 @@
|
|
1
1
|
Triannon::Engine.routes.draw do
|
2
2
|
root to: 'annotations#index'
|
3
3
|
|
4
|
-
|
4
|
+
# show action must explicitly forbid "iiif" or "oa" as id values; couldn't
|
5
|
+
# figure out how to do it with regexp constraint since beginning and end
|
6
|
+
# matchers aren't allowed when enforcing formats for segment (e.g. :id)
|
7
|
+
get '/annotations/:id(.:format)', to: 'annotations#show',
|
8
|
+
constraints: lambda { |request|
|
9
|
+
id = request.env["action_dispatch.request.path_parameters"][:id]
|
10
|
+
id !~ /^iiif$/ && id !~ /^oa$/
|
11
|
+
}
|
12
|
+
|
13
|
+
resources :annotations, :except => [:update, :edit, :show]
|
14
|
+
|
15
|
+
# allow jsonld context in path
|
16
|
+
get '/annotations/:jsonld_context/:id(.:format)', to: 'annotations#show', jsonld_context: /iiif|oa/
|
17
|
+
|
5
18
|
end
|
data/lib/triannon/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: triannon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
8
|
- Naomi Dushay
|
9
|
+
- Willy Mene
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2014-
|
13
|
+
date: 2014-12-03 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rails
|
@@ -17,14 +18,14 @@ dependencies:
|
|
17
18
|
requirements:
|
18
19
|
- - "~>"
|
19
20
|
- !ruby/object:Gem::Version
|
20
|
-
version: 4.2.0.
|
21
|
+
version: 4.2.0.rc1
|
21
22
|
type: :runtime
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
25
26
|
- - "~>"
|
26
27
|
- !ruby/object:Gem::Version
|
27
|
-
version: 4.2.0.
|
28
|
+
version: 4.2.0.rc1
|
28
29
|
- !ruby/object:Gem::Dependency
|
29
30
|
name: linkeddata
|
30
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,20 +110,6 @@ dependencies:
|
|
109
110
|
- - ">="
|
110
111
|
- !ruby/object:Gem::Version
|
111
112
|
version: '0'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: sass-rails
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: 5.0.0.beta1
|
119
|
-
type: :runtime
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 5.0.0.beta1
|
126
113
|
- !ruby/object:Gem::Dependency
|
127
114
|
name: faraday
|
128
115
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,6 +240,7 @@ description:
|
|
253
240
|
email:
|
254
241
|
- cabeer@stanford.edu
|
255
242
|
- ndushay@stanford.edu
|
243
|
+
- wmene@stanford.edu
|
256
244
|
executables: []
|
257
245
|
extensions: []
|
258
246
|
extra_rdoc_files: []
|
@@ -315,5 +303,5 @@ rubyforge_project:
|
|
315
303
|
rubygems_version: 2.4.3
|
316
304
|
signing_key:
|
317
305
|
specification_version: 4
|
318
|
-
summary: Rails engine for working with
|
306
|
+
summary: Rails engine for working with OpenAnnotations stored in Fedora4
|
319
307
|
test_files: []
|