rbbt-rest 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 373227cb24541cc0b77e52a7228c1e8b4f7dafc8
4
- data.tar.gz: f4fcde8a61a88c37f99e4e3ab64cc2b413eba217
3
+ metadata.gz: 019b238df0884dac2b1bd0c4c97588d9c0ddf295
4
+ data.tar.gz: dbb37b58e7d10dc8a2fd82e4636eb006427733fe
5
5
  SHA512:
6
- metadata.gz: f1f78d6a708dee3e21eea2cfe7825d951babf1bb6f226322a33fd1ad36245787344e205bd45c2b5730bb0d471f33c579c834052b12e32e05f585440b6dcc4f42
7
- data.tar.gz: 1fb872b28cffc3bf7b656fbde9318fb201193bdcf811390327524d277cd15ad8dc3826befde3bea35d76f5372375a501bcf92f52ec0d3240cac804b5b1e0b696
6
+ metadata.gz: 3645c2891ebaf8ccbfd1afd8a938b3b2e1a186fe3f6115b53cd62d978337293da74524065d9d25624e96207b5adecea1f70f90d1bac2bda4a157f2c9b2d91b8e
7
+ data.tar.gz: 5eb156ff821ac00db1b6ddd0949ff4e7f9e85e2161e97b1a52cf408ad4f27baab472b463b972a2775764ba7da67b58d77c81651e58b4fa9db0c9776d7ad08a8d
@@ -41,6 +41,36 @@ module RbbtRESTHelpers
41
41
  send_file step.file(@file), :filename => @file
42
42
  end
43
43
 
44
+ # Clean/update job
45
+
46
+ if old_cache(step.path, check) or update == :reload
47
+ begin
48
+ pid = step.info[:pid]
49
+ step.abort if pid and Misc.pid_exists?(pid) and not pid == Process.pid
50
+ step.pid = nil
51
+ rescue Exception
52
+ Log.medium{$!.message}
53
+ end
54
+ step.clean
55
+ end
56
+
57
+ clean_url = request.url
58
+ clean_url = remove_GET_param(clean_url, :_update)
59
+ clean_url = remove_GET_param(clean_url, :_)
60
+
61
+ class << step; def url; @url; end; end
62
+ step.instance_variable_set(:@url, clean_url)
63
+
64
+ # Issue
65
+ if not step.started?
66
+ if cache_type == :synchronous or cache_type == :sync
67
+ step.run
68
+ else
69
+ step.fork
70
+ step.soft_grace
71
+ end
72
+ end
73
+
44
74
  # Return fragment
45
75
 
46
76
  if @fragment
@@ -68,7 +98,9 @@ module RbbtRESTHelpers
68
98
  list_id << " (#{ @filter })" if @filter
69
99
  Entity::List.save_list(type.to_s, list_id, list, user)
70
100
  header "Location", Entity::REST.entity_list_url(list_id, type)
71
- redirect to(Entity::REST.entity_list_url(list_id, type))
101
+ url = Entity::REST.entity_list_url(list_id, type)
102
+ url = url + '?_layout=false' unless @layout
103
+ redirect to(url)
72
104
  when "map"
73
105
  tsv = tsv_process(load_tsv(fragment_file).first)
74
106
  type = tsv.keys.annotation_types.last
@@ -77,6 +109,7 @@ module RbbtRESTHelpers
77
109
  map_id << " (#{ @filter.gsub(';','|') })" if @filter
78
110
  Entity::Map.save_map(type.to_s, column, map_id, tsv, user)
79
111
  url = Entity::REST.entity_map_url(map_id, type, column)
112
+ url = url + '?_layout=false' unless @layout
80
113
  redirect to(url)
81
114
  when "excel"
82
115
  require 'rbbt/tsv/excel'
@@ -101,36 +134,6 @@ module RbbtRESTHelpers
101
134
  end
102
135
  end
103
136
 
