rbbt-rest 1.6.28 → 1.7.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/rest/entity.rb +71 -1
  3. data/lib/rbbt/rest/entity/render.rb +3 -2
  4. data/lib/rbbt/rest/knowledge_base.rb +81 -28
  5. data/lib/rbbt/rest/main.rb +3 -0
  6. data/lib/rbbt/rest/workflow.rb +1 -1
  7. data/lib/rbbt/rest/workflow/jobs.rb +5 -4
  8. data/share/views/compass/app.sass +21 -11
  9. data/share/views/layout/footer.haml +0 -1
  10. data/share/views/layout/header.haml +9 -6
  11. data/share/views/layout/top_menu.haml +1 -0
  12. data/share/views/partials/table.haml +7 -1
  13. data/share/views/public/js/_ajax_replace.js +2 -0
  14. data/share/views/public/js/defer.js +1 -1
  15. data/share/views/public/js/helpers.js +89 -18
  16. data/share/views/public/js/rbbt.aesthetics.js +145 -34
  17. data/share/views/public/js/rbbt.basic.js +20 -0
  18. data/share/views/public/js/rbbt.entity.js +12 -2
  19. data/share/views/public/js/rbbt.entity_list.js +51 -5
  20. data/share/views/public/js/rbbt.exception.js +9 -1
  21. data/share/views/public/js/rbbt.job.js +2 -2
  22. data/share/views/public/js/rbbt.js +5 -1
  23. data/share/views/public/js/rbbt.knowledge_base.js +40 -0
  24. data/share/views/public/js/rbbt.modal.js +82 -75
  25. data/share/views/public/js/rbbt.plots.js +276 -0
  26. data/share/views/public/js/rbbt/list.js +2 -2
  27. data/share/views/public/plugins/cola/js/cola.v3.min.js +3 -0
  28. data/share/views/public/plugins/d3js/js/d3.js +9503 -0
  29. data/share/views/public/plugins/d3js/js/d3js.min.js +5 -0
  30. data/share/views/public/plugins/mithril-node-render/js/index.js +115 -0
  31. data/share/views/public/plugins/mithril/js/mithril.js +212 -77
  32. data/share/views/public/plugins/mithril/js/mithril.min.js +2 -2
  33. data/share/views/public/plugins/mithril/js/mithril.min.js.map +1 -1
  34. data/share/views/public/plugins/nvd3/css/nv.d3.css +641 -0
  35. data/share/views/public/plugins/nvd3/js/nv.d3.js +13298 -0
  36. data/share/views/public/plugins/svg-pan-zoom/js/svg-pan-zoom.js +1861 -0
  37. data/share/views/tools/nvd3.haml +16 -0
  38. data/share/views/tools/nvd3/chart.haml +55 -0
  39. data/share/views/tools/nvd3/histogram.haml +19 -0
  40. data/share/views/tools/nvd3/pie.haml +24 -0
  41. data/share/views/tools/nvd3/scatter.haml +33 -0
  42. data/share/views/wait.haml +2 -2
  43. metadata +15 -3
  44. data/share/views/public/plugins/d3js/d3js.min.js +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7cc64722779414103b76baf41c3b2d7e8f0508b2
4
- data.tar.gz: 3b787d34032bc0744a2425c179b4603fe30470c6
3
+ metadata.gz: c26433848653c8f1bd15c43ca516eed2e6d9eaa9
4
+ data.tar.gz: a92d6b2af8de46ba913ad5cbf8d04da099ff2df1
5
5
  SHA512:
6
- metadata.gz: ce9ada7b7a8ac896a7948bc983586bb19a2dc1edb36876190f99d0e218862e7c56d50df1c626c6e34580295474a82c1a81ce79eda8d1c160a5994cbd96c0c8fd
7
- data.tar.gz: 412f73b81453ec5c8725b9e784b23eada13ef3f74941a31f0d7146bfddcd1bc390d446291c12dc619eb2059300f2e297362128aea8a5013061c1caa647e80a36
6
+ metadata.gz: df25f492e6e7e206899526ffe96b5afcdeb9b96b1dcc119ca491be465c5bb3d512c7beed852171ee8bc4035d2c083d80da8f5fa4d9710d6cb18ea5026ab65c0a
7
+ data.tar.gz: dcc46801b37da11055bc42e55212884b169f590e90848f7e203e43b5efc6f848554fd6dec6b68008b9fd28633e605930d811180317096240d35f95b1f0fb9b3d
@@ -75,7 +75,7 @@ module Sinatra
75
75
 
