rbbt-rest 1.5.0 → 1.6.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 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