104
- # Clean/update job
105
-
106
- if old_cache(step.path, check) or update == :reload
107
- begin
108
- pid = step.info[:pid]
109
- step.abort if pid and Misc.pid_exists?(pid) and not pid == Process.pid
110
- step.pid = nil
111
- rescue Exception
112
- Log.medium{$!.message}
113
- end
114
- step.clean
115
- end
116
-
117
- clean_url = request.url
118
- clean_url = remove_GET_param(clean_url, :_update)
119
- clean_url = remove_GET_param(clean_url, :_)
120
-
121
- class << step; def url; @url; end; end
122
- step.instance_variable_set(:@url, clean_url)
123
-
124
- # Issue
125
- if not step.started?
126
- if cache_type == :synchronous or cache_type == :sync
127
- step.run
128
- else
129
- step.fork
130
- step.soft_grace
131
- end
132
- end
133
-
134
137
  if update == :reload
135
138
  redirect to(clean_url)
136
139
  end
@@ -346,6 +346,7 @@ module RbbtRESTHelpers
346
346
 
347
347
  url = add_GET_param(@fullpath, "_fragment", File.basename(table_file))
348
348
  url = remove_GET_param(url, "_update")
349
+ url = remove_GET_param(url, "_layout")
349
350
  url = remove_GET_param(url, "_")
350
351
  end
351
352
 
@@ -305,7 +305,8 @@ module Sinatra
305
305
  when :name
306
306
  file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
307
307
  file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
308
- new = TSVWorkflow.job(:change_id, "Map #{ map_id }", :format => "Associated Gene Name", :tsv => TSV.open(file)).exec
308
+ #new = TSVWorkflow.job(:swap_id, "Map #{ map_id }", :format => "Associated Gene Name", :tsv => TSV.open(file)).exec
309
+ new = TSV.open(file).change_key "Associated Gene Name"
309
310
  new_id = map_id << " [Names]"
310
311
  Entity::Map.save_map(entity_type, column, new_id, new, user)
311
312
  redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
@@ -484,7 +485,8 @@ module Sinatra
484
485
  next unless entity.respond_to? :link
485
486
  info = entity.info
486
487
  info.delete :annotation_types
487
- type_favs[entity] = {:info => info, :link => entity.link}
488
+ default = entity.respond_to?(:default) ? entity.default || entity.to_s : entity.to_s
489
+ type_favs[entity] = {:info => info, :link => entity.link, :code => entity, :id => default, :name => (entity.respond_to?(:name) ? entity.name || entity : entity) }
488
490
  end
489
491
  favs[type] = type_favs
490
492
  }
@@ -139,7 +139,7 @@ module EntityRESTHelpers
139
139
 
140
140
  dir = Path.setup(File.join(settings.favourite_maps_dir, user))
141
141
 
142
- if (file = dir[entity_type][column]).exists?
142
+ if (file = dir[entity_type][column].find).exists?
143
143
  maps = Open.read(file).split("\n")
144
144
  maps -= [map]
145
145
  if maps.any?
@@ -131,6 +131,10 @@ module Entity
131
131
  attributes[:href] = Entity::REST.entity_url(self, entity_type.to_s, link_params)
132
132
  attributes["attr-entity_id"] = self.to_s
133
133
 
134
+ attributes["data-entity-type"] = self.base_type
135
+ attributes["data-entity"] = self.to_s
136
+ attributes["data-entity-id"] = self.respond_to?(:default)? self.default || self.to_s : self.to_s
137
+
134
138
  begin
135
139
  text = self.respond_to?(:name)? self.name || self : self if text.nil?
136
140
  rescue
@@ -191,8 +195,8 @@ module Entity
191
195
  end
192
196
 
193
197
  def list_action_link(action, text = nil, id = nil, options = {})
194
- text = [id, action] * "&rarr;" if text.nil? or (String === text and text.strip.empty?)
195
198
  id = options[:id] || Misc.digest((self * "|").inspect) if id.nil? or (String === id and id.empty?)
199
+ text = [id, action] * "&rarr;" if text.nil? or (String === text and text.strip.empty?)
196
200
 
197
201
  reuse = options.delete(:reuse)