76
76
  @entity = entity
77
77
 
78
- entity_render(entity)
78
+ entity_render(entity, @clean_params)
79
79
  end
80
80
 
81
81
  get '/entity_action/:entity_type/:action/:entity' do
@@ -429,6 +429,76 @@ module Sinatra
429
429
  redirect to(Entity::REST.entity_map_url(new_id, entity_type, column))
430
430
  end
431
431
 
432
+ #{{{{{{{{{{{{{{
433
+ #{{{ PROPERTIES
434
+ #{{{{{{{{{{{{{{
435
+
436
+ get '/entity_property/:property/:entity_type/:entity' do
437
+ entity_type = consume_parameter :entity_type
438
+ entity = consume_parameter :entity
439
+ property = consume_parameter :property
440
+ args = consume_parameter :args
441
+
442
+ if args.nil?
443
+ args = []
444
+ else
445
+ args = begin
446
+ JSON.parse(args)
447
+ rescue
448
+ args
449
+ end
450
+ end
451
+
452
+ case args
453
+ when Hash
454
+ args = [args]
455
+ when String
456
+ args = args.split(/[,\|]/)
457
+ end
458
+
459
+ entity_type = Entity::REST.restore_element(entity_type)
460
+
461
+ entity = setup_entity(entity_type, entity, @clean_params)
462
+
463
+ content_type "application/json"
464
+ halt 200, entity.send(property,*args).to_json
465
+ end
466
+
467
+ get '/entity_list_property/:property/:entity_type/:list_id' do
468
+ entity_type = consume_parameter :entity_type
469
+ list_id = consume_parameter :list_id
470
+ property = consume_parameter :property
471
+
472
+ args = consume_parameter :args
473
+
474
+ if args.nil?
475
+ args = []
476
+ else
477
+ args = begin
478
+ JSON.parse(args)
479
+ rescue
480
+ args
481
+ end
482
+ end
483
+
484
+ case args
485
+ when Hash
486
+ args = [args]
487
+ when String
488
+ args = args.split(/[,\|]/)
489
+ end
490
+
491
+
492
+ entity_type = Entity::REST.restore_element(entity_type)
493
+ list_id = Entity::REST.restore_element(list_id)
494
+
495
+ list = Entity::List.load_list(entity_type.split(":").first, list_id, user)
496
+
497
+ content_type "application/json"
498
+ halt 200, list.send(property, *args).to_json
499
+ end
500
+
501
+
432
502
  #{{{{{{{{{{{{{{
433
503
  #{{{ FAVOURITES
434
504
  #{{{{{{{{{{{{{{
@@ -33,10 +33,11 @@ module EntityRESTHelpers
33
33
  entity
34
34
  end
35
35
 
36
- def entity_render(entity)
36
+ def entity_render(entity, params = {})
37
37
  template_file = locate_entity_template(entity)
38
38
 
39
- locals = {:entity => entity}
39
+ params = {} if params.nil?
40
+ locals = {:entity => entity}.merge(params)
40
41
 
41
42
  layout_file = layout ? locate_template("layout") : nil
42
43
 
@@ -87,14 +87,44 @@ module Sinatra
87
87
  end
88
88
  end
89
89
 
90
- get '/knowledge_base/:name/:database/subset' do
90
+ #get '/knowledge_base/:name/:database/subset' do
91
+ # name = consume_parameter :name
92
+ # database = consume_parameter :database
93
+ # source = consume_parameter :source
94
+ # target = consume_parameter :target
95
+
96
+ # source = source == "all" ? :all : source.split(@array_separator) if source
97
+ # target = target == "all" ? :all : target.split(@array_separator) if target
98
+ # entities = { :source => source, :target => target }
99
+
100
+ # kb = get_knowledge_base name
101
+ # subset = kb.subset(database, entities)
102
+ # case @format
103
+ # when :tsv
104
+ # content_type "text/tab-separated-values"
105
+ # halt 200, subset.tsv.to_s
106
+ # when :html
107
+ # template_render('knowledge_base_partials/subset', {:subset => subset}, "Subset: #{ [name, database] }")
108
+ # when :json
109
+ # content_type :json
110
+ # halt 200, subset.source.to_json
111
+ # else
112
+ # content_type :text
113
+ # halt 200, subset.source * "\n"
114
+ # end
115
+ #end
116
+
117
+ route :get, :post, '/knowledge_base/:name/:database/subset' do
91
118
  name = consume_parameter :name
