taverna-player 0.3.0 → 0.4.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.
- data/CHANGES.rdoc +11 -0
- data/README.rdoc +5 -0
- data/app/models/taverna_player/run_port.rb +31 -0
- data/app/views/taverna_player/runs/show.json.jbuilder +2 -0
- data/lib/generators/taverna_player/models_generator.rb +1 -1
- data/lib/generators/templates/models/run_port.rb +14 -0
- data/lib/taverna_player/concerns/models/run_port.rb +26 -3
- data/lib/taverna_player/port_renderer.rb +1 -2
- data/lib/taverna_player/version.rb +1 -1
- data/test/fixtures/taverna_player/run_ports.yml +7 -0
- data/test/unit/taverna_player/run_port_test.rb +56 -5
- metadata +4 -6
- data/lib/generators/templates/models/input.rb +0 -20
- data/lib/generators/templates/models/output.rb +0 -20
data/CHANGES.rdoc
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
= Changes log for Taverna Player
|
2
2
|
|
3
|
+
== Version 0.4.0
|
4
|
+
|
5
|
+
* [TAV-466] Add port metadata to JSON output.
|
6
|
+
* [TAV-472] Fix port model overriding stubs.
|
7
|
+
* Add methods to query a port value's type.
|
8
|
+
* Add a method to get a port value's size.
|
9
|
+
* Add protection for value size and type methods.
|
10
|
+
* Check that index lists are not altered.
|
11
|
+
* Use the new port value methods in the port renderer.
|
12
|
+
* [TAV-473] Get all values types directly from a port.
|
13
|
+
|
3
14
|
== Version 0.3.0
|
4
15
|
|
5
16
|
* Refactor callback code out into its own module.
|
data/README.rdoc
CHANGED
@@ -372,6 +372,11 @@ clashes.
|
|
372
372
|
If you wanted to add a before filter to authenticate your users you would add
|
373
373
|
that line before the +include+ statement, for example.
|
374
374
|
|
375
|
+
<b>Important note!</b> If you override the RunPort model then you _must_
|
376
|
+
override the RunPort::Input and RunPort::Output models too (even if you just
|
377
|
+
leave the generated stubs unedited). This is because they are subclasses of
|
378
|
+
RunPort and the inheritances must be re-established with the overridden model.
|
379
|
+
|
375
380
|
== Run callbacks
|
376
381
|
|
377
382
|
Taverna Player provides four points around a workflow run for you to specify
|
@@ -36,6 +36,37 @@ module TavernaPlayer
|
|
36
36
|
# Show up to the first 256 characters of the port's value. This returns
|
37
37
|
# nil if the port has a file instead of a value.
|
38
38
|
|
39
|
+
##
|
40
|
+
# :method: value_size
|
41
|
+
# :call-seq:
|
42
|
+
# value_size -> string
|
43
|
+
# value_size(indices) -> string
|
44
|
+
#
|
45
|
+
# Get the size (in bytes) of the value held in this port. Pass in a list
|
46
|
+
# of indices if it is a list port. Returns nil if there is no port
|
47
|
+
# metadata.
|
48
|
+
|
49
|
+
##
|
50
|
+
# :method: value_type
|
51
|
+
# :call-seq:
|
52
|
+
# value_type -> string
|
53
|
+
# value_type(indices) -> string
|
54
|
+
#
|
55
|
+
# Get the MIME type of the value held in this port. Pass in a list of
|
56
|
+
# indices if it is a list port. Returns "text/plain" if there is no port
|
57
|
+
# metadata so if you create a port and put any other type of data in then
|
58
|
+
# you should adjust the metadata to match.
|
59
|
+
|
60
|
+
##
|
61
|
+
# :method: value_is_text?
|
62
|
+
# :call-seq:
|
63
|
+
# value_is_text? -> string
|
64
|
+
# value_is_text?(indices) -> string
|
65
|
+
#
|
66
|
+
# Is the type of the value held in this port some sort of text? This
|
67
|
+
# returns true if the media type section of the MIME type is "text". Pass
|
68
|
+
# in a list of indices if it is a list port.
|
69
|
+
|
39
70
|
##
|
40
71
|
# :method: value
|
41
72
|
# :call-seq:
|
@@ -17,4 +17,18 @@ module TavernaPlayer
|
|
17
17
|
|
18
18
|
# Extend the RunPort model here.
|
19
19
|
end
|
20
|
+
|
21
|
+
class RunPort::Input < RunPort
|
22
|
+
# Do not remove the next line.
|
23
|
+
include TavernaPlayer::Concerns::Models::Input
|
24
|
+
|
25
|
+
# Extend the RunPort::Input model here.
|
26
|
+
end
|
27
|
+
|
28
|
+
class RunPort::Output < RunPort
|
29
|
+
# Do not remove the next line.
|
30
|
+
include TavernaPlayer::Concerns::Models::Output
|
31
|
+
|
32
|
+
# Extend the RunPort::Output model here.
|
33
|
+
end
|
20
34
|
end
|
@@ -17,6 +17,8 @@ module TavernaPlayer
|
|
17
17
|
|
18
18
|
extend ActiveSupport::Concern
|
19
19
|
|
20
|
+
include TavernaPlayer::Concerns::Utils
|
21
|
+
|
20
22
|
included do
|
21
23
|
|
22
24
|
MAXIMUM_DATABASE_VALUE_SIZE = 255
|
@@ -88,21 +90,42 @@ module TavernaPlayer
|
|
88
90
|
data
|
89
91
|
end
|
90
92
|
|
93
|
+
def value_metadata(field, *indices)
|
94
|
+
return if metadata.nil?
|
95
|
+
index = [*indices].flatten
|
96
|
+
recurse_into_lists(metadata[field], index)
|
97
|
+
end
|
98
|
+
|
91
99
|
end # included
|
92
100
|
|
93
101
|
def display_name
|
94
102
|
name.gsub('_', ' ')
|
95
103
|
end
|
96
104
|
|
105
|
+
def value_type(*indices)
|
106
|
+
value_metadata(:type, *indices) || "text/plain"
|
107
|
+
end
|
108
|
+
|
109
|
+
def value_is_text?(*indices)
|
110
|
+
type = value_type(*indices)
|
111
|
+
type.starts_with?("text")
|
112
|
+
end
|
113
|
+
|
114
|
+
def value_size(*indices)
|
115
|
+
value_metadata(:size, *indices)
|
116
|
+
end
|
117
|
+
|
97
118
|
def value_preview
|
98
119
|
self[:value]
|
99
120
|
end
|
100
121
|
|
101
122
|
def value(*indices)
|
102
123
|
if depth == 0
|
103
|
-
|
104
|
-
|
105
|
-
|
124
|
+
if file.path.blank?
|
125
|
+
self[:value]
|
126
|
+
else
|
127
|
+
value_is_text? ? File.read(file.path) : File.binread(file.path)
|
128
|
+
end
|
106
129
|
else
|
107
130
|
deep_value([*indices].flatten)
|
108
131
|
end
|
@@ -21,7 +21,6 @@ module TavernaPlayer
|
|
21
21
|
# etc) available to them.
|
22
22
|
class PortRenderer
|
23
23
|
include TavernaPlayer::Concerns::Callback
|
24
|
-
include TavernaPlayer::Concerns::Utils
|
25
24
|
|
26
25
|
# The renderers are all called in the scope of this class so we include
|
27
26
|
# ActionView::Helpers here so that they are all available to them.
|
@@ -96,7 +95,7 @@ module TavernaPlayer
|
|
96
95
|
if port.depth > 0 && index.empty?
|
97
96
|
renderer = @hash[:list]
|
98
97
|
else
|
99
|
-
type = MIME::Types[
|
98
|
+
type = MIME::Types[port.value_type(index)].first
|
100
99
|
renderer = @hash[type.media_type][type.sub_type] ||
|
101
100
|
@hash[type.media_type][:default] || @hash[:default]
|
102
101
|
end
|
@@ -53,3 +53,10 @@ five:
|
|
53
53
|
run_id: 4
|
54
54
|
depth: 0
|
55
55
|
metadata: "---\n:size: 33\n:type: text/plain"
|
56
|
+
|
57
|
+
six:
|
58
|
+
name: Output
|
59
|
+
port_type: TavernaPlayer::RunPort::Output
|
60
|
+
run_id: 2
|
61
|
+
depth: 2
|
62
|
+
metadata: "---\n:size:\n- - 15\n - 20\n- - 17\n - 22\n- - 19\n - 24\n:type:\n- - text/plain\n - text/plain\n- - text/plain\n - text/plain\n- - text/plain\n - text/plain\n"
|
@@ -19,6 +19,7 @@ module TavernaPlayer
|
|
19
19
|
@port2 = taverna_player_run_ports(:two)
|
20
20
|
@port3 = taverna_player_run_ports(:three)
|
21
21
|
@port5 = taverna_player_run_ports(:five)
|
22
|
+
@port6 = taverna_player_run_ports(:six)
|
22
23
|
end
|
23
24
|
|
24
25
|
test "run port inheritance types" do
|
@@ -175,7 +176,7 @@ module TavernaPlayer
|
|
175
176
|
port = RunPort::Input.create(:name => "test_port", :value => "test",
|
176
177
|
:file => file)
|
177
178
|
|
178
|
-
assert port
|
179
|
+
assert port[:value].blank?, "Value should be blank"
|
179
180
|
refute port.file.blank?, "File should be present"
|
180
181
|
end
|
181
182
|
|
@@ -184,7 +185,7 @@ module TavernaPlayer
|
|
184
185
|
port = RunPort::Output.create(:name => "test_port", :value => "test",
|
185
186
|
:file => file)
|
186
187
|
|
187
|
-
assert port
|
188
|
+
assert port[:value].blank?, "Value should be blank"
|
188
189
|
refute port.file.blank?, "File should be present"
|
189
190
|
end
|
190
191
|
|
@@ -196,7 +197,7 @@ module TavernaPlayer
|
|
196
197
|
port.value = "test"
|
197
198
|
port.save
|
198
199
|
|
199
|
-
assert port
|
200
|
+
assert port[:value].blank?, "Value should be blank"
|
200
201
|
refute port.file.blank?, "File should be present"
|
201
202
|
end
|
202
203
|
|
@@ -208,7 +209,7 @@ module TavernaPlayer
|
|
208
209
|
port.value = "test"
|
209
210
|
port.save
|
210
211
|
|
211
|
-
assert port
|
212
|
+
assert port[:value].blank?, "Value should be blank"
|
212
213
|
refute port.file.blank?, "File should be present"
|
213
214
|
end
|
214
215
|
|
@@ -283,7 +284,7 @@ module TavernaPlayer
|
|
283
284
|
|
284
285
|
port.file = fixture_file_upload "/files/crassostrea_gigas.csv"
|
285
286
|
port.save
|
286
|
-
assert_nil port
|
287
|
+
assert_nil port[:value], "Port value not nil"
|
287
288
|
refute port.file.blank?, "File not present"
|
288
289
|
end
|
289
290
|
|
@@ -305,5 +306,55 @@ module TavernaPlayer
|
|
305
306
|
assert_nil port.value, "Port value not nil"
|
306
307
|
assert port.file.blank?, "File not present"
|
307
308
|
end
|
309
|
+
|
310
|
+
test "get value types" do
|
311
|
+
assert_equal "text/plain", @port1.value_type, "Type not text/plain"
|
312
|
+
assert_equal "text/plain", @port2.value_type(1), "Type not text/plain"
|
313
|
+
assert_equal "application/x-error", @port2.value_type(2),
|
314
|
+
"Type not application/x-error"
|
315
|
+
assert_equal "text/plain", @port3.value_type, "Type not text/plain"
|
316
|
+
assert_equal "text/plain", @port6.value_type(0, 0),
|
317
|
+
"Type not text/plain"
|
318
|
+
assert_equal "text/plain", @port6.value_type([2, 1]),
|
319
|
+
"Type not text/plain"
|
320
|
+
|
321
|
+
# Test when there is no metadata
|
322
|
+
port = RunPort::Input.create(:name => "test_port", :value => "Test")
|
323
|
+
assert_equal "text/plain", port.value_type,
|
324
|
+
"Unspecified type should return \"text/plain\""
|
325
|
+
assert port.value_is_text?, "Unspecified type should be text"
|
326
|
+
assert_nil port.value_size, "Unspecified size should return nil"
|
327
|
+
end
|
328
|
+
|
329
|
+
test "detecting text values" do
|
330
|
+
assert @port1.value_is_text?, "Value not detected as text"
|
331
|
+
assert @port2.value_is_text?(0), "Value not detected as text"
|
332
|
+
assert @port3.value_is_text?, "Value not detected as text"
|
333
|
+
assert @port6.value_is_text?(0, 0), "Value not detected as text"
|
334
|
+
assert @port6.value_is_text?([1, 1]), "Value not detected as text"
|
335
|
+
refute @port2.value_is_text?(2), "Value detected as text"
|
336
|
+
end
|
337
|
+
|
338
|
+
test "get value sizes" do
|
339
|
+
assert_equal 13, @port1.value_size, "Value size not 13"
|
340
|
+
assert_equal 974, @port2.value_size(2), "Value size not 974"
|
341
|
+
assert_equal 3, @port3.value_size, "Value size not 3"
|
342
|
+
assert_equal 15, @port6.value_size([0, 0]), "Value size not 15"
|
343
|
+
assert_equal 24, @port6.value_size([2, 1]), "Value size not 24"
|
344
|
+
end
|
345
|
+
|
346
|
+
test "value methods should not alter input parameters" do
|
347
|
+
index = [1, 1]
|
348
|
+
index_saved = index.dup
|
349
|
+
|
350
|
+
@port6.value_type(index)
|
351
|
+
assert_equal index_saved, index, "Parameter index was altered"
|
352
|
+
|
353
|
+
@port6.value_is_text?(index)
|
354
|
+
assert_equal index_saved, index, "Parameter index was altered"
|
355
|
+
|
356
|
+
@port6.value_size(index)
|
357
|
+
assert_equal index_saved, index, "Parameter index was altered"
|
358
|
+
end
|
308
359
|
end
|
309
360
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: taverna-player
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -322,8 +322,6 @@ files:
|
|
322
322
|
- lib/generators/templates/callbacks/worker_callbacks.rb
|
323
323
|
- lib/generators/templates/controllers/runs_controller.rb
|
324
324
|
- lib/generators/templates/controllers/service_credentials_controller.rb
|
325
|
-
- lib/generators/templates/models/input.rb
|
326
|
-
- lib/generators/templates/models/output.rb
|
327
325
|
- lib/generators/templates/models/run.rb
|
328
326
|
- lib/generators/templates/models/run_port.rb
|
329
327
|
- lib/generators/templates/player_initializer.rb
|
@@ -456,7 +454,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
456
454
|
version: '0'
|
457
455
|
segments:
|
458
456
|
- 0
|
459
|
-
hash:
|
457
|
+
hash: -1589530692801981432
|
460
458
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
461
459
|
none: false
|
462
460
|
requirements:
|
@@ -465,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
465
463
|
version: '0'
|
466
464
|
segments:
|
467
465
|
- 0
|
468
|
-
hash:
|
466
|
+
hash: -1589530692801981432
|
469
467
|
requirements: []
|
470
468
|
rubyforge_project:
|
471
469
|
rubygems_version: 1.8.21
|
@@ -1,20 +0,0 @@
|
|
1
|
-
#------------------------------------------------------------------------------
|
2
|
-
# Copyright (c) 2013 The University of Manchester, UK.
|
3
|
-
#
|
4
|
-
# BSD Licenced. See LICENCE.rdoc for details.
|
5
|
-
#
|
6
|
-
# Taverna Player was developed in the BioVeL project, funded by the European
|
7
|
-
# Commission 7th Framework Programme (FP7), through grant agreement
|
8
|
-
# number 283359.
|
9
|
-
#
|
10
|
-
# Author: Robert Haines
|
11
|
-
#------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module TavernaPlayer
|
14
|
-
class RunPort::Input < ActiveRecord::Base
|
15
|
-
# Do not remove the next line.
|
16
|
-
include TavernaPlayer::Concerns::Models::Input
|
17
|
-
|
18
|
-
# Extend the RunPort::Input model here.
|
19
|
-
end
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
#------------------------------------------------------------------------------
|
2
|
-
# Copyright (c) 2013 The University of Manchester, UK.
|
3
|
-
#
|
4
|
-
# BSD Licenced. See LICENCE.rdoc for details.
|
5
|
-
#
|
6
|
-
# Taverna Player was developed in the BioVeL project, funded by the European
|
7
|
-
# Commission 7th Framework Programme (FP7), through grant agreement
|
8
|
-
# number 283359.
|
9
|
-
#
|
10
|
-
# Author: Robert Haines
|
11
|
-
#------------------------------------------------------------------------------
|
12
|
-
|
13
|
-
module TavernaPlayer
|
14
|
-
class RunPort::Output < ActiveRecord::Base
|
15
|
-
# Do not remove the next line.
|
16
|
-
include TavernaPlayer::Concerns::Models::Output
|
17
|
-
|
18
|
-
# Extend the RunPort::Output model here.
|
19
|
-
end
|
20
|
-
end
|