198
202
  reuse = options.delete("reuse") if reuse.nil?
@@ -111,344 +111,376 @@ module Sinatra
111
111
  else
112
112
  content_type :text
113
113
  halt 200, subset.source * "\n"
114
- end
115
- end
114
+ end
115
+ end
116
116
 
117
117
 
118
- #{{{ Collection
118
+ #{{{ Collection
119
119
 
120
- post '/knowledge_base/:name/:database/collection_children' do
121
- name = consume_parameter :name
122
- database = consume_parameter :database
123
- collection = consume_parameter :collection
124
- raise ParameterException, "No collection specified" if collection.nil?
125
- collection = JSON.parse(collection)
120
+ post '/knowledge_base/:name/:database/collection_children' do
121
+ name = consume_parameter :name
122
+ database = consume_parameter :database
123
+ collection = consume_parameter :collection
124
+ raise ParameterException, "No collection specified" if collection.nil?
125
+ collection = JSON.parse(collection)
126
126
 
127
- kb = get_knowledge_base name
128
- matches = collection.keys.inject({}){|acc,type|
129
- entities = collection[type]
130
- entities.each do |entity|
131
- _matches = kb.children(database, entity)
132
- acc.merge!({ _matches.target_type => _matches}) if _matches and _matches.any?
133
- end
134
- acc
135
- }
136
- case @format
137
- when :tsv
138
- content_type "text/tab-separated-values"
139
- matches = matches.sort_by{|k,list| list.length }.last.last
140
- halt 200, matches.tsv.to_s
141
- when :html
142
- template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Children: #{ [name, database] }")
143
- when :json
144
- content_type :json
145
- _matches = {}
146
- matches.each{|type,list|
147
- _matches[type] = list.target
148
- }
149
- halt 200, _matches.to_json
150
- else
151
- content_type :text
152
- matches = matches.sort_by{|k,list| list.length }.last.last
153
- halt 200, matches.target * "\n"
154
- end
155
- end
127
+ kb = get_knowledge_base name
128
+ matches = collection.keys.inject({}){|acc,type|
129
+ entities = collection[type]
130
+ entities.each do |entity|
131
+ _matches = kb.children(database, entity)
132
+ acc.merge!({ _matches.target_type => _matches}) if _matches and _matches.any?
133
+ end
134
+ acc
135
+ }
136
+ case @format
137
+ when :tsv
138
+ content_type "text/tab-separated-values"
139
+ matches = matches.sort_by{|k,list| list.length }.last.last
140
+ halt 200, matches.tsv.to_s
141
+ when :html
142
+ template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Children: #{ [name, database] }")
143
+ when :json
144
+ content_type :json
145
+ _matches = {}
146
+ matches.each{|type,list|
147
+ _matches[type] = list.target
148
+ }
149
+ halt 200, _matches.to_json
150
+ else
151
+ content_type :text
152
+ matches = matches.sort_by{|k,list| list.length }.last.last
153
+ halt 200, matches.target * "\n"
154
+ end
155
+ end
156
156
 