92
119
  database = consume_parameter :database
93
120
  source = consume_parameter :source
94
121
  target = consume_parameter :target
95
122
 
123
+ target = source if target.nil?
124
+
96
125
  source = source == "all" ? :all : source.split(@array_separator) if source
97
126
  target = target == "all" ? :all : target.split(@array_separator) if target
127
+
98
128
  entities = { :source => source, :target => target }
99
129
 
100
130
  kb = get_knowledge_base name
@@ -103,6 +133,9 @@ module Sinatra
103
133
  when :tsv
104
134
  content_type "text/tab-separated-values"
105
135
  halt 200, subset.tsv.to_s
136
+ when :tsv_json
137
+ content_type :json
138
+ halt 200, subset.tsv.to_json
106
139
  when :html
107
140
  template_render('knowledge_base_partials/subset', {:subset => subset}, "Subset: #{ [name, database] }")
108
141
  when :json
@@ -129,7 +162,14 @@ module Sinatra
129
162
  entities = collection[type]
130
163
  entities.each do |entity|
131
164
  _matches = kb.children(database, entity)
132
- acc.merge!({ _matches.target_type => _matches}) if _matches and _matches.any?
165
+ type = _matches.target_type
166
+ next unless _matches and _matches.any?
167
+ if (acc[type])
168
+ acc[type].concat(_matches)
169
+ else
170
+ acc[type] = _matches
171
+ end
172
+ acc
133
173
  end
134
174
  acc
135
175
  }
@@ -138,6 +178,11 @@ module Sinatra
138
178
  content_type "text/tab-separated-values"
139
179
  matches = matches.sort_by{|k,list| list.length }.last.last
140
180
  halt 200, matches.tsv.to_s
181
+ when :tsv_json
182
+ content_type :json
183
+ halt 200, {}.to_json if matches.empty?
184
+ matches = matches.sort_by{|k,list| list.length }.last.last
185
+ halt 200, matches.tsv.to_json
141
186
  when :html
142
187
  template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Children: #{ [name, database] }")
143
188
  when :json
@@ -166,7 +211,14 @@ module Sinatra
166
211
  entities = collection[type]
167
212
  entities.each do |entity|
168
213
  _matches = kb.parents(database, entity)
169
- acc.merge!({ _matches.target_type => _matches}) if _matches and _matches.any?
214
+ type = _matches.target_type
215
+ next unless _matches and _matches.any?
216
+ if acc[type]
217
+ acc[type].concat(_matches)
218
+ else
219
+ acc[type] = _matches
220
+ end
221
+ acc
170
222
  end
171
223
  acc
172
224
  }
@@ -175,6 +227,11 @@ module Sinatra
175
227
  content_type "text/tab-separated-values"
176
228
  matches = matches.sort_by{|k,list| list.length }.last.last
177
229
  halt 200, matches.tsv.to_s
230
+ when :tsv_json
231
+ content_type :json
232
+ halt 200, {}.to_json if matches.empty?
233
+ matches = matches.sort_by{|k,list| list.length }.last.last
234
+ halt 200, matches.tsv.to_json
178
235
  when :html
179
236
  template_render('knowledge_base_partials/matches', {:matches => matches}, "Collection Parents: #{ [name, database] }")
180
237
  when :json
@@ -236,34 +293,32 @@ module Sinatra
236
293
  end
237
294
  end
238
295
 
239
- get '/knowledge_base/:name/:database/subset' do
296
+ #{{{ Info
297
+
298
+ get '/knowledge_base/:name/:database/info' do
240
299
  name = consume_parameter :name
241
300
  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
301
 
249
302
  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
265
303
 
266
- #{{{ Info
304
+ source = kb.source(database)
305
+ target = kb.target(database)
306
+ source_type = kb.source_type(database)
307
+ target_type = kb.target_type(database)
308
+ source_entity_options = kb.entity_options_for source_type
309
+ target_entity_options = kb.entity_options_for target_type
310
+
311
+ info = {
312
+ :source => source,
313
+ :target => target,
314
+ :source_type => source_type,
315
+ :target_type => target_type,
316
+ :source_entity_options => source_entity_options,
317
+ :target_entity_options => target_entity_options,
318
+ }
319
+
320
+ halt 200, info.to_json
321
+ end
267
322
 
