rbbt-rest 1.4.10 → 1.4.11
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 +4 -4
- data/lib/rbbt/rest/client/step.rb +1 -1
- data/lib/rbbt/rest/common/cache.rb +2 -1
- data/lib/rbbt/rest/common/forms.rb +6 -6
- data/lib/rbbt/rest/common/locate.rb +25 -2
- data/lib/rbbt/rest/common/misc.rb +23 -7
- data/lib/rbbt/rest/common/render.rb +1 -3
- data/lib/rbbt/rest/common/table.rb +52 -3
- data/lib/rbbt/rest/main.rb +21 -5
- data/lib/rbbt/rest/web_tool.rb +1 -0
- data/lib/rbbt/rest/workflow.rb +20 -1
- data/lib/rbbt/rest/workflow/jobs.rb +3 -1
- data/lib/rbbt/rest/workflow/render.rb +17 -3
- data/share/views/compass/_app.sass +17 -0
- data/share/views/compass/app.sass +1 -17
- data/share/views/compass/finder.sass +7 -7
- data/share/views/compass/grid_system.sass +1 -9
- data/share/views/compass/layout.sass +2 -2
- data/share/views/compass/rbbt/table.sass +1 -0
- data/share/views/compass/screen_sizes.sass +16 -0
- data/share/views/compass/top_menu.sass +1 -0
- data/share/views/entity_partials/action_card.haml +2 -2
- data/share/views/entity_partials/entity_card.haml +10 -4
- data/share/views/entity_partials/entity_list_card.haml +7 -2
- data/share/views/entity_partials/entity_map_card.haml +1 -1
- data/share/views/error.haml +16 -12
- data/share/views/form.haml +2 -2
- data/share/views/help.haml +3 -3
- data/share/views/help/UI.haml +156 -163
- data/share/views/help/entity.haml +3 -3
- data/share/views/help/workflow.haml +1 -1
- data/share/views/job_result/job_control.haml +3 -2
- data/share/views/job_result/tsv.haml +17 -12
- data/share/views/layout.haml +18 -43
- data/share/views/layout/coda.haml +40 -0
- data/share/views/layout/footer.haml +0 -0
- data/share/views/layout/top_menu/finder.haml +1 -1
- data/share/views/partials/form.haml +1 -1
- data/share/views/partials/table.haml +1 -1
- data/share/views/public/js/app.js +4 -4
- data/share/views/public/js/defer.js +26 -0
- data/share/views/public/js/helpers.js +8 -1
- data/share/views/public/js/rbbt/actions.js +2 -2
- data/share/views/public/js/rbbt/hide.js +12 -8
- data/share/views/public/js/rbbt/menu.js +2 -1
- data/share/views/public/js/rbbt/modal.js +5 -2
- data/share/views/public/js/rbbt/reveal.js +7 -5
- data/share/views/wait.haml +1 -1
- metadata +7 -3
- data/share/views/public/js/deffer.js +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79c5f4dab3cb27a5c2a52674a04fb02bf8257417
|
4
|
+
data.tar.gz: eb2d80aa0d553528c8556d56a47df3fbffabd185
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25e607bce141f788bb50288933599d26f7563c6812df719e9d161624c1c5fb1cb1a7417010af2209a27b83e536017210749816480bb769c87a99cc595279f742
|
7
|
+
data.tar.gz: 6105e96305d4e1b71068ef30874576e41f2f04d73f5797bd826dec2940600cb84845e98d7d1a7132533d7d597b1e681d87eeb5f544057ed94ea20184a54e2d63
|
@@ -28,7 +28,7 @@ module RbbtRESTHelpers
|
|
28
28
|
orig_name = name
|
29
29
|
name += "_" << Misc.hash2md5(params) if params.any?
|
30
30
|
|
31
|
-
path = settings.cache_dir[name].find
|
31
|
+
path = params[:cache_file] || settings.cache_dir[name].find
|
32
32
|
task = Task.setup(:name => orig_name, :result_type => :string, &block)
|
33
33
|
|
34
34
|
step = Step.new(path, task, nil, nil, self)
|
@@ -128,6 +128,7 @@ module RbbtRESTHelpers
|
|
128
128
|
step.run
|
129
129
|
else
|
130
130
|
step.fork
|
131
|
+
step.soft_grace
|
131
132
|
end
|
132
133
|
end
|
133
134
|
|
@@ -16,7 +16,7 @@ module RbbtRESTHelpers
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def file_or_text_area(id, name, value, tsv = false)
|
19
|
-
text_area_string = tsv ? "or use the text area
|
19
|
+
text_area_string = tsv ? "or use the text area below (you may use ',' intead of tabs)" : "or use the text area below"
|
20
20
|
|
21
21
|
html_tag("input", nil, :type => "file", :id => (id.nil? ? nil : id + "__" + "param_file"), :name => name.to_s + "__" + "param_file") +
|
22
22
|
html_tag("span", text_area_string, :class => "file_or_text_area") +
|
@@ -75,8 +75,8 @@ module RbbtRESTHelpers
|
|
75
75
|
end
|
76
76
|
|
77
77
|
input_label(id, name, description, default, extra) +
|
78
|
-
html_tag("input", nil, :type => :
|
79
|
-
html_tag("input", nil, :type => :
|
78
|
+
html_tag("input", nil, :type => :checkbox, :checked => check_true, :name => name, :value => "true", :id => id) +
|
79
|
+
html_tag("input", nil, :type => :hidden, :name => name.to_s + "_checkbox_false", :value => "false")
|
80
80
|
|
81
81
|
when :string, :float, :integer, :hidden
|
82
82
|
value = current.nil? ? default : current
|
@@ -94,7 +94,7 @@ module RbbtRESTHelpers
|
|
94
94
|
when :string
|
95
95
|
nil
|
96
96
|
when :float
|
97
|
-
"
|
97
|
+
"0.1"
|
98
98
|
when :integer
|
99
99
|
1
|
100
100
|
end
|
@@ -107,10 +107,10 @@ module RbbtRESTHelpers
|
|
107
107
|
value = value * "\n" if Array === value
|
108
108
|
|
109
109
|
if no_file
|
110
|
-
input_label(id, name, description,
|
110
|
+
input_label(id, name, description, nil, extra) +
|
111
111
|
html_tag("textarea", value || "" , :name => name, :id => id )
|
112
112
|
else
|
113
|
-
input_label(id, name, description,
|
113
|
+
input_label(id, name, description, nil, extra) +
|
114
114
|
file_or_text_area(id, name, value, type == :tsv)
|
115
115
|
end
|
116
116
|
|
@@ -10,7 +10,7 @@ module RbbtRESTHelpers
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def template_resources
|
13
|
-
[Rbbt.www.views
|
13
|
+
[Rbbt.www.views] + RbbtRESTHelpers.template_resources
|
14
14
|
end
|
15
15
|
|
16
16
|
def locate_template_from_resource(resource, template)
|
@@ -26,6 +26,29 @@ module RbbtRESTHelpers
|
|
26
26
|
raise TemplateMissing, "Template #{ template } not found"
|
27
27
|
end
|
28
28
|
|
29
|
+
#{{{ TEMPLATE
|
30
|
+
|
31
|
+
def self.file_resources
|
32
|
+
@file_resources ||= template_resources
|
33
|
+
end
|
34
|
+
|
35
|
+
def file_resources
|
36
|
+
[Rbbt.www.views] + RbbtRESTHelpers.file_resources
|
37
|
+
end
|
38
|
+
|
39
|
+
def locate_file_from_resource(resource, file)
|
40
|
+
resource[file]
|
41
|
+
end
|
42
|
+
|
43
|
+
def locate_file(file)
|
44
|
+
file_resources.each do |resource|
|
45
|
+
path = locate_file_from_resource(resource, file)
|
46
|
+
return path if path.exists?
|
47
|
+
end
|
48
|
+
|
49
|
+
raise TemplateMissing, "File #{ file } not found"
|
50
|
+
end
|
51
|
+
|
29
52
|
#{{{ SASS
|
30
53
|
|
31
54
|
def self.add_sass_load_path(path)
|
@@ -37,7 +60,7 @@ module RbbtRESTHelpers
|
|
37
60
|
end
|
38
61
|
|
39
62
|
def sass_resources
|
40
|
-
RbbtRESTHelpers.sass_resources
|
63
|
+
[Rbbt.www.views.compass] + RbbtRESTHelpers.sass_resources
|
41
64
|
end
|
42
65
|
|
43
66
|
def locate_sass_from_resource(resource, template)
|
@@ -221,16 +221,32 @@ module RbbtRESTHelpers
|
|
221
221
|
end
|
222
222
|
|
223
223
|
require 'haml'
|
224
|
-
module Haml::Filters::
|
224
|
+
module Haml::Filters::DeferJS
|
225
225
|
include Haml::Filters::Base
|
226
226
|
|
227
227
|
def render(text)
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
228
|
+
defer_text =<<-EOF
|
229
|
+
%script(defer)
|
230
|
+
:plain
|
231
|
+
defer(function(){
|
232
|
+
#{text.gsub(/^/," ")}
|
233
|
+
})
|
233
234
|
EOF
|
234
|
-
Haml::Engine.new(
|
235
|
+
Haml::Engine.new(defer_text).to_html
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
require 'haml'
|
240
|
+
module Haml::Filters::Documentation
|
241
|
+
include Haml::Filters::Base
|
242
|
+
|
243
|
+
def render(text)
|
244
|
+
doc_text =<<-EOF
|
245
|
+
%section.documentation#{ text.gsub(/\s/,'').length < 80 * 10 ? '.short' : ''}
|
246
|
+
:markdown
|
247
|
+
#{text.gsub(/^/," ")}
|
248
|
+
EOF
|
249
|
+
|
250
|
+
Haml::Engine.new(doc_text).to_html
|
235
251
|
end
|
236
252
|
end
|
@@ -34,6 +34,7 @@ module RbbtRESTHelpers
|
|
34
34
|
|
35
35
|
def wait_on(job, layout = nil)
|
36
36
|
3.times do
|
37
|
+
raise RbbtRESTHelpers::Retry if job.done? or job.error?
|
37
38
|
sleep 1
|
38
39
|
end
|
39
40
|
|
@@ -54,18 +55,15 @@ module RbbtRESTHelpers
|
|
54
55
|
layout_file = layout_file.find if layout_file.respond_to? :find
|
55
56
|
template_file = template_file.find if layout_file.respond_to? :find
|
56
57
|
if layout_file
|
57
|
-
#Haml::Engine.new(Open.read(layout_file), :filename => layout_file, :ugly => production?).render(self, locals) do
|
58
58
|
Tilt::HamlTemplate.new(layout_file, :filename => layout_file, :ugly => production?).render(self, locals) do
|
59
59
|
cache(cache, locals.merge(:_template_file => template_file, :user => user).merge(cache_options)) do
|
60
60
|
Log.debug{ "Rendering #{template_file} with layout" }
|
61
|
-
#Haml::Engine.new(Open.read(template_file), :filename => template_file, :ugly => production?).render(self, locals)
|
62
61
|
Tilt::HamlTemplate.new(template_file, :filename => template_file, :ugly => production?).render(self, locals)
|
63
62
|
end
|
64
63
|
end
|
65
64
|
else
|
66
65
|
cache(cache, locals.merge(:_template_file => template_file, :user => user).merge(cache_options)) do
|
67
66
|
Log.debug{ "Rendering #{template_file} without layout" }
|
68
|
-
#Haml::Engine.new(Open.read(template_file), :filename => template_file, :ugly => production?).render(self, locals)
|
69
67
|
Tilt::HamlTemplate.new(template_file, :filename => template_file, :ugly => production?).render(self, locals)
|
70
68
|
end
|
71
69
|
end
|
@@ -29,6 +29,50 @@ module Link
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
module Change
|
33
|
+
extend Entity
|
34
|
+
|
35
|
+
self.format =(<<-EOF
|
36
|
+
Change
|
37
|
+
EOF
|
38
|
+
).split("\n")
|
39
|
+
|
40
|
+
def <=>(other)
|
41
|
+
self.scan(/\d+/).first.to_f <=> other.scan(/\d+/).first.to_f
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.tsv_sort(v)
|
45
|
+
value = v.last
|
46
|
+
if Array === value
|
47
|
+
value.first.scan(/\d+/).first.to_f
|
48
|
+
else
|
49
|
+
value.scan(/\d+/).first.to_f
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
module Location
|
55
|
+
extend Entity
|
56
|
+
|
57
|
+
self.format =(<<-EOF
|
58
|
+
Location
|
59
|
+
EOF
|
60
|
+
).split("\n")
|
61
|
+
|
62
|
+
def <=>(other)
|
63
|
+
self.to_s.split(":").first.to_f <=> other.to_s.split(":").first.to_f
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.tsv_sort(v)
|
67
|
+
value = v.last
|
68
|
+
if Array === value
|
69
|
+
value.first.to_s.split(":").first.to_f
|
70
|
+
else
|
71
|
+
value.to_s.split(":").first.to_f
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
32
76
|
module NumericValue
|
33
77
|
extend Entity
|
34
78
|
|
@@ -51,6 +95,10 @@ adjusted.p.value
|
|
51
95
|
adjusted.p.values
|
52
96
|
Rank
|
53
97
|
rank
|
98
|
+
Counts
|
99
|
+
Ratio
|
100
|
+
Size
|
101
|
+
size
|
54
102
|
EOF
|
55
103
|
).split("\n")
|
56
104
|
|
@@ -128,7 +176,7 @@ module RbbtRESTHelpers
|
|
128
176
|
|
129
177
|
num = num.to_i
|
130
178
|
size = size.to_i
|
131
|
-
max = object.size / size + 1
|
179
|
+
max = (object.size / size) + 1
|
132
180
|
|
133
181
|
num = max if num > max
|
134
182
|
num = - max if num < - max
|
@@ -178,7 +226,7 @@ module RbbtRESTHelpers
|
|
178
226
|
|
179
227
|
case
|
180
228
|
when value =~ /^([<>]=?)(.*)/
|
181
|
-
tsv = tsv.select(key, invert){|k| k = k.first if Array === k; (k.nil? or k.empty?) ? false : k.to_f.send($1, $2.to_f)}
|
229
|
+
tsv = tsv.select(key, invert){|k| k = k.first if Array === k; (k.nil? or (String === k and k.empty?)) ? false : k.to_f.send($1, $2.to_f)}
|
182
230
|
when value =~ /^\/(.+)\/.{0,2}\s*$/
|
183
231
|
tsv = tsv.select({key => Regexp.new($1)}, invert)
|
184
232
|
when (value =~ /^\d+$/ and tsv.type == :double or tsv.type == :flat)
|
@@ -286,7 +334,8 @@ module RbbtRESTHelpers
|
|
286
334
|
url = remove_GET_param(url, "_")
|
287
335
|
end
|
288
336
|
|
289
|
-
table_class = []
|
337
|
+
table_class = options[:table_class] || []
|
338
|
+
table_class = [table_class] unless Array === table_class
|
290
339
|
table_class << 'wide responsive' if tsv.fields.length > 4
|
291
340
|
|
292
341
|
options[:url] = url
|
data/lib/rbbt/rest/main.rb
CHANGED
@@ -31,11 +31,6 @@ module Sinatra
|
|
31
31
|
|
32
32
|
attr_accessor :ajax, :layout, :format, :size, :update, :cache_type, :_, :profile
|
33
33
|
|
34
|
-
if production?
|
35
|
-
set :haml, { :ugly => true }
|
36
|
-
set :clean_trace, true
|
37
|
-
set :static_cache_control , [:public, {:max_age => 360000}]
|
38
|
-
end
|
39
34
|
|
40
35
|
enable :cross_origin
|
41
36
|
set :allow_origin, :any
|
@@ -44,9 +39,18 @@ module Sinatra
|
|
44
39
|
set :max_age, "1728000"
|
45
40
|
set :allow_headers, ['URI']
|
46
41
|
|
42
|
+
if production?
|
43
|
+
set :haml, { :ugly => true }
|
44
|
+
set :clean_trace, true
|
45
|
+
set :static_cache_control , [:public, {:max_age => 360000}]
|
46
|
+
else
|
47
|
+
set :static_cache_control , [:public, {:max_age => 0}]
|
48
|
+
end
|
49
|
+
|
47
50
|
before do
|
48
51
|
method = request.request_method
|
49
52
|
method_color = case method
|
53
|
+
|
50
54
|
when "GET"
|
51
55
|
:cyan
|
52
56
|
when "POST"
|
@@ -179,6 +183,18 @@ module Sinatra
|
|
179
183
|
|
180
184
|
halt 500, [e.class.to_s, e.message] * " => " << "\n\n" << (e.backtrace * "\n").gsub('`',"'")
|
181
185
|
end
|
186
|
+
|
187
|
+
get '/fonts/*' do
|
188
|
+
filename = params[:splat].first
|
189
|
+
file = File.join(FontAwesome::Sass.fonts_path, filename)
|
190
|
+
send_file file
|
191
|
+
end
|
192
|
+
|
193
|
+
get '/opt/*' do
|
194
|
+
filename = params[:splat].first
|
195
|
+
file = locate_file(Path.setup('public/opt')[filename])
|
196
|
+
send_file file.find
|
197
|
+
end
|
182
198
|
|
183
199
|
require 'rbbt/rest/monitor'
|
184
200
|
register Sinatra::RbbtRESTMonitor
|
data/lib/rbbt/rest/web_tool.rb
CHANGED
data/lib/rbbt/rest/workflow.rb
CHANGED
@@ -217,7 +217,26 @@ module Sinatra
|
|
217
217
|
|
218
218
|
job = workflow.load_id(File.join(task, job))
|
219
219
|
|
220
|
-
|
220
|
+
require 'mimemagic'
|
221
|
+
path = job.file(filename)
|
222
|
+
mime = nil
|
223
|
+
Open.open(path) do |io|
|
224
|
+
begin
|
225
|
+
mime = MimeMagic.by_path(io)
|
226
|
+
if mime.nil?
|
227
|
+
io.rewind
|
228
|
+
mime = MimeMagic.by_magic(io)
|
229
|
+
end
|
230
|
+
if mime.nil?
|
231
|
+
io.rewind
|
232
|
+
mime = "text/tab-separated-values" if io.gets =~ /^#/ and io.gets.include? "\t"
|
233
|
+
end
|
234
|
+
rescue Exception
|
235
|
+
Log.exception $!
|
236
|
+
end
|
237
|
+
end
|
238
|
+
content_type mime if mime
|
239
|
+
send_file path
|
221
240
|
end
|
222
241
|
|
223
242
|
delete "/#{workflow.to_s}/:task/:job" do
|
@@ -98,6 +98,8 @@ module WorkflowRESTHelpers
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def show_result(job, workflow, task)
|
101
|
+
return show_result_html nil, workflow, task, job.name, job if @fragment
|
102
|
+
|
101
103
|
case format.to_sym
|
102
104
|
when :html
|
103
105
|
show_result_html job.load, workflow, task, job.name, job
|
@@ -196,7 +198,7 @@ module WorkflowRESTHelpers
|
|
196
198
|
content_type :text
|
197
199
|
job.name
|
198
200
|
else
|
199
|
-
job.
|
201
|
+
job.soft_grace
|
200
202
|
redirect job_url
|
201
203
|
end
|
202
204
|
rescue Exception
|
@@ -6,6 +6,7 @@ module WorkflowRESTHelpers
|
|
6
6
|
def workflow_render(template, workflow = nil, task = nil, params = {})
|
7
7
|
workflow = consume_parameter(:workflow, params) if workflow.nil?
|
8
8
|
task = consume_parameter(:task, params) if workflow.nil?
|
9
|
+
job = consume_parameter(:job, params) if job.nil?
|
9
10
|
|
10
11
|
template_file = locate_workflow_template(template, workflow, task)
|
11
12
|
|
@@ -13,9 +14,22 @@ module WorkflowRESTHelpers
|
|
13
14
|
locals[:workflow] = workflow if workflow
|
14
15
|
locals[:task] = task if task
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
if layout
|
18
|
+
layout_file = workflow.libdir.www.views[workflow.to_s]["layout.haml"] if workflow.libdir
|
19
|
+
layout_file = locate_template("layout") unless layout_file and layout_file.exists?
|
20
|
+
else
|
21
|
+
layout_file = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
if job
|
25
|
+
locals[:job] = job
|
26
|
+
@step = job
|
27
|
+
cache_type = execution_type(workflow, task)
|
28
|
+
cache_file = job.file('html')
|
29
|
+
render(template_file, locals, layout_file, [task,workflow,job.name] * "-", :cache_type => cache_type, :cache_file => cache_file)
|
30
|
+
else
|
31
|
+
render(template_file, locals, layout_file)
|
32
|
+
end
|
19
33
|
end
|
20
34
|
|
21
35
|
def workflow_partial(template, workflow = nil, task = nil, params = {})
|
@@ -0,0 +1,17 @@
|
|
1
|
+
@import "_normalize"
|
2
|
+
@import "_rbbt"
|
3
|
+
|
4
|
+
@import "style"
|
5
|
+
|
6
|
+
@import "user"
|
7
|
+
@import "entity_card"
|
8
|
+
@import "workflow"
|
9
|
+
@import "finder"
|
10
|
+
@import "favourites"
|
11
|
+
@import "actions"
|
12
|
+
@import "top_menu"
|
13
|
+
@import "help"
|
14
|
+
@import "figure"
|
15
|
+
@import "monitor"
|
16
|
+
@import "layout"
|
17
|
+
|