157
- post '/knowledge_base/:name/:database/collection_parents' do
158
- name = consume_parameter :name
159
- database = consume_parameter :database
160
- collection = consume_parameter :collection
161
- raise ParameterException, "No collection specified" if collection.nil?
162
- collection = JSON.parse(collection)
163
-
164
- kb = get_knowledge_base name
165
- matches = collection.keys.inject({}){|acc,type|
166
- entities = collection[type]
167
- entities.each do |entity|
168
- _matches = kb.parents(database, entity)
169
- acc.merge!({ _matches.target_type => _matches}) if _matches and _matches.any?
170
- end
171
- acc
172
- }
173
- case @format
174
- when :tsv
175
- content_type "text/tab-separated-values"
176
- matches = matches.sort_by{|k,list| list.length }.last.last
177
- halt 200, matches.tsv.to_s
178
- when :html
179
- template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Parents: #{ [name, database] }")
180
- when :json
181
- content_type :json
182
- _matches = {}
183
- matches.each{|type,list|
184
- _matches[type] = list.target
185
- }
186
- halt 200, _matches.to_json
187
- else
188
- content_type :text
189
- matches = matches.sort_by{|k,list| list.length }.last.last
190
- halt 200, matches.target * "\n"
191
- end
192
- end
157
+ post '/knowledge_base/:name/:database/collection_parents' do
158
+ name = consume_parameter :name
159
+ database = consume_parameter :database
160
+ collection = consume_parameter :collection
161
+ raise ParameterException, "No collection specified" if collection.nil?
162
+ collection = JSON.parse(collection)
163
+
164
+ kb = get_knowledge_base name
165
+ matches = collection.keys.inject({}){|acc,type|
166
+ entities = collection[type]
167
+ entities.each do |entity|
168
+ _matches = kb.parents(database, entity)
169
+ acc.merge!({ _matches.target_type => _matches}) if _matches and _matches.any?
170
+ end
171
+ acc
172
+ }
173
+ case @format
174
+ when :tsv
175
+ content_type "text/tab-separated-values"
176
+ matches = matches.sort_by{|k,list| list.length }.last.last
177
+ halt 200, matches.tsv.to_s
178
+ when :html
179
+ template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Parents: #{ [name, database] }")
180
+ when :json
181
+ content_type :json
182
+ _matches = {}
183
+ matches.each{|type,list|
184
+ _matches[type] = list.target
185
+ }
186
+ halt 200, _matches.to_json
187
+ else
188
+ content_type :text
189
+ matches = matches.sort_by{|k,list| list.length }.last.last
190
+ halt 200, matches.target * "\n"
191
+ end
192
+ end
193
+
194
+ post '/knowledge_base/:name/:database/collection_neighbours' do
195
+ name = consume_parameter :name
196
+ database = consume_parameter :database
197
+ collection = consume_parameter :collection
198
+ raise ParameterException, "No collection specified" if collection.nil?
199
+ collection = JSON.parse(collection)
193
200
 
194
- post '/knowledge_base/:name/:database/collection_neighbours' do
195
- name = consume_parameter :name
196
- database = consume_parameter :database
197
- collection = consume_parameter :collection
198
- raise ParameterException, "No collection specified" if collection.nil?
199
- collection = JSON.parse(collection)
201
+ kb = get_knowledge_base name
202
+ matches = collection.keys.inject({}){|acc,type|
203
+ entities = collection[type]
204
+ entities.each do |entity|
205
+ _matches_h = kb.neighbours(database, entity)
206
+ _matches_h.each do |key, _matches|
207
+ target_type = _matches.target_entity_type
208
+
209
+ _matches = acc[target_type].concat _matches if acc[target_type] and acc[target_type].any?
210
+
211
+ acc.merge!({ target_type => _matches }) if _matches and _matches.any?
212
+ end
213
+ end
214
+ acc
215
+ }
216
+
217
+ @format ||= :json
218
+ case @format
219
+ when :tsv
220
+ content_type "text/tab-separated-values"
221
+ matches = matches.sort_by{|k,list| list.length }.last.last
222
+ halt 200, matches.tsv.to_s
223
+ when :html
224
+ template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Parents: #{ [name, database] }")
225
+ when :json
226
+ content_type :json
227
+ _matches = {}
228
+ matches.each{|type,list|
229
+ _matches[type] = list.target.uniq.sort
230
+ }
231
+ halt 200, _matches.to_json
232
+ else
233
+ content_type :text
234
+ matches = matches.sort_by{|k,list| list.length }.last.last
235
+ halt 200, matches.target * "\n"
236
+ end
237
+ end
200
238
 
