rbbt-rest 1.1.4 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/config.ru +3 -0
- data/lib/rbbt/rest/client.rb +9 -10
- data/lib/rbbt/rest/common/cache.rb +32 -7
- data/lib/rbbt/rest/common/forms.rb +33 -0
- data/lib/rbbt/rest/common/locate.rb +4 -0
- data/lib/rbbt/rest/common/misc.rb +24 -0
- data/lib/rbbt/rest/common/render.rb +26 -9
- data/lib/rbbt/rest/common/resources.rb +1 -1
- data/lib/rbbt/rest/common/table.rb +87 -26
- data/lib/rbbt/rest/common/users.rb +5 -1
- data/lib/rbbt/rest/entity.rb +300 -95
- data/lib/rbbt/rest/entity/action_controller.rb +6 -1
- data/lib/rbbt/rest/entity/entity_list_card.rb +1 -1
- data/lib/rbbt/rest/entity/entity_map_card.rb +15 -0
- data/lib/rbbt/rest/entity/favourites.rb +57 -1
- data/lib/rbbt/rest/entity/finder.rb +1 -1
- data/lib/rbbt/rest/entity/helpers.rb +40 -7
- data/lib/rbbt/rest/entity/list.rb +8 -0
- data/lib/rbbt/rest/entity/locate.rb +114 -0
- data/lib/rbbt/rest/entity/map.rb +99 -0
- data/lib/rbbt/rest/entity/render.rb +25 -0
- data/lib/rbbt/rest/entity/rest.rb +33 -4
- data/lib/rbbt/rest/main.rb +27 -4
- data/lib/rbbt/rest/workflow.rb +7 -1
- data/lib/rbbt/rest/workflow/jobs.rb +21 -1
- data/share/views/compass/app.sass +17 -9
- data/share/views/compass/entity_card.sass +16 -3
- data/share/views/compass/favourites.sass +44 -2
- data/share/views/compass/form.sass +11 -0
- data/share/views/compass/list_container.sass +1 -1
- data/share/views/compass/reveal.sass +31 -0
- data/share/views/compass/style.sass +29 -1
- data/share/views/compass/style_mixins.sass +18 -6
- data/share/views/compass/table.sass +19 -3
- data/share/views/compass/topbar.sass +8 -2
- data/share/views/entity_map/Default.haml +5 -0
- data/share/views/entity_partials/action_card.haml +2 -0
- data/share/views/entity_partials/action_controller.haml +8 -1
- data/share/views/entity_partials/entity_list_card.haml +8 -6
- data/share/views/entity_partials/entity_map_card.haml +63 -0
- data/share/views/entity_partials/list_container.haml +3 -2
- data/share/views/error.haml +14 -10
- data/share/views/help.haml +34 -0
- data/share/views/help/entity.haml +193 -0
- data/share/views/help/workflow.haml +77 -0
- data/share/views/job_result/tsv.haml +3 -2
- data/share/views/layout.haml +33 -3
- data/share/views/layout/favourites.haml +14 -4
- data/share/views/layout/header.haml +4 -0
- data/share/views/partials/form.haml +3 -1
- data/share/views/partials/table.haml +16 -52
- data/share/views/partials/table/column.haml +10 -0
- data/share/views/partials/table/files.haml +4 -0
- data/share/views/partials/table/filters.haml +11 -0
- data/share/views/partials/table/page.haml +37 -0
- data/share/views/public/favicon.gif +0 -0
- data/share/views/public/js/_ajax_replace.js +76 -4
- data/share/views/public/js/_fix_tablesorter_science.js +13 -0
- data/share/views/public/js/actions.js +8 -2
- data/share/views/public/js/base.js +12 -1
- data/share/views/public/js/entities.js +39 -7
- data/share/views/public/js/favourites.js +308 -77
- data/share/views/public/js/helpers.js +9 -5
- data/share/views/public/js/lists.js +12 -12
- data/share/views/public/js/maps.js +17 -0
- data/share/views/public/js/reveal.js +48 -0
- data/share/views/public/js/tables.js +110 -51
- data/share/views/public/js/workflow.js +4 -16
- data/share/views/public/plugins/underscore/js/underscore.js +1227 -0
- data/share/views/tasks.haml +12 -1
- data/share/views/wait.haml +7 -0
- metadata +17 -2
@@ -30,7 +30,11 @@ module Sinatra
|
|
30
30
|
def self.registered(app)
|
31
31
|
app.helpers RbbtAuth::Helpers
|
32
32
|
|
33
|
-
|
33
|
+
if Rbbt.etc.web_users.exists?
|
34
|
+
app.set :users, Rbbt.etc.web_users.yaml
|
35
|
+
else
|
36
|
+
app.set :users, {}
|
37
|
+
end
|
34
38
|
|
35
39
|
app.get '/login' do
|
36
40
|
"<form class='login' method='POST' action='/login'>" +
|
data/lib/rbbt/rest/entity.rb
CHANGED
@@ -11,16 +11,20 @@ require 'rbbt/rest/entity/locate'
|
|
11
11
|
require 'rbbt/rest/entity/helpers'
|
12
12
|
require 'rbbt/rest/entity/render'
|
13
13
|
require 'rbbt/rest/entity/list'
|
14
|
+
require 'rbbt/rest/entity/map'
|
14
15
|
require 'rbbt/rest/entity/rest'
|
15
16
|
require 'rbbt/rest/entity/favourites'
|
16
17
|
require 'rbbt/rest/entity/finder'
|
17
18
|
|
18
19
|
require 'rbbt/rest/entity/entity_card'
|
19
20
|
require 'rbbt/rest/entity/entity_list_card'
|
21
|
+
require 'rbbt/rest/entity/entity_map_card'
|
20
22
|
require 'rbbt/rest/entity/action_card'
|
21
23
|
require 'rbbt/rest/entity/list_container'
|
22
24
|
require 'rbbt/rest/entity/action_controller'
|
23
25
|
|
26
|
+
require 'rbbt/statistics/rank_product'
|
27
|
+
|
24
28
|
|
25
29
|
module Sinatra
|
26
30
|
module RbbtRESTEntity
|
@@ -30,6 +34,7 @@ module Sinatra
|
|
30
34
|
|
31
35
|
set :favourites_dir, Rbbt.var.find.sinatra.favourites
|
32
36
|
set :favourite_lists_dir, Rbbt.var.find.sinatra.favourite_lists
|
37
|
+
set :favourite_maps_dir, Rbbt.var.find.sinatra.favourite_maps
|
33
38
|
set :finder, nil
|
34
39
|
|
35
40
|
get /^\/entity.*/ do
|
@@ -37,6 +42,42 @@ module Sinatra
|
|
37
42
|
pass
|
38
43
|
end
|
39
44
|
|
45
|
+
#{{{ Finder
|
46
|
+
|
47
|
+
get '/find' do
|
48
|
+
halt 200 if params[:term].nil? or params[:term].empty?
|
49
|
+
|
50
|
+
term = params[:term]
|
51
|
+
sorted_results = finder_find(term)
|
52
|
+
|
53
|
+
raise "No finder defined" unless settings.respond_to? :finder and not settings.finder.nil?
|
54
|
+
if request.xhr?
|
55
|
+
content_type "application/json"
|
56
|
+
halt 200, sorted_results.to_json
|
57
|
+
else
|
58
|
+
i = sorted_results.first
|
59
|
+
raise "Term not recognized: #{ term }" if i.nil?
|
60
|
+
redirect to(Entity::REST.entity_url(i[:code], i[:format], i[:namespace]))
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
post '/find' do
|
65
|
+
term = consume_parameter :term
|
66
|
+
if term =~ /(.*) \[(.*)\]$/
|
67
|
+
term = $1
|
68
|
+
namespace, format = $2.split(":")
|
69
|
+
format, namespace = namespace, nil if format.nil?
|
70
|
+
|
71
|
+
redirect to(Entity::REST.entity_url(term, format, :organism => namespace))
|
72
|
+
else
|
73
|
+
sorted_results = finder_find(term)
|
74
|
+
i = sorted_results.first
|
75
|
+
halt 404, "Term not recognized: #{ term }" if i.nil?
|
76
|
+
redirect to(Entity::REST.entity_url(i[:code], i[:format], :organism => i[:namespace]))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
40
81
|
#{{{ Entities
|
41
82
|
|
42
83
|
get '/entity/:entity_type/:entity' do
|
@@ -100,6 +141,8 @@ module Sinatra
|
|
100
141
|
|
101
142
|
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
102
143
|
|
144
|
+
raise "List not found" if list.nil?
|
145
|
+
|
103
146
|
case @format
|
104
147
|
when :raw, :literal
|
105
148
|
content_type "text/tab-separated-values"
|
@@ -111,30 +154,20 @@ module Sinatra
|
|
111
154
|
|
112
155
|
raise "List file not found: #{ list_id }"
|
113
156
|
when :json
|
114
|
-
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
115
157
|
list_info = {:entities => list, :info => list.info}
|
116
158
|
halt 200, list_info.to_json
|
117
159
|
when :info
|
118
|
-
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
119
160
|
halt 200, list.info.to_json
|
120
161
|
when :list
|
121
|
-
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
122
|
-
|
123
162
|
content_type "text/plain"
|
124
163
|
halt 200, list * "\n"
|
125
164
|
when :name
|
126
|
-
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
127
|
-
|
128
165
|
content_type "text/plain"
|
129
|
-
|
130
166
|
halt 200, list.name * "\n"
|
131
167
|
when :ensembl
|
132
|
-
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
133
|
-
|
134
168
|
content_type "text/plain"
|
135
169
|
halt 200, list.ensembl * "\n"
|
136
170
|
else
|
137
|
-
list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
|
138
171
|
entity_list_render(list, list_id)
|
139
172
|
end
|
140
173
|
end
|
@@ -154,6 +187,8 @@ module Sinatra
|
|
154
187
|
post '/entity_list/:entity_type/:list_id' do
|
155
188
|
list_id = consume_parameter :list_id
|
156
189
|
|
190
|
+
list_id = list_id.gsub("'", '"')
|
191
|
+
|
157
192
|
entity_type = consume_parameter :entity_type
|
158
193
|
entity_type = Entity::REST.restore_element(entity_type)
|
159
194
|
|
@@ -179,6 +214,234 @@ module Sinatra
|
|
179
214
|
redirect to(Entity::REST.entity_list_url(list_id, type))
|
180
215
|
end
|
181
216
|
|
217
|
+
#{{{ List Management
|
218
|
+
|
219
|
+
get '/entity_list/intersect/:entity_type/:list_id' do
|
220
|
+
entity_type = consume_parameter :entity_type
|
221
|
+
list_id = consume_parameter :list_id
|
222
|
+
other_list_id = consume_parameter :other_list_id
|
223
|
+
|
224
|
+
entity_type = Entity::REST.restore_element(entity_type)
|
225
|
+
type = entity_type.split(":").first
|
226
|
+
|
227
|
+
list_id = Entity::REST.restore_element(list_id)
|
228
|
+
list = Entity::List.load_list(type, list_id, user)
|
229
|
+
|
230
|
+
other_list_id = Entity::REST.restore_element(other_list_id)
|
231
|
+
other_list = Entity::List.load_list(type, other_list_id, user)
|
232
|
+
|
233
|
+
new_list = list.subset(other_list)
|
234
|
+
new_list_id = [list_id, other_list_id] * " ^ "
|
235
|
+
new_list_id = [Misc.digest(list_id), Misc.digest(other_list_id)] * " ^ " if new_list_id.length > 200
|
236
|
+
|
237
|
+
Entity::List.save_list(type, new_list_id, new_list, user)
|
238
|
+
|
239
|
+
redirect to(Entity::REST.entity_list_url(new_list_id, type))
|
240
|
+
end
|
241
|
+
|
242
|
+
get '/entity_list/remove/:entity_type/:list_id' do
|
243
|
+
entity_type = consume_parameter :entity_type
|
244
|
+
list_id = consume_parameter :list_id
|
245
|
+
other_list_id = consume_parameter :other_list_id
|
246
|
+
|
247
|
+
entity_type = Entity::REST.restore_element(entity_type)
|
248
|
+
type = entity_type.split(":").first
|
249
|
+
|
250
|
+
list_id = Entity::REST.restore_element(list_id)
|
251
|
+
list = Entity::List.load_list(type, list_id, user)
|
252
|
+
|
253
|
+
other_list_id = Entity::REST.restore_element(other_list_id)
|
254
|
+
other_list = Entity::List.load_list(type, other_list_id, user)
|
255
|
+
|
256
|
+
new_list = list.remove(other_list)
|
257
|
+
new_list_id = [list_id, other_list_id] * " - "
|
258
|
+
new_list_id = [Misc.digest(list_id), Misc.digest(other_list_id)] * " ~ " if new_list_id.length > 200
|
259
|
+
|
260
|
+
Entity::List.save_list(type, new_list_id, new_list, user)
|
261
|
+
|
262
|
+
redirect to(Entity::REST.entity_list_url(new_list_id, type))
|
263
|
+
end
|
264
|
+
|
265
|
+
get '/entity_list/add/:entity_type/:list_id' do
|
266
|
+
entity_type = consume_parameter :entity_type
|
267
|
+
list_id = consume_parameter :list_id
|
268
|
+
other_list_id = consume_parameter :other_list_id
|
269
|
+
|
270
|
+
entity_type = Entity::REST.restore_element(entity_type)
|
271
|
+
type = entity_type.split(":").first
|
272
|
+
|
273
|
+
list_id = Entity::REST.restore_element(list_id)
|
274
|
+
list = Entity::List.load_list(type, list_id, user)
|
275
|
+
|
276
|
+
other_list_id = Entity::REST.restore_element(other_list_id)
|
277
|
+
other_list = Entity::List.load_list(type, other_list_id, user)
|
278
|
+
|
279
|
+
new_list = list.concat(other_list)
|
280
|
+
new_list_id = [list_id, other_list_id] * " PLUS "
|
281
|
+
new_list_id = [Misc.digest(list_id), Misc.digest(other_list_id)] * " PLUS " if new_list_id.length > 200
|
282
|
+
|
283
|
+
Entity::List.save_list(type, new_list_id, new_list, user)
|
284
|
+
|
285
|
+
redirect to(Entity::REST.entity_list_url(new_list_id, type))
|
286
|
+
end
|
287
|
+
|
288
|
+
#{{{ Entity maps
|
289
|
+
|
290
|
+
get '/entity_map/:entity_type/:column/:map_id' do
|
291
|
+
entity_type = consume_parameter :entity_type
|
292
|
+
map_id = consume_parameter :map_id
|
293
|
+
column = consume_parameter :column
|
294
|
+
|
295
|
+
entity_type = Entity::REST.restore_element(entity_type)
|
296
|
+
column = Entity::REST.restore_element(column)
|
297
|
+
map_id = Entity::REST.restore_element(map_id)
|
298
|
+
|
299
|
+
map = Entity::Map.load_map(entity_type.split(":").first, column, map_id, user)
|
300
|
+
|
301
|
+
case @format
|
302
|
+
when :name
|
303
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
304
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
|
305
|
+
new = TSVWorkflow.job(:change_id, "Map #{ map_id }", :format => "Associated Gene Name", :tsv => TSV.open(file)).exec
|
306
|
+
new_id = map_id << " [Names]"
|
307
|
+
Entity::Map.save_map(entity_type, column, new_id, new, user)
|
308
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
309
|
+
when :ensembl
|
310
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
311
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
|
312
|
+
new = TSVWorkflow.job(:change_id, "Map #{ map_id }", :format => "Ensembl Gene ID", :tsv => TSV.open(file)).exec
|
313
|
+
new_id = map_id << " [Ensembl]"
|
314
|
+
Entity::Map.save_map(entity_type, column, new_id, new, user)
|
315
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
316
|
+
when :pvalue_score
|
317
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
318
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
|
319
|
+
tsv = TSV.open(file)
|
320
|
+
tsv.process tsv.fields.first do |value|
|
321
|
+
value = value.flatten.first if Array === value
|
322
|
+
(1 - value.to_f) / value.to_f
|
323
|
+
end
|
324
|
+
tsv.fields = [tsv.fields.first + " score"]
|
325
|
+
tsv.type = :single
|
326
|
+
tsv.cast = :to_f
|
327
|
+
new_id = map_id << " [Pvalue score]"
|
328
|
+
column = 'Pvalue Score'
|
329
|
+
Entity::Map.save_map(entity_type, column, new_id, tsv, user)
|
330
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
331
|
+
when :ranks
|
332
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
333
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
|
334
|
+
tsv = TSV.open(file)
|
335
|
+
new = tsv.ranks_for(tsv.fields.first)
|
336
|
+
new_id = map_id << " [Ranks]"
|
337
|
+
column = 'Ranks'
|
338
|
+
Entity::Map.save_map(entity_type, column, new_id, new, user)
|
339
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
340
|
+
when :invert_ranks
|
341
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
342
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
|
343
|
+
tsv = TSV.open(file)
|
344
|
+
size = tsv.size
|
345
|
+
tsv.process "Rank" do |v|
|
346
|
+
if Array === v
|
347
|
+
[(size - v.first.to_i).to_s]
|
348
|
+
else
|
349
|
+
(size - v.to_i).to_s
|
350
|
+
end
|
351
|
+
end
|
352
|
+
new_id = map_id.dup
|
353
|
+
column = 'Ranks'
|
354
|
+
Entity::Map.save_map(entity_type, column, new_id, tsv, user)
|
355
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
356
|
+
when :raw, :literal
|
357
|
+
content_type "text/tab-separated-values"
|
358
|
+
user_file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
359
|
+
send_file user_file if File.exists? user_file
|
360
|
+
|
361
|
+
global_file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil)
|
362
|
+
send_file global_file if File.exists? global_file
|
363
|
+
|
364
|
+
raise "Map file not found: #{ map_id }"
|
365
|
+
when :json
|
366
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, user)
|
367
|
+
file = Entity::Map.map_file(entity_type.split(":").first, column, map_id, nil) unless File.exists? file
|
368
|
+
|
369
|
+
content_type "application/json"
|
370
|
+
halt 200, TSV.open(file).to_json
|
371
|
+
else
|
372
|
+
map = Entity::Map.load_map(entity_type.split(":").first, column, map_id, user)
|
373
|
+
entity_map_render(map_id, entity_type.split(":").first, column)
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
get '/entity_map_action/:entity_type/:column/:action/:map_id' do
|
378
|
+
action = consume_parameter :action
|
379
|
+
|
380
|
+
entity_type = Entity::REST.restore_element(consume_parameter :entity_type)
|
381
|
+
column = Entity::REST.restore_element(consume_parameter :column)
|
382
|
+
map_id = Entity::REST.restore_element(consume_parameter :map_id)
|
383
|
+
|
384
|
+
map = Entity::Map.load_map(entity_type.split(":").first, column, map_id, user)
|
385
|
+
|
386
|
+
entity_map_action_render(map, action, map_id, @clean_params)
|
387
|
+
end
|
388
|
+
|
389
|
+
|
390
|
+
get '/entity_map/rename/:entity_type/:column/:map_id' do
|
391
|
+
new_id = params[:new_name]
|
392
|
+
|
393
|
+
entity_type = Entity::REST.restore_element(params[:entity_type])
|
394
|
+
column = Entity::REST.restore_element(params[:column])
|
395
|
+
map_id = Entity::REST.restore_element(params[:map_id])
|
396
|
+
|
397
|
+
map = Entity::Map.load_map(entity_type.split(":").first, column, map_id, user)
|
398
|
+
|
399
|
+
Entity::Map.save_map(entity_type, column, new_id, map, user)
|
400
|
+
|
401
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
402
|
+
end
|
403
|
+
|
404
|
+
get '/entity_map/rank_products' do
|
405
|
+
map1 = consume_parameter :map1
|
406
|
+
map2 = consume_parameter :map2
|
407
|
+
|
408
|
+
map1 = Entity::REST.restore_element(map1)
|
409
|
+
map2 = Entity::REST.restore_element(map2)
|
410
|
+
|
411
|
+
entity_type = consume_parameter :entity_type
|
412
|
+
column = consume_parameter :column
|
413
|
+
entity_type = Entity::REST.restore_element(entity_type)
|
414
|
+
column = Entity::REST.restore_element(column)
|
415
|
+
|
416
|
+
file1 = Entity::Map.map_file(entity_type.split(":").first, column, map1, user)
|
417
|
+
file1 = Entity::Map.map_file(entity_type.split(":").first, column, map1, nil) unless File.exists? file1
|
418
|
+
tsv1 = TSV.open(file1)
|
419
|
+
|
420
|
+
file2 = Entity::Map.map_file(entity_type.split(":").first, column, map2, user)
|
421
|
+
file2 = Entity::Map.map_file(entity_type.split(":").first, column, map2, nil) unless File.exists? file2
|
422
|
+
tsv2 = TSV.open(file2)
|
423
|
+
|
424
|
+
tsv1.attach tsv2, :fields => tsv2.fields
|
425
|
+
|
426
|
+
new = TSV.setup(tsv1.rank_product(tsv1.fields), :key_field => tsv1.key_field, :fields => ["Log rank-product"], :type => :single, :cast => :to_f)
|
427
|
+
new.entity_options = tsv1.entity_options
|
428
|
+
new.namespace = tsv1.namespace
|
429
|
+
|
430
|
+
new_id = "Rank products of #{ map1 } ~ #{ map2 }"
|
431
|
+
if new_id.length > 200
|
432
|
+
new_id = "Rank products of #{ Misc.digest(map1) } ~ #{ Misc.digest(map2) }"
|
433
|
+
end
|
434
|
+
|
435
|
+
column = 'Log rank-product'
|
436
|
+
Entity::Map.save_map(entity_type, column, new_id, new, user)
|
437
|
+
redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
|
438
|
+
end
|
439
|
+
|
440
|
+
#{{{{{{{{{{{{{{
|
441
|
+
#{{{ FAVOURITES
|
442
|
+
#{{{{{{{{{{{{{{
|
443
|
+
|
444
|
+
|
182
445
|
#{{{ Favourite entities
|
183
446
|
|
184
447
|
post '/add_favourite_entity/:entity_type/:entity' do
|
@@ -232,6 +495,8 @@ module Sinatra
|
|
232
495
|
entity_type = consume_parameter :entity_type
|
233
496
|
list = consume_parameter :list
|
234
497
|
|
498
|
+
list = Entity::REST.restore_element(list)
|
499
|
+
|
235
500
|
entity_type = Entity::REST.restore_element(entity_type).split(":").first
|
236
501
|
|
237
502
|
add_favourite_entity_list(entity_type, list)
|
@@ -243,6 +508,7 @@ module Sinatra
|
|
243
508
|
entity_type = consume_parameter :entity_type
|
244
509
|
list = consume_parameter :list
|
245
510
|
|
511
|
+
list = Entity::REST.restore_element(list)
|
246
512
|
entity_type = Entity::REST.restore_element(entity_type).split(":").first
|
247
513
|
|
248
514
|
remove_favourite_entity_list(entity_type, list)
|
@@ -259,109 +525,48 @@ module Sinatra
|
|
259
525
|
favs.to_json
|
260
526
|
end
|
261
527
|
|
262
|
-
#{{{
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
528
|
+
#{{{ Favourite entity maps
|
529
|
+
|
530
|
+
post '/add_favourite_entity_map/:entity_type/:column/:map' do
|
531
|
+
entity_type = consume_parameter :entity_type
|
532
|
+
column = consume_parameter :column
|
533
|
+
map = consume_parameter :map
|
267
534
|
|
268
|
-
|
269
|
-
sorted_results = finder_find(term)
|
535
|
+
map = Entity::REST.restore_element(map)
|
270
536
|
|
271
|
-
|
272
|
-
|
273
|
-
content_type "application/json"
|
274
|
-
halt 200, sorted_results.to_json
|
275
|
-
else
|
276
|
-
i = sorted_results.first
|
277
|
-
raise "Term not recognized: #{ term }" if i.nil?
|
278
|
-
redirect to(Entity::REST.entity_url(i[:code], i[:format], i[:namespace]))
|
279
|
-
end
|
280
|
-
end
|
537
|
+
entity_type = Entity::REST.restore_element(entity_type).split(":").first
|
538
|
+
column = Entity::REST.restore_element(column)
|
281
539
|
|
282
|
-
|
283
|
-
term = consume_parameter :term
|
284
|
-
if term =~ /(.*) \[(.*)\]$/
|
285
|
-
term = $1
|
286
|
-
namespace, format = $2.split(":")
|
287
|
-
format, namespace = namespace, nil if format.nil?
|
540
|
+
add_favourite_entity_map(entity_type, column, map)
|
288
541
|
|
289
|
-
|
290
|
-
else
|
291
|
-
sorted_results = finder_find(term)
|
292
|
-
i = sorted_results.first
|
293
|
-
halt 404, "Term not recognized: #{ term }" if i.nil?
|
294
|
-
redirect to(Entity::REST.entity_url(i[:code], i[:format], :organism => i[:namespace]))
|
295
|
-
end
|
542
|
+
halt 200
|
296
543
|
end
|
297
544
|
|
298
|
-
|
299
|
-
|
300
|
-
get '/entity_list/intersect/:entity_type/:list_id' do
|
545
|
+
post '/remove_favourite_entity_map/:entity_type/:column/:map' do
|
301
546
|
entity_type = consume_parameter :entity_type
|
302
|
-
|
303
|
-
|
547
|
+
column = consume_parameter :column
|
548
|
+
map = consume_parameter :map
|
304
549
|
|
305
|
-
|
306
|
-
type = entity_type.split(":").first
|
307
|
-
|
308
|
-
list_id = Entity::REST.restore_element(list_id)
|
309
|
-
list = Entity::List.load_list(type, list_id, user)
|
310
|
-
|
311
|
-
other_list_id = Entity::REST.restore_element(other_list_id)
|
312
|
-
other_list = Entity::List.load_list(type, other_list_id, user)
|
550
|
+
map = Entity::REST.restore_element(map)
|
313
551
|
|
314
|
-
|
315
|
-
|
552
|
+
entity_type = Entity::REST.restore_element(entity_type).split(":").first
|
553
|
+
column = Entity::REST.restore_element(column)
|
316
554
|
|
317
|
-
|
555
|
+
remove_favourite_entity_map(entity_type, column, map)
|
318
556
|
|
319
|
-
|
557
|
+
halt 200
|
320
558
|
end
|
321
|
-
|
322
|
-
get '/entity_list/remove/:entity_type/:list_id' do
|
323
|
-
entity_type = consume_parameter :entity_type
|
324
|
-
list_id = consume_parameter :list_id
|
325
|
-
other_list_id = consume_parameter :other_list_id
|
326
|
-
|
327
|
-
entity_type = Entity::REST.restore_element(entity_type)
|
328
|
-
type = entity_type.split(":").first
|
329
559
|
|
330
|
-
list_id = Entity::REST.restore_element(list_id)
|
331
|
-
list = Entity::List.load_list(type, list_id, user)
|
332
560
|
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
new_list = list.remove(other_list)
|
337
|
-
new_list_id = [list_id, other_list_id] * " - "
|
561
|
+
get '/favourite_entity_maps' do
|
562
|
+
content_type "application/json"
|
338
563
|
|
339
|
-
|
564
|
+
favs = favourite_entity_maps
|
340
565
|
|
341
|
-
|
566
|
+
favs.to_json
|
342
567
|
end
|
343
|
-
|
344
|
-
get '/entity_list/add/:entity_type/:list_id' do
|
345
|
-
entity_type = consume_parameter :entity_type
|
346
|
-
list_id = consume_parameter :list_id
|
347
|
-
other_list_id = consume_parameter :other_list_id
|
348
568
|
|
349
|
-
|
350
|
-
type = entity_type.split(":").first
|
351
|
-
|
352
|
-
list_id = Entity::REST.restore_element(list_id)
|
353
|
-
list = Entity::List.load_list(type, list_id, user)
|
354
|
-
|
355
|
-
other_list_id = Entity::REST.restore_element(other_list_id)
|
356
|
-
other_list = Entity::List.load_list(type, other_list_id, user)
|
357
|
-
|
358
|
-
new_list = list.concat(other_list)
|
359
|
-
new_list_id = [list_id, other_list_id] * " PLUS "
|
360
|
-
|
361
|
-
Entity::List.save_list(type, new_list_id, new_list, user)
|
362
|
-
|
363
|
-
redirect to(Entity::REST.entity_list_url(new_list_id, type))
|
364
|
-
end
|
569
|
+
|
365
570
|
end
|
366
571
|
end
|
367
572
|
end
|