268
323
  get '/knowledge_base/info/:name/:database/:pair' do
269
324
  name = consume_parameter :name
@@ -459,7 +514,6 @@ module Sinatra
459
514
  found = kb.identify database, entity
460
515
  raise ParameterException, "Entity #{entity} was not found" unless found
461
516
 
462
- iii kb.children(database, found)
463
517
  list = kb.children(database, found).target_entity
464
518
 
465
519
  content_type "application/json"
@@ -475,7 +529,6 @@ module Sinatra
475
529
  found = kb.identify database, entity
476
530
  raise ParameterException, "Entity #{entity} was not found" unless found
477
531
 
478
- iii kb.parents(database, found)
479
532
  list = kb.parents(database, found).target_entity
480
533
 
481
534
  content_type "application/json"
@@ -6,6 +6,7 @@ require 'ruby-prof'
6
6
 
7
7
  require 'sinatra/base'
8
8
  require 'sinatra/cross_origin'
9
+ require "sinatra/multi_route"
9
10
  require 'json'
10
11
 
11
12
  module Sinatra
@@ -36,6 +37,8 @@ module Sinatra
36
37
 
37
38
  def self.registered(base)
38
39
  base.module_eval do
40
+ register Sinatra::MultiRoute
41
+
39
42
  helpers RbbtRESTHelpers
40
43
  register Sinatra::RbbtAuth
41
44
 
@@ -143,7 +143,7 @@ module Sinatra
143
143
  error = job.error? || job.aborted?
144
144
 
145
145
  if done
146
- show_result job, workflow, task
146
+ show_result job, workflow, task, params
147
147
  else
148
148
  if started
149
149
  exec_type = execution_type(workflow, task)
@@ -58,10 +58,11 @@ module WorkflowRESTHelpers
58
58
  task_inputs
59
59
  end
60
60
 
61
- def show_result_html(result, workflow, task, jobname = nil, job = nil)
61
+ def show_result_html(result, workflow, task, jobname = nil, job = nil, params = nil)
62
+ params ||= {}
62
63
  result_type = workflow.task_info(task)[:result_type]
63
64
  result_description = workflow.task_info(task)[:result_description]
64
- workflow_render('job_result', workflow, task, :result => result, :type => result_type, :description => result_description, :jobname => jobname, :job => job)
65
+ workflow_render('job_result', workflow, task, {:result => result, :type => result_type, :description => result_description, :jobname => jobname, :job => job}.merge(params))
65
66
  end
66
67
 
67
68
  def show_exec_result(result, workflow, task)
@@ -92,12 +93,12 @@ module WorkflowRESTHelpers
92
93
  end
93
94
  end
94
95
 
95
- def show_result(job, workflow, task)
96
+ def show_result(job, workflow, task, params = nil)
96
97
  return show_result_html nil, workflow, task, job.name, job if @fragment
97
98
 
98
99
  case format.to_sym
99
100
  when :html
100
- show_result_html job.load, workflow, task, job.name, job
101
+ show_result_html job.load, workflow, task, job.name, job, params
101
102
  when :table
102
103
  halt 200, tsv2html(job.path, :url => "/" << [workflow.to_s, task, job.name] * "/")
103
104
  when :entities
@@ -18,6 +18,7 @@ $subtle-font: rgba(0,0,0,0.30)
18
18
 
19
19
  body
20
20
  background: none repeat scroll 0% 0% #F7F7F7
21
+ font-family: Helvetica
21
22
 
22
23
  #content
23
24
  padding: 0px 48px 0 48px
@@ -99,7 +100,11 @@ body
99
100
  .action_content
100
101
  clear: both
101
102
 
102
-
103
+ .action_controller > .action_menu
104
+ width: calc(100% - 48px)
105
+ & > .button
106
+ max-width: 25%
107
+
103
108
  .entity_card, .entity_list_card, .action_card
104
109
  > .content > .ui.basic.segment, > .action_content > .ui.basic.segment
105
110
  padding: 0px
@@ -146,14 +151,17 @@ body
146
151
  width: 10em
147
152
  display: inline-block
148
153
 