201
- kb = get_knowledge_base name
202
- matches = collection.keys.inject({}){|acc,type|
203
- entities = collection[type]
204
- entities.each do |entity|
205
- _matches_h = kb.neighbours(database, entity)
206
- _matches_h.each do |key, _matches|
207
- target_type = _matches.target_entity_type
239
+ get '/knowledge_base/:name/:database/subset' do
240
+ name = consume_parameter :name
241
+ database = consume_parameter :database
242
+ source = consume_parameter :source
243
+ target = consume_parameter :target
208
244
 
209
- _matches = acc[target_type].concat _matches if acc[target_type] and acc[target_type].any?
245
+ source = source == "all" ? :all : source.split(@array_separator) if source
246
+ target = target == "all" ? :all : target.split(@array_separator) if target
247
+ entities = { :source => source, :target => target }
210
248
 
211
- acc.merge!({ target_type => _matches }) if _matches and _matches.any?
249
+ kb = get_knowledge_base name
250
+ subset = kb.subset(database, entities)
251
+ case @format
252
+ when :tsv
253
+ content_type "text/tab-separated-values"
254
+ halt 200, subset.tsv.to_s
255
+ when :html
256
+ template_render('knowledge_base_partials/subset', {:subset => subset}, "Subset: #{ [name, database] }")
257
+ when :json
258
+ content_type :json
259
+ halt 200, subset.source.to_json
260
+ else
261
+ content_type :text
262
+ halt 200, subset.source * "\n"
263
+ end
212
264
  end
213
- end
214
- acc
215
- }
216
-
217
- @format ||= :json
218
- case @format
219
- when :tsv
220
- content_type "text/tab-separated-values"
221
- matches = matches.sort_by{|k,list| list.length }.last.last
222
- halt 200, matches.tsv.to_s
223
- when :html
224
- template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Parents: #{ [name, database] }")
225
- when :json
226
- content_type :json
227
- _matches = {}
228
- matches.each{|type,list|
229
- _matches[type] = list.target.uniq.sort
230
- }
231
- halt 200, _matches.to_json
232
- else
233
- content_type :text
234
- matches = matches.sort_by{|k,list| list.length }.last.last
235
- halt 200, matches.target * "\n"
236
- end
237
- end
238
265
 
239
- get '/knowledge_base/:name/:database/subset' do
240
- name = consume_parameter :name
241
- database = consume_parameter :database
242
- source = consume_parameter :source
243
- target = consume_parameter :target
244
-
245
- source = source == "all" ? :all : source.split(@array_separator) if source
246
- target = target == "all" ? :all : target.split(@array_separator) if target
247
- entities = { :source => source, :target => target }
248
-
249
- kb = get_knowledge_base name
250
- subset = kb.subset(database, entities)
251
- case @format
252
- when :tsv
253
- content_type "text/tab-separated-values"
254
- halt 200, subset.tsv.to_s
255
- when :html
256
- template_render('knowledge_base_partials/subset', {:subset => subset}, "Subset: #{ [name, database] }")
257
- when :json
258
- content_type :json
259
- halt 200, subset.source.to_json
260
- else
261
- content_type :text
262
- halt 200, subset.source * "\n"
263
- end
264
- end
266
+ #{{{ Info
265
267
 
266
- #{{{ Info
268
+ get '/knowledge_base/info/:name/:database/:pair' do
269
+ name = consume_parameter :name
270
+ database = consume_parameter :database
271
+ pair = consume_parameter :pair
267
272
 
268
- get '/knowledge_base/info/:name/:database/:pair' do
269
- name = consume_parameter :name
270
- database = consume_parameter :database
271
- pair = consume_parameter :pair
273
+ kb = get_knowledge_base name
274
+ index = kb.get_index(database)
272
275
 
273
- kb = get_knowledge_base name
274
- index = kb.get_index(database)
276
+ AssociationItem.setup(pair, kb, database, false)
277
+ template_render('knowledge_base_partials/association', {:pair => pair, :kb => kb, :index => index, :database => database}, "Association: #{ pair } #{[name, database] * ":"}", :cache_type => :async)
278
+ end
275
279
 
276
- AssociationItem.setup(pair, kb, database, false)
277
- template_render('knowledge_base_partials/association', {:pair => pair, :kb => kb, :index => index, :database => database}, "Association: #{ pair } #{[name, database] * ":"}", :cache_type => :async)
278
- end
280
+ #{{{ Children
279
281
 
280
- #{{{ Children
282
+ get '/knowledge_base/:name/:database/entity_children/:entity' do
283
+ name = consume_parameter :name
284
+ database = consume_parameter :database
285
+ entity = consume_parameter :entity
281
286
 
282
- get '/knowledge_base/:name/:database/entity_children/:entity' do
283
- name = consume_parameter :name
284
- database = consume_parameter :database
285
- entity = consume_parameter :entity
287
+ kb = get_knowledge_base name
288
+ found = kb.identify database, entity
289
+ raise ParameterException, "Entity #{entity} was not found" unless found
286
290
 
287
- kb = get_knowledge_base name
288
- found = kb.identify database, entity
289
- raise ParameterException, "Entity #{entity} was not found" unless found
291
+ list = kb.children(database, found).target_entity
290
292
 
291
- list = kb.children(database, found).target_entity
293
+ case @format
294
+ when :json
295
+ content_type "application/json"
296
+ halt 200, prepare_entities_for_json(list).to_json
297
+ when :html
298
+ end
299
+ end
292
300
 
293
- case @format
294
- when :json
295
- content_type "application/json"
296
- halt 200, prepare_entities_for_json(list).to_json
297
- when :html
298
- end
299
- end
301
+ # List children
302
+ post '/knowledge_base/:name/:database/entity_list_children/' do
303
+ name = consume_parameter :name
304
+ database = consume_parameter :database
305
+ entities = consume_parameter :entities
300
306
 
301
- # List children
302
- post '/knowledge_base/:name/:database/entity_list_children/' do
303
- name = consume_parameter :name
304
- database = consume_parameter :database
305
- entities = consume_parameter :entities
307
+ raise ParameterException, "No 'entities' provided" if entities.nil?
306
308
 
307
- raise ParameterException, "No 'entities' provided" if entities.nil?
309
+ entities = entities.split("|")
308
310
 
309
- entities = entities.split("|")
311
+ kb = get_knowledge_base name
310
312
 
311
- kb = get_knowledge_base name
313
+ children = {}
314
+ entities.each do |entity|
315
+ found = kb.identify database, entity
316
+ next if found.nil?
317
+ children[entity] = kb.children(database, found).target_entity
318
+ end
319
+ case @format
320
+ when :json
321
+ content_type "application/json"
322
+ halt 200, prepare_entities_for_json(children).to_json
323
+ when :html
324
+ end
325
+ end
312
326
 
313
- children = {}
314
- entities.each do |entity|
315
- found = kb.identify database, entity
316
- next if found.nil?
317
- children[entity] = kb.children(database, found).target_entity
318
- end
319
- case @format
320
- when :json
321
- content_type "application/json"
322
- halt 200, prepare_entities_for_json(children).to_json
323
- when :html
324
- end
325
- end
327
+ # Collection children
328
+ post '/knowledge_base/:name/:database/entity_collection_children' do
329
+ name = consume_parameter :name
330
+ database = consume_parameter :database
331
+ entities = consume_parameter :entities
326
332
 
327
- # Collection children
328
- post '/knowledge_base/:name/:database/entity_collection_children' do
329
- name = consume_parameter :name
330
- database = consume_parameter :database
331
- entities = consume_parameter :entities
333
+ raise ParameterException, "No 'entities' provided" if entities.nil?
332
334
 
333
- raise ParameterException, "No 'entities' provided" if entities.nil?
335
+ entities = JSON.parse(entities)
334
336
 
335
- entities = JSON.parse(entities)
337
+ kb = get_knowledge_base name
336
338
 
337
- kb = get_knowledge_base name
339
+ entities.each do |type,list|
340
+ list.each do |entity|
341
+ found = kb.identify database, entity
342
+ next if found.nil?
343
+ targets = kb.children(database, found).target_entity
344
+ next if targets.nil? or targets.empty?
345
+ target_type = kb.target database
346
+ children[target_type] ||= []
347
+ children[target_type].concat targets
348
+ end
349
+ end
338
350
 