149
- .figure.float
150
- float: left
151
- margin-right: 32px
152
- background: white
153
- border: 1px solid rgba(0,0,0,0.12)
154
- padding: 4px
154
+ .figure
155
+ margin-bottom: 1em
156
+ margin-top: 1em
155
157
  .title
156
158
  color: $subtle-font
159
+ &.float
160
+ float: left
161
+ margin-right: 32px
162
+ background: white
163
+ border: 1px solid rgba(0,0,0,0.12)
164
+ padding: 4px
157
165
 
158
166
  .tool_menu
159
167
  margin-bottom: 0px
@@ -227,10 +235,6 @@ a.entity.highlight
227
235
  @extend .bulleted
228
236
  font-weight: bold
229
237
 
230
- .figure
231
- margin-bottom: 1em
232
- margin-top: 1em
233
-
234
238
 
235
239
  a.entity[data-aes-color]:not([data-aes-color=none])
236
240
  @extend .bulleted
@@ -412,3 +416,9 @@ body
412
416
 
413
417
  .list_comparison > li > a
414
418
  margin-left: 1em
419
+
420
+ td
421
+ &.true
422
+ color: green
423
+ &.false
424
+ color: red
@@ -6,7 +6,6 @@
6
6
  .ui.header
7
7
  CNIO. Centro Nacional de Investigaciones Oncologicas (Spanish National Cancer Research Center)
8
8
  .description
9
- %br/
10
9
  %span.group Structural Computational Biology Group
11
10
  %br/
12
11
  %span.address C/ Melchor Fernandez Almagro, 3, E-28029 Madrid
@@ -10,6 +10,7 @@
10
10
 
11
11
 
12
12
  - record_css '/plugins/semantic-ui/dist/semantic.min.css'
13
+ - record_css '/plugins/nvd3/css/nv.d3.css'
13
14
  -# record_css '/plugins/jquery-ui/css/custom-theme/jquery-ui-1.8.14.custom.css'
14
15
  - record_css '/stylesheets/app'
15
16
  = serve_css
@@ -21,14 +22,11 @@
21
22
  var main_url = window.location.toString();
22
23
  var production = #{production? ? "true" : "false"};
23
24
 
24
- -#= link_js "http://cdnjs.cloudflare.com/ajax/libs/mithril/0.1.28/mithril.min.js"
25
-
26
25
  - record_js '/js/defer'
27
26
  - record_js "/plugins/mithril/js/mithril.js"
28
- - record_js "/plugins/requirejs/js/require.js"
27
+ -# record_js "/plugins/requirejs/js/require.js"
29
28
  = serve_js
30
-
31
- :javascript
29
+ -#:javascript
32
30
  requirejs.config({baseUrl: '/js-find'})
33
31
 
34
32
 
@@ -41,6 +39,11 @@
41
39
  - record_js '/plugins/semantic-ui/dist/semantic.min.js'
42
40
  - record_js '/plugins/FileSaver/js/FileSaver.js'
43
41
  - record_js '/plugins/color-js/color.js'
42
+ - record_js '/plugins/d3js/js/d3js.min.js'
43
+ - record_js '/plugins/nvd3/js/nv.d3.js'
44
+ - record_js '/plugins/svg-pan-zoom/js/svg-pan-zoom.js'
45
+ - record_js '/plugins/cola/js/cola.v3.min.js'
46
+ - record_js '/plugins/mithril-node-render/js/index.js'
44
47
 
45
48
  - %w(helpers _md5 _ajax_replace _ellipsis).each do |file|
46
49
  - record_js "/js-find/#{ file }"
@@ -49,7 +52,7 @@
49
52
  - %w(dom_update fragment actions table list map reveal).each do |file|
50
53
  - record_js "/js-find/rbbt/#{ file }"
51
54
 
52
- - %w(rbbt rbbt.basic rbbt.exception rbbt.job rbbt.page rbbt.entity rbbt.entity_list rbbt.entity_map rbbt.views rbbt.favourites rbbt.knowledge_base rbbt.aesthetics rbbt.modal).each do |file|
55
+ - %w(rbbt rbbt.basic rbbt.exception rbbt.job rbbt.page rbbt.entity rbbt.entity_list rbbt.entity_map rbbt.views rbbt.favourites rbbt.knowledge_base rbbt.aesthetics rbbt.plots rbbt.modal).each do |file|
53
56
  - record_js "/js-find/#{ file }"
54
57
 
55
58
  - record_js "/js-find/app"