339
- entities.each do |type,list|
340
- list.each do |entity|
341
- found = kb.identify database, entity
342
- next if found.nil?
343
- targets = kb.children(database, found).target_entity
344
- next if targets.nil? or targets.empty?
345
- target_type = kb.target database
346
- children[target_type] ||= []
347
- children[target_type].concat targets
348
- end
349
- end
351
+ case @format
352
+ when :json
353
+ content_type "application/json"
354
+ halt 200, prepare_entities_for_json(children).to_json
355
+ when :html
356
+ end
357
+ end
350
358
 
351
- case @format
352
- when :json
353
- content_type "application/json"
354
- halt 200, prepare_entities_for_json(children).to_json
355
- when :html
356
- end
357
- end
359
+ #{{{ Neighbours
358
360
 
359
- #{{{ Neighbours
361
+ get '/knowledge_base/:name/:database/entity_neighbours/:entity' do
362
+ name = consume_parameter :name
363
+ database = consume_parameter :database
364
+ entity = consume_parameter :entity
360
365
 
361
- get '/knowledge_base/:name/:database/entity_neighbours/:entity' do
362
- name = consume_parameter :name
363
- database = consume_parameter :database
364
- entity = consume_parameter :entity
366
+ kb = get_knowledge_base name
367
+ found = kb.identify database, entity
368
+ raise ParameterException, "Entity #{entity} was not found" unless found
365
369
 
366
- kb = get_knowledge_base name
367
- found = kb.identify database, entity
368
- raise ParameterException, "Entity #{entity} was not found" unless found
370
+ list = kb.neighbours(database, found).values.select{|list| list and list.any?}.first
371
+ list = list.target_entity if list.respond_to? :target_entity
372
+ list ||= []
369
373
 
370
- list = kb.neighbours(database, found).values.select{|list| list and list.any?}.first
371
- list = list.target_entity if list.respond_to? :target_entity
372
- list ||= []
374
+ case @format
375
+ when :json
376
+ content_type "application/json"
377
+ halt 200, prepare_entities_for_json(list).to_json
378
+ when :html
379
+ end
380
+ end
373
381
 
374
- case @format
375
- when :json
376
- content_type "application/json"
377
- halt 200, prepare_entities_for_json(list).to_json
378
- when :html
379
- end
380
- end
382
+ post '/knowledge_base/:name/:database/entity_list_neighbours/' do
383
+ name = consume_parameter :name
384
+ database = consume_parameter :database
385
+ entities = consume_parameter :entities
381
386
 
382
- post '/knowledge_base/:name/:database/entity_list_neighbours/' do
383
- name = consume_parameter :name
384
- database = consume_parameter :database
385
- entities = consume_parameter :entities
387
+ raise ParameterException, "No 'entities' provided" if entities.nil?
386
388
 
387
- raise ParameterException, "No 'entities' provided" if entities.nil?
389
+ entities = entities.split("|")
388
390
 
389
- entities = entities.split("|")
391
+ kb = get_knowledge_base name
390
392
 
391
- kb = get_knowledge_base name
393
+ children = {}
394
+ entities.each do |entity|
395
+ found = kb.identify database, entity
396
+ next if found.nil?
397
+ matches = kb.neighbours(database, found).values.select{|list| list and list.any?}.first
398
+ next if matches.nil? or matches.empty?
399
+ children[entity] = matches.target_entity
400
+ end
401
+ case @format
402
+ when :json
403
+ content_type "application/json"
404
+ halt 200, prepare_entities_for_json(children).to_json
405
+ when :html
406
+ end
407
+ end
392
408
 
393
- children = {}
394
- entities.each do |entity|
395
- found = kb.identify database, entity
396
- next if found.nil?
397
- matches = kb.neighbours(database, found).values.select{|list| list and list.any?}.first
398
- next if matches.nil? or matches.empty?
399
- children[entity] = matches.target_entity
400
- end
401
- case @format
402
- when :json
403
- content_type "application/json"
404
- halt 200, prepare_entities_for_json(children).to_json
405
- when :html
406
- end
407
- end
409
+ post '/knowledge_base/:name/:database/entity_collection_neighbours' do
410
+ name = consume_parameter :name
411
+ database = consume_parameter :database
412
+ entities = consume_parameter :entities
408
413
 
409
- post '/knowledge_base/:name/:database/entity_collection_neighbours' do
410
- name = consume_parameter :name
411
- database = consume_parameter :database
412
- entities = consume_parameter :entities
414
+ raise ParameterException, "No 'entities' provided" if entities.nil?
413
415
 
414
- raise ParameterException, "No 'entities' provided" if entities.nil?
416
+ entities = JSON.parse(entities)
415
417
 
416
- entities = JSON.parse(entities)
418
+ kb = get_knowledge_base name
417
419
 
418
- kb = get_knowledge_base name
420
+ neighbours = {}
421
+ entities.each do |type,list|
422
+ list.each do |entity|
423
+
424
+ found = kb.identify_source database, entity
425
+ if found.nil?
426
+ reverse = true
427
+ found = kb.identify_target database, entity
428
+ else
429
+ reverse = false
430
+ end
431
+ next if found.nil?
432
+
433
+ matches = kb.neighbours(database, found)[reverse ? :parents : :children]
434
+ next if matches.nil? or matches.empty?
435
+ targets = matches.target
436
+
437
+ entity_type = reverse ? kb.source_type(database) : kb.target_type(database)
438
+ neighbours[entity_type] ||= []
439
+ neighbours[entity_type].concat targets
440
+ end
441
+ end
419
442
 
420
- neighbours = {}
421
- entities.each do |type,list|
422
- list.each do |entity|
443
+ neighbours.each{|type, list| list.uniq!}
423
444
 
424
- found = kb.identify_source database, entity
425
- if found.nil?
426
- reverse = true
427
- found = kb.identify_target database, entity
428
- else
429
- reverse = false
445
+ case @format
446
+ when :json
447
+ content_type "application/json"
448
+ halt 200, prepare_entities_for_json(neighbours).to_json
449
+ when :html
450
+ end
430
451
  end
431
- next if found.nil?
432
452
 
433
- matches = kb.neighbours(database, found)[reverse ? :parents : :children]
434
- next if matches.nil? or matches.empty?
435
- targets = matches.target
453
+ get '/kb/:name/:database/children/:entity' do
454
+ name = consume_parameter :name
455
+ database = consume_parameter :database
456
+ entity = consume_parameter :entity
436
457
 
437
- entity_type = reverse ? kb.source_type(database) : kb.target_type(database)
438
- neighbours[entity_type] ||= []
439
- neighbours[entity_type].concat targets
440
- end
441
- end
458
+ kb = get_knowledge_base name
459
+ found = kb.identify database, entity
460
+ raise ParameterException, "Entity #{entity} was not found" unless found
442
461
 
443
- neighbours.each{|type, list| list.uniq!}
462
+ iii kb.children(database, found)
463
+ list = kb.children(database, found).target_entity
444
464
 
445
- case @format
446
- when :json
447
- content_type "application/json"
448
- halt 200, prepare_entities_for_json(neighbours).to_json
449
- when :html
450
- end
451
- end
465
+ content_type "application/json"
466
+ halt 200, serialize_entities(list).to_json
467
+ end
468
+
469
+ get '/kb/:name/:database/parents/:entity' do
470
+ name = consume_parameter :name
471
+ database = consume_parameter :database
472
+ entity = consume_parameter :entity
473
+
474
+ kb = get_knowledge_base name
475
+ found = kb.identify database, entity
476
+ raise ParameterException, "Entity #{entity} was not found" unless found
477
+
478
+ iii kb.parents(database, found)
479
+ list = kb.parents(database, found).target_entity
480
+
481
+ content_type "application/json"
482
+ halt 200, serialize_entities(list).to_json
483
+ end
452
484
  end
453
485
  end
454
486
  end