taverna-player 0.1.0 → 0.2.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/.gitignore +1 -1
- data/CHANGES.rdoc +18 -0
- data/README.rdoc +9 -6
- data/Rakefile +1 -0
- data/app/helpers/taverna_player/runs_helper.rb +1 -1
- data/app/models/taverna_player/interaction.rb +3 -4
- data/app/models/taverna_player/run_port.rb +25 -97
- data/app/views/taverna_player/runs/_interaction.html.erb +1 -1
- data/app/views/taverna_player/runs/show.json.jbuilder +0 -1
- data/config/routes.rb +2 -2
- data/db/migrate/20131126175424_remove_unique_id_from_taverna_player_interactions.rb +11 -0
- data/db/migrate/20131127162157_add_indexes_where_missing.rb +12 -0
- data/db/migrate/20131127163438_remove_run_id_index_from_taverna_player_runs.rb +9 -0
- data/db/migrate/20131127171823_remove_unused_paperclip_columns.rb +17 -0
- data/lib/generators/taverna_player/install_generator.rb +7 -4
- data/lib/generators/taverna_player/models_generator.rb +3 -2
- data/lib/generators/templates/ReadMe.txt +10 -5
- data/lib/generators/templates/models/input.rb +20 -0
- data/lib/generators/templates/models/output.rb +20 -0
- data/lib/generators/templates/models/run_port.rb +20 -0
- data/lib/generators/templates/{initializer.rb → player_initializer.rb} +0 -20
- data/lib/generators/templates/server_initializer.rb +24 -0
- data/lib/taverna_player/concerns/controllers/runs_controller.rb +1 -1
- data/lib/taverna_player/concerns/models/input_port.rb +34 -0
- data/lib/taverna_player/concerns/models/output_port.rb +34 -0
- data/lib/taverna_player/concerns/models/run.rb +7 -5
- data/lib/taverna_player/concerns/models/run_port.rb +99 -0
- data/lib/taverna_player/version.rb +1 -1
- data/lib/taverna_player/worker.rb +2 -2
- data/taverna_player.gemspec +7 -1
- data/test/dummy/config/initializers/{taverna_player.example.rb → taverna_player.rb} +0 -13
- data/test/dummy/config/initializers/taverna_server.example.rb +26 -0
- data/test/dummy/db/migrate/20131126175640_remove_unique_id_from_taverna_player_interactions.taverna_player.rb +12 -0
- data/test/dummy/db/migrate/20131127163538_add_indexes_where_missing.taverna_player.rb +13 -0
- data/test/dummy/db/migrate/20131127163539_remove_run_id_index_from_taverna_player_runs.taverna_player.rb +10 -0
- data/test/dummy/db/migrate/20131127172420_remove_unused_paperclip_columns.taverna_player.rb +18 -0
- data/test/dummy/db/schema.rb +14 -15
- data/test/fixtures/taverna_player/interactions.yml +0 -3
- data/test/fixtures/taverna_player/run_ports.yml +1 -0
- data/test/functional/taverna_player/runs_controller_test.rb +4 -4
- data/test/unit/taverna_player/interaction_test.rb +0 -8
- metadata +35 -8
data/.gitignore
CHANGED
data/CHANGES.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
= Changes log for Taverna Player
|
2
|
+
|
3
|
+
== Version 0.2.0
|
4
|
+
|
5
|
+
* [TAV-461] Remove unique_id from the interaction table.
|
6
|
+
* [TAV-353] Optimize table indexing.
|
7
|
+
* [TAV-353] Set inverse relationships in the models.
|
8
|
+
* [TAV-353] Remove unused Paperclip columns.
|
9
|
+
* [TAV-462] Separate out the config for Taverna Server.
|
10
|
+
* [TAV-463] Serialize metadata field on input port.
|
11
|
+
* [TAV-464] Allow RunPort model to be overridden.
|
12
|
+
* [TAV-464] Allow overriding of Input and Output models.
|
13
|
+
|
14
|
+
== About this CHANGES file
|
15
|
+
|
16
|
+
This file is, at least in part, generated by the following command:
|
17
|
+
|
18
|
+
$ git log --pretty=format:"* %s" --reverse --no-merges <commit-hash>..
|
data/README.rdoc
CHANGED
@@ -6,6 +6,7 @@ URL:: http://www.taverna.org.uk
|
|
6
6
|
Licence:: BSD (See LICENCE or http://www.opensource.org/licenses/bsd-license.php)
|
7
7
|
Copyright:: (c) 2013 The University of Manchester, UK
|
8
8
|
|
9
|
+
{<img src="https://badge.fury.io/rb/taverna-player.png" alt="Gem Version" />}[http://badge.fury.io/rb/taverna-player]
|
9
10
|
{<img src="https://codeclimate.com/github/myGrid/taverna-player.png" />}[https://codeclimate.com/github/myGrid/taverna-player]
|
10
11
|
|
11
12
|
== Synopsis
|
@@ -37,12 +38,12 @@ And run the <tt>bundle install</tt> command to install it.
|
|
37
38
|
Next you need to run the install generator:
|
38
39
|
rails generate taverna_player:install
|
39
40
|
|
40
|
-
This installs
|
41
|
-
<tt>config/initializers</tt> directory) which
|
42
|
-
configuration options
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
This installs two initializer files (into your application's
|
42
|
+
<tt>config/initializers</tt> directory) which describe all of Taverna Player's
|
43
|
+
configuration options; there are some things that MUST be configured before it
|
44
|
+
will work - see below for more information. The install generator also prints
|
45
|
+
out a list of other steps for setting up Taverna Player; these are repeated
|
46
|
+
and detailed below.
|
46
47
|
|
47
48
|
== Running Taverna Player
|
48
49
|
|
@@ -652,6 +653,8 @@ In no particular order:
|
|
652
653
|
* Comprehensive Taverna Server administration panel. This would allow admin
|
653
654
|
users to view and manage runs directly on the Taverna Server along with
|
654
655
|
other such admin tasks.
|
656
|
+
* I18n support.
|
657
|
+
* oEmbed support (see http://oembed.com/ for more details).
|
655
658
|
|
656
659
|
== Support
|
657
660
|
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ module TavernaPlayer
|
|
15
15
|
|
16
16
|
def interaction_redirect(interaction)
|
17
17
|
if interaction.page_uri.blank?
|
18
|
-
run_url(interaction.run) + "/interaction/#{interaction.
|
18
|
+
run_url(interaction.run) + "/interaction/#{interaction.serial}"
|
19
19
|
else
|
20
20
|
interaction.page_uri
|
21
21
|
end
|
@@ -12,12 +12,11 @@
|
|
12
12
|
|
13
13
|
module TavernaPlayer
|
14
14
|
class Interaction < ActiveRecord::Base
|
15
|
-
attr_accessible :displayed, :feed_reply, :page, :replied
|
15
|
+
attr_accessible :displayed, :feed_reply, :page, :replied
|
16
16
|
|
17
|
-
belongs_to :run, :class_name => "TavernaPlayer::Run"
|
17
|
+
belongs_to :run, :class_name => "TavernaPlayer::Run",
|
18
|
+
:inverse_of => :interactions
|
18
19
|
|
19
|
-
validates_presence_of :unique_id
|
20
|
-
validates_uniqueness_of :unique_id
|
21
20
|
validates_presence_of :serial
|
22
21
|
validates_uniqueness_of :serial, :scope => :run_id,
|
23
22
|
:message => "Interaction serial number should be unique for a run"
|
@@ -18,131 +18,59 @@ module TavernaPlayer
|
|
18
18
|
#
|
19
19
|
# A port can hold either a text value or a file.
|
20
20
|
class RunPort < ActiveRecord::Base
|
21
|
+
include TavernaPlayer::Concerns::Models::RunPort
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
self.inheritance_column = "port_type"
|
25
|
-
|
26
|
-
belongs_to :run, :class_name => "TavernaPlayer::Run"
|
27
|
-
|
28
|
-
validates_presence_of :name
|
29
|
-
validates_uniqueness_of :name, :scope => [:run_id, :port_type]
|
30
|
-
|
31
|
-
attr_accessible :depth, :file, :name, :value
|
32
|
-
|
33
|
-
has_attached_file :file,
|
34
|
-
:path => File.join(TavernaPlayer.file_store, ":class/:attachment/:id/:filename"),
|
35
|
-
:url => :file_url_via_run,
|
36
|
-
:default_url => ""
|
37
|
-
|
38
|
-
default_scope order("lower(name) ASC")
|
39
|
-
|
40
|
-
# If there is both a value and a file, then prefer the file. If the file
|
41
|
-
# is changed, delete the value. This must be run before "process_value"!
|
42
|
-
before_save :delete_value, :if => :file_file_name_changed?
|
43
|
-
|
44
|
-
# Overflow the value into a file if it is too big. Don't try to process
|
45
|
-
# the value if the file has changed. This must run after "delete_value"!
|
46
|
-
before_save :process_value, :if => :value_changed?, :unless => :file_file_name_changed?
|
47
|
-
|
23
|
+
##
|
24
|
+
# :method: display_name
|
48
25
|
# :call-seq:
|
49
26
|
# display_name -> string
|
50
27
|
#
|
51
28
|
# Convert this port's name to a more presentable form. In practice this
|
52
29
|
# means converting underscores (_) to spaces, while preserving case.
|
53
|
-
def display_name
|
54
|
-
name.gsub('_', ' ')
|
55
|
-
end
|
56
30
|
|
31
|
+
##
|
32
|
+
# :method: value_preview
|
57
33
|
# :call-seq:
|
58
34
|
# value_preview -> string
|
59
35
|
#
|
60
36
|
# Show up to the first 256 characters of the port's value. This returns
|
61
37
|
# nil if the port has a file instead of a value.
|
62
|
-
def value_preview
|
63
|
-
self[:value]
|
64
|
-
end
|
65
38
|
|
39
|
+
##
|
40
|
+
# :method: value
|
66
41
|
# :call-seq:
|
67
42
|
# value -> string
|
68
43
|
#
|
69
44
|
# Return the value held in this port if there is one.
|
70
|
-
def value
|
71
|
-
v = self[:value]
|
72
|
-
if !v.blank? && !file.path.blank?
|
73
|
-
File.read(file.path)
|
74
|
-
else
|
75
|
-
v
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
private
|
80
|
-
|
81
|
-
def delete_value
|
82
|
-
self[:value] = nil
|
83
|
-
end
|
84
|
-
|
85
|
-
# If the value is too big to fit in the database then overflow it into a
|
86
|
-
# file.
|
87
|
-
def process_value
|
88
|
-
v = self[:value]
|
89
|
-
|
90
|
-
if !v.blank? && v.size > MAXIMUM_DATABASE_VALUE_SIZE
|
91
|
-
self[:value] = v[0...MAXIMUM_DATABASE_VALUE_SIZE]
|
92
|
-
save_value_to_file(v)
|
93
|
-
else
|
94
|
-
self.file = nil unless file.path.blank?
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
def save_value_to_file(v)
|
99
|
-
Dir.mktmpdir("#{id}", Rails.root.join("tmp")) do |tmp_dir|
|
100
|
-
tmp_file_name = File.join(tmp_dir, "#{name}.txt")
|
101
|
-
|
102
|
-
File.write(tmp_file_name, v.force_encoding("UTF-8"))
|
103
|
-
|
104
|
-
self.file = File.new(tmp_file_name)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
# This class represents a workflow input port.
|
110
|
-
class RunPort::Input < RunPort
|
111
|
-
|
112
|
-
private
|
113
|
-
|
114
|
-
def file_url_via_run
|
115
|
-
"/runs/#{run_id}/input/#{name}"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# This class represents a workflow output port.
|
120
|
-
class RunPort::Output < RunPort
|
121
|
-
|
122
|
-
attr_accessible :metadata
|
123
|
-
|
124
|
-
serialize :metadata
|
125
|
-
|
126
|
-
private
|
127
|
-
|
128
|
-
def file_url_via_run
|
129
|
-
"/runs/#{run_id}/output/#{name}"
|
130
|
-
end
|
131
|
-
|
132
|
-
public
|
133
45
|
|
134
46
|
##
|
135
47
|
# :method: metadata
|
136
48
|
# :call-seq:
|
137
49
|
# metadata -> hash
|
138
50
|
#
|
139
|
-
# Get the size and type metadata for this
|
140
|
-
#
|
51
|
+
# Get the size and type metadata for this port in a Hash. For a list it
|
52
|
+
# might look like this:
|
141
53
|
#
|
142
54
|
# {
|
143
55
|
# :size => [12, 36509],
|
144
56
|
# :type => ["text/plain", "image/png"]
|
145
57
|
# }
|
58
|
+
#
|
59
|
+
# <b>Note:</b> By default Taverna Player only uses this field on outputs.
|
60
|
+
# It is provided as a field for inputs too as a convenience for
|
61
|
+
# implementors and for possible future use.
|
62
|
+
|
63
|
+
end
|
146
64
|
|
65
|
+
# This class represents a workflow input port. All functionality is provided
|
66
|
+
# by the RunPort superclass.
|
67
|
+
class RunPort::Input < RunPort
|
68
|
+
include TavernaPlayer::Concerns::Models::Input
|
69
|
+
end
|
70
|
+
|
71
|
+
# This class represents a workflow output port. All functionality is
|
72
|
+
# provided by the RunPort superclass.
|
73
|
+
class RunPort::Output < RunPort
|
74
|
+
include TavernaPlayer::Concerns::Models::Output
|
147
75
|
end
|
148
76
|
end
|
@@ -20,7 +20,7 @@
|
|
20
20
|
pmrpc.register({
|
21
21
|
publicProcedureName : "reply",
|
22
22
|
procedure : function(status, results) {
|
23
|
-
interaction_reply('<%= "#{run_url(run)}/interaction/#{interaction.
|
23
|
+
interaction_reply('<%= "#{run_url(run)}/interaction/#{interaction.serial}" %>', status, results);
|
24
24
|
return "OK";
|
25
25
|
}
|
26
26
|
});
|
data/config/routes.rb
CHANGED
@@ -24,8 +24,8 @@ TavernaPlayer::Engine.routes.draw do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
scope "interaction" do
|
27
|
-
get ":
|
28
|
-
post ":
|
27
|
+
get ":serial", :action => "read_interaction"
|
28
|
+
post ":serial", :action => "write_interaction"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class RemoveUniqueIdFromTavernaPlayerInteractions < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
remove_index :taverna_player_interactions, :unique_id
|
4
|
+
remove_column :taverna_player_interactions, :unique_id
|
5
|
+
end
|
6
|
+
|
7
|
+
def down
|
8
|
+
add_column :taverna_player_interactions, :unique_id, :string
|
9
|
+
add_index :taverna_player_interactions, :unique_id
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class AddIndexesWhereMissing < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_index :taverna_player_interactions, [:run_id, :serial]
|
4
|
+
add_index :taverna_player_interactions, [:run_id, :replied]
|
5
|
+
|
6
|
+
add_index :taverna_player_run_ports, [:run_id, :name]
|
7
|
+
|
8
|
+
add_index :taverna_player_runs, :user_id
|
9
|
+
add_index :taverna_player_runs, :workflow_id
|
10
|
+
add_index :taverna_player_runs, :parent_id
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class RemoveUnusedPaperclipColumns < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
remove_column :taverna_player_runs, :results_content_type
|
4
|
+
remove_column :taverna_player_runs, :results_updated_at
|
5
|
+
|
6
|
+
remove_column :taverna_player_runs, :log_content_type
|
7
|
+
remove_column :taverna_player_runs, :log_updated_at
|
8
|
+
end
|
9
|
+
|
10
|
+
def down
|
11
|
+
add_column :taverna_player_runs, :log_updated_at, :datetime
|
12
|
+
add_column :taverna_player_runs, :log_content_type, :string
|
13
|
+
|
14
|
+
add_column :taverna_player_runs, :results_updated_at, :datetime
|
15
|
+
add_column :taverna_player_runs, :results_content_type, :string
|
16
|
+
end
|
17
|
+
end
|
@@ -15,11 +15,14 @@ module TavernaPlayer
|
|
15
15
|
class InstallGenerator < Rails::Generators::Base
|
16
16
|
source_root File.expand_path("../../templates", __FILE__)
|
17
17
|
|
18
|
-
desc "Creates
|
18
|
+
desc "Creates Taverna Player initializers"
|
19
19
|
|
20
|
-
def
|
21
|
-
copy_file "
|
22
|
-
"config/initializers/taverna_player.rb
|
20
|
+
def copy_initializers
|
21
|
+
copy_file "player_initializer.rb",
|
22
|
+
"config/initializers/taverna_player.rb"
|
23
|
+
|
24
|
+
copy_file "server_initializer.rb",
|
25
|
+
"config/initializers/taverna_server.example.rb"
|
23
26
|
end
|
24
27
|
|
25
28
|
def show_readme
|
@@ -19,8 +19,9 @@ module TavernaPlayer
|
|
19
19
|
"customization."
|
20
20
|
|
21
21
|
def copy_models
|
22
|
-
|
23
|
-
"app/models/taverna_player
|
22
|
+
["run.rb", "run_port.rb", "input.rb", "output.rb"].each do |file|
|
23
|
+
copy_file file, "app/models/taverna_player/#{file}"
|
24
|
+
end
|
24
25
|
end
|
25
26
|
end
|
26
27
|
end
|
@@ -1,14 +1,19 @@
|
|
1
1
|
|
2
2
|
==============================================================================
|
3
3
|
|
4
|
-
|
4
|
+
Two initializers have been installed to:
|
5
5
|
|
6
|
-
config/initializers/taverna_player.rb
|
6
|
+
config/initializers/taverna_player.rb
|
7
|
+
config/initializers/taverna_server.example.rb
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
The first is general configuration for Taverna Player and it is safe to commit
|
10
|
+
this to your repository. The second is configuration specific to your Taverna
|
11
|
+
Server instance and should not be commited to your repository. Please look
|
12
|
+
through these files and make any alterations as required. BEFORE you configure
|
13
|
+
the Taverna Server URI and login information in taverna_server.example.rb copy
|
14
|
+
this file to:
|
10
15
|
|
11
|
-
config/initializers/
|
16
|
+
config/initializers/taverna_server.rb
|
12
17
|
|
13
18
|
Then check the example file into your repository, add the non-example file to
|
14
19
|
your version control ignore file (e.g. .gitignore) and then configure the
|
@@ -0,0 +1,20 @@
|
|
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 Input < ActiveRecord::Base
|
15
|
+
# Do not remove the next line.
|
16
|
+
include TavernaPlayer::Concerns::Models::Input
|
17
|
+
|
18
|
+
# Extend the Input model here.
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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 Output < ActiveRecord::Base
|
15
|
+
# Do not remove the next line.
|
16
|
+
include TavernaPlayer::Concerns::Models::Output
|
17
|
+
|
18
|
+
# Extend the Output model here.
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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 < ActiveRecord::Base
|
15
|
+
# Do not remove the next line.
|
16
|
+
include TavernaPlayer::Concerns::Models::RunPort
|
17
|
+
|
18
|
+
# Extend the RunPort model here.
|
19
|
+
end
|
20
|
+
end
|
@@ -38,26 +38,6 @@ TavernaPlayer.setup do |config|
|
|
38
38
|
# in the main app. For Devise this would be :current_user. Defaults to nil.
|
39
39
|
#config.current_user_callback = nil
|
40
40
|
|
41
|
-
# Taverna Server configuration information. The poll interval is in seconds
|
42
|
-
# and sets how often the server will be polled for updates by each worker.
|
43
|
-
# The retry interval is also in seconds and sets how long a worker will wait
|
44
|
-
# before trying to start a run if the server is initially busy.
|
45
|
-
config.server_address = "http://localhost:8080/taverna"
|
46
|
-
config.server_username = "taverna"
|
47
|
-
config.server_password = "taverna"
|
48
|
-
config.server_poll_interval = 5
|
49
|
-
config.server_retry_interval = 10
|
50
|
-
|
51
|
-
# Taverna Server connection configuration.
|
52
|
-
#config.server_connection[:verify_peer] = true
|
53
|
-
#config.server_connection[:ca_file] = "/etc/certs/my-cert.crt"
|
54
|
-
#config.server_connection[:ca_path] = "/etc/certs/"
|
55
|
-
#config.server_connection[:client_certificate] = "client-cert.crt"
|
56
|
-
#config.server_connection[:client_password] = "P@5$w0Rd!"
|
57
|
-
#config.server_connection[:ssl_version] = :TLSv1
|
58
|
-
#config.server_connection[:open_timeout] = 10
|
59
|
-
#config.server_connection[:read_timeout] = 10
|
60
|
-
|
61
41
|
# Where to store files created by workflow runs. Should be fully qualified
|
62
42
|
# or use :rails_root for the root directory of your application.
|
63
43
|
#config.file_store = ":rails_root/public/system"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Taverna Player Server configuration
|
2
|
+
|
3
|
+
TavernaPlayer.setup do |config|
|
4
|
+
|
5
|
+
# Taverna Server configuration information. The poll interval is in seconds
|
6
|
+
# and sets how often the server will be polled for updates by each worker.
|
7
|
+
# The retry interval is also in seconds and sets how long a worker will wait
|
8
|
+
# before trying to start a run if the server is initially busy.
|
9
|
+
config.server_address = "http://localhost:8080/taverna"
|
10
|
+
config.server_username = "taverna"
|
11
|
+
config.server_password = "taverna"
|
12
|
+
config.server_poll_interval = 5
|
13
|
+
config.server_retry_interval = 10
|
14
|
+
|
15
|
+
# Taverna Server connection configuration.
|
16
|
+
#config.server_connection[:verify_peer] = true
|
17
|
+
#config.server_connection[:ca_file] = "/etc/certs/my-cert.crt"
|
18
|
+
#config.server_connection[:ca_path] = "/etc/certs/"
|
19
|
+
#config.server_connection[:client_certificate] = "client-cert.crt"
|
20
|
+
#config.server_connection[:client_password] = "P@5$w0Rd!"
|
21
|
+
#config.server_connection[:ssl_version] = :TLSv1
|
22
|
+
#config.server_connection[:open_timeout] = 10
|
23
|
+
#config.server_connection[:read_timeout] = 10
|
24
|
+
end
|
@@ -0,0 +1,34 @@
|
|
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
|
+
module Concerns
|
15
|
+
module Models
|
16
|
+
module Input
|
17
|
+
|
18
|
+
extend ActiveSupport::Concern
|
19
|
+
|
20
|
+
included do
|
21
|
+
belongs_to :run, :class_name => "TavernaPlayer::Run",
|
22
|
+
:inverse_of => :inputs
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def file_url_via_run
|
27
|
+
"/runs/#{run_id}/input/#{name}"
|
28
|
+
end
|
29
|
+
end # included
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
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
|
+
module Concerns
|
15
|
+
module Models
|
16
|
+
module Output
|
17
|
+
|
18
|
+
extend ActiveSupport::Concern
|
19
|
+
|
20
|
+
included do
|
21
|
+
belongs_to :run, :class_name => "TavernaPlayer::Run",
|
22
|
+
:inverse_of => :outputs
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def file_url_via_run
|
27
|
+
"/runs/#{run_id}/output/#{name}"
|
28
|
+
end
|
29
|
+
end # included
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -31,18 +31,20 @@ module TavernaPlayer
|
|
31
31
|
end
|
32
32
|
|
33
33
|
has_many :inputs, :class_name => "TavernaPlayer::RunPort::Input",
|
34
|
-
:dependent => :destroy
|
34
|
+
:inverse_of => :run, :dependent => :destroy
|
35
35
|
has_many :outputs, :class_name => "TavernaPlayer::RunPort::Output",
|
36
|
-
:dependent => :destroy
|
36
|
+
:inverse_of => :run, :dependent => :destroy
|
37
37
|
has_many :interactions, :class_name => "TavernaPlayer::Interaction",
|
38
|
-
:dependent => :destroy
|
38
|
+
:inverse_of => :run, :dependent => :destroy
|
39
39
|
belongs_to :delayed_job, :class_name => "::Delayed::Job"
|
40
40
|
|
41
41
|
# A run can have children, which are runs.
|
42
42
|
# A run can have a parent, which is another run.
|
43
43
|
has_many :children, :class_name => "TavernaPlayer::Run",
|
44
|
-
:foreign_key => "parent_id", :
|
45
|
-
|
44
|
+
:foreign_key => "parent_id", :inverse_of => :parent,
|
45
|
+
:dependent => :nullify
|
46
|
+
belongs_to :parent, :class_name => "TavernaPlayer::Run",
|
47
|
+
:inverse_of => :children
|
46
48
|
|
47
49
|
accepts_nested_attributes_for :inputs
|
48
50
|
|
@@ -0,0 +1,99 @@
|
|
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
|
+
module Concerns
|
15
|
+
module Models
|
16
|
+
module RunPort
|
17
|
+
|
18
|
+
extend ActiveSupport::Concern
|
19
|
+
|
20
|
+
included do
|
21
|
+
|
22
|
+
MAXIMUM_DATABASE_VALUE_SIZE = 255
|
23
|
+
|
24
|
+
self.inheritance_column = "port_type"
|
25
|
+
|
26
|
+
validates_presence_of :name
|
27
|
+
validates_uniqueness_of :name, :scope => [:run_id, :port_type]
|
28
|
+
|
29
|
+
attr_accessible :depth, :file, :metadata, :name, :value
|
30
|
+
|
31
|
+
serialize :metadata
|
32
|
+
|
33
|
+
has_attached_file :file,
|
34
|
+
:path => File.join(TavernaPlayer.file_store, ":class/:attachment/:id/:filename"),
|
35
|
+
:url => :file_url_via_run,
|
36
|
+
:default_url => ""
|
37
|
+
|
38
|
+
default_scope order("lower(name) ASC")
|
39
|
+
|
40
|
+
# If there is both a value and a file, then prefer the file. If the
|
41
|
+
# file is changed, delete the value. This must be run before
|
42
|
+
# "process_value"!
|
43
|
+
before_save :delete_value, :if => :file_file_name_changed?
|
44
|
+
|
45
|
+
# Overflow the value into a file if it is too big. Don't try to
|
46
|
+
# process the value if the file has changed. This must run after
|
47
|
+
# "delete_value"!
|
48
|
+
before_save :process_value, :if => :value_changed?,
|
49
|
+
:unless => :file_file_name_changed?
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def delete_value
|
54
|
+
self[:value] = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
# If the value is too big to fit in the database then overflow it
|
58
|
+
# into a file.
|
59
|
+
def process_value
|
60
|
+
v = self[:value]
|
61
|
+
|
62
|
+
if !v.blank? && v.size > MAXIMUM_DATABASE_VALUE_SIZE
|
63
|
+
self[:value] = v[0...MAXIMUM_DATABASE_VALUE_SIZE]
|
64
|
+
save_value_to_file(v)
|
65
|
+
else
|
66
|
+
self.file = nil unless file.path.blank?
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def save_value_to_file(v)
|
71
|
+
Dir.mktmpdir("#{id}", Rails.root.join("tmp")) do |tmp_dir|
|
72
|
+
tmp_file_name = File.join(tmp_dir, "#{name}.txt")
|
73
|
+
|
74
|
+
File.write(tmp_file_name, v.force_encoding("UTF-8"))
|
75
|
+
|
76
|
+
self.file = File.new(tmp_file_name)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end # included
|
81
|
+
|
82
|
+
def display_name
|
83
|
+
name.gsub('_', ' ')
|
84
|
+
end
|
85
|
+
|
86
|
+
def value_preview
|
87
|
+
self[:value]
|
88
|
+
end
|
89
|
+
|
90
|
+
def value
|
91
|
+
v = self[:value]
|
92
|
+
|
93
|
+
(!v.blank? && !file.path.blank?) ? File.read(file.path) : v
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -116,7 +116,7 @@ module TavernaPlayer
|
|
116
116
|
if @run.has_parent?
|
117
117
|
next if note.has_reply?
|
118
118
|
int = Interaction.find_by_run_id_and_serial(@run.parent_id, note.serial)
|
119
|
-
new_int = Interaction.
|
119
|
+
new_int = Interaction.find_or_initialize_by_run_id_and_serial(@run.id, note.serial)
|
120
120
|
if new_int.new_record?
|
121
121
|
note.reply(int.feed_reply, int.data)
|
122
122
|
new_int.displayed = true
|
@@ -127,7 +127,7 @@ module TavernaPlayer
|
|
127
127
|
end
|
128
128
|
else
|
129
129
|
waiting = true unless note.has_reply?
|
130
|
-
int = Interaction.
|
130
|
+
int = Interaction.find_or_initialize_by_run_id_and_serial(@run.id, note.serial)
|
131
131
|
|
132
132
|
# Need to catch this here in case some other process has replied.
|
133
133
|
if note.has_reply? && !int.replied?
|
data/taverna_player.gemspec
CHANGED
@@ -21,7 +21,13 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.email = ["support@mygrid.org.uk"]
|
22
22
|
s.homepage = "http://www.taverna.org.uk"
|
23
23
|
s.summary = "Taverna Player is a rails plugin to run Taverna Workflows."
|
24
|
-
s.description = "Taverna Player
|
24
|
+
s.description = "Taverna Player is a Ruby on Rails plugin to run Taverna "\
|
25
|
+
"Workflows using Taverna Server. Taverna Player surfaces a workflow in "\
|
26
|
+
"three ways: As a Web interface in the browser; As an embeddable widget "\
|
27
|
+
"to be included in any other Web page; As a REST-based Web Service. All "\
|
28
|
+
"three modes provide functionality to fully configure a workflow’s "\
|
29
|
+
"inputs; run the workflow on a Taverna Server; collect workflow outputs, "\
|
30
|
+
"logs and messages; and present the results in an appropriate manner."
|
25
31
|
s.license = "BSD"
|
26
32
|
|
27
33
|
s.files = `git ls-files`.split("\n")
|
@@ -13,23 +13,10 @@
|
|
13
13
|
# Taverna Player configuration
|
14
14
|
|
15
15
|
TavernaPlayer.setup do |config|
|
16
|
-
# This should be set to the name of the workflow model class in the main
|
17
|
-
# application and the listed methods should also be mapped if necessary.
|
18
16
|
config.workflow_model_proxy("Workflow")
|
19
|
-
|
20
17
|
config.user_model_proxy = "User"
|
21
18
|
config.current_user_callback = :user_one
|
22
19
|
|
23
|
-
# Taverna Server configuration information. The poll interval is in seconds.
|
24
|
-
config.server_address = "https://example.com:8443/tavserv"
|
25
|
-
config.server_username = "taverna"
|
26
|
-
config.server_password = "taverna"
|
27
|
-
config.server_poll_interval = 1
|
28
|
-
config.server_retry_interval = 10
|
29
|
-
|
30
|
-
# Taverna Server connection configuration.
|
31
|
-
config.server_connection[:open_timeout] = 10
|
32
|
-
|
33
20
|
# Callbacks to be run at various points during a workflow run.
|
34
21
|
require "callbacks"
|
35
22
|
|
@@ -0,0 +1,26 @@
|
|
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
|
+
# Taverna Player Server configuration
|
14
|
+
|
15
|
+
TavernaPlayer.setup do |config|
|
16
|
+
|
17
|
+
# Taverna Server configuration information. The poll interval is in seconds.
|
18
|
+
config.server_address = "https://example.com:8443/tavserv"
|
19
|
+
config.server_username = "taverna"
|
20
|
+
config.server_password = "taverna"
|
21
|
+
config.server_poll_interval = 1
|
22
|
+
config.server_retry_interval = 10
|
23
|
+
|
24
|
+
# Taverna Server connection configuration.
|
25
|
+
config.server_connection[:open_timeout] = 10
|
26
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# This migration comes from taverna_player (originally 20131126175424)
|
2
|
+
class RemoveUniqueIdFromTavernaPlayerInteractions < ActiveRecord::Migration
|
3
|
+
def up
|
4
|
+
remove_index :taverna_player_interactions, :unique_id
|
5
|
+
remove_column :taverna_player_interactions, :unique_id
|
6
|
+
end
|
7
|
+
|
8
|
+
def down
|
9
|
+
add_column :taverna_player_interactions, :unique_id, :string
|
10
|
+
add_index :taverna_player_interactions, :unique_id
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This migration comes from taverna_player (originally 20131127162157)
|
2
|
+
class AddIndexesWhereMissing < ActiveRecord::Migration
|
3
|
+
def change
|
4
|
+
add_index :taverna_player_interactions, [:run_id, :serial]
|
5
|
+
add_index :taverna_player_interactions, [:run_id, :replied]
|
6
|
+
|
7
|
+
add_index :taverna_player_run_ports, [:run_id, :name]
|
8
|
+
|
9
|
+
add_index :taverna_player_runs, :user_id
|
10
|
+
add_index :taverna_player_runs, :workflow_id
|
11
|
+
add_index :taverna_player_runs, :parent_id
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# This migration comes from taverna_player (originally 20131127163438)
|
2
|
+
class RemoveRunIdIndexFromTavernaPlayerRuns < ActiveRecord::Migration
|
3
|
+
def up
|
4
|
+
remove_index :taverna_player_runs, :run_id
|
5
|
+
end
|
6
|
+
|
7
|
+
def down
|
8
|
+
add_index :taverna_player_runs, :run_id
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# This migration comes from taverna_player (originally 20131127171823)
|
2
|
+
class RemoveUnusedPaperclipColumns < ActiveRecord::Migration
|
3
|
+
def up
|
4
|
+
remove_column :taverna_player_runs, :results_content_type
|
5
|
+
remove_column :taverna_player_runs, :results_updated_at
|
6
|
+
|
7
|
+
remove_column :taverna_player_runs, :log_content_type
|
8
|
+
remove_column :taverna_player_runs, :log_updated_at
|
9
|
+
end
|
10
|
+
|
11
|
+
def down
|
12
|
+
add_column :taverna_player_runs, :log_updated_at, :datetime
|
13
|
+
add_column :taverna_player_runs, :log_content_type, :string
|
14
|
+
|
15
|
+
add_column :taverna_player_runs, :results_updated_at, :datetime
|
16
|
+
add_column :taverna_player_runs, :results_content_type, :string
|
17
|
+
end
|
18
|
+
end
|
data/test/dummy/db/schema.rb
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:version =>
|
14
|
+
ActiveRecord::Schema.define(:version => 20131127172420) do
|
15
15
|
|
16
16
|
create_table "delayed_jobs", :force => true do |t|
|
17
17
|
t.integer "priority", :default => 0
|
@@ -35,7 +35,6 @@ ActiveRecord::Schema.define(:version => 20131114130937) do
|
|
35
35
|
t.datetime "created_at", :null => false
|
36
36
|
t.datetime "updated_at", :null => false
|
37
37
|
t.boolean "displayed", :default => false
|
38
|
-
t.string "unique_id"
|
39
38
|
t.text "page"
|
40
39
|
t.string "feed_reply"
|
41
40
|
t.text "data", :limit => 16777215
|
@@ -43,8 +42,9 @@ ActiveRecord::Schema.define(:version => 20131114130937) do
|
|
43
42
|
t.string "page_uri"
|
44
43
|
end
|
45
44
|
|
45
|
+
add_index "taverna_player_interactions", ["run_id", "replied"], :name => "index_taverna_player_interactions_on_run_id_and_replied"
|
46
|
+
add_index "taverna_player_interactions", ["run_id", "serial"], :name => "index_taverna_player_interactions_on_run_id_and_serial"
|
46
47
|
add_index "taverna_player_interactions", ["run_id"], :name => "index_taverna_player_interactions_on_run_id"
|
47
|
-
add_index "taverna_player_interactions", ["unique_id"], :name => "index_taverna_player_interactions_on_unique_id"
|
48
48
|
|
49
49
|
create_table "taverna_player_run_ports", :force => true do |t|
|
50
50
|
t.string "name"
|
@@ -61,36 +61,35 @@ ActiveRecord::Schema.define(:version => 20131114130937) do
|
|
61
61
|
t.text "metadata"
|
62
62
|
end
|
63
63
|
|
64
|
+
add_index "taverna_player_run_ports", ["run_id", "name"], :name => "index_taverna_player_run_ports_on_run_id_and_name"
|
64
65
|
add_index "taverna_player_run_ports", ["run_id"], :name => "index_taverna_player_run_ports_on_run_id"
|
65
66
|
|
66
67
|
create_table "taverna_player_runs", :force => true do |t|
|
67
68
|
t.string "run_id"
|
68
|
-
t.string "saved_state",
|
69
|
+
t.string "saved_state", :default => "pending", :null => false
|
69
70
|
t.datetime "create_time"
|
70
71
|
t.datetime "start_time"
|
71
72
|
t.datetime "finish_time"
|
72
|
-
t.integer "workflow_id",
|
73
|
-
t.datetime "created_at",
|
74
|
-
t.datetime "updated_at",
|
73
|
+
t.integer "workflow_id", :null => false
|
74
|
+
t.datetime "created_at", :null => false
|
75
|
+
t.datetime "updated_at", :null => false
|
75
76
|
t.string "status_message"
|
76
77
|
t.string "results_file_name"
|
77
|
-
t.string "results_content_type"
|
78
78
|
t.integer "results_file_size"
|
79
|
-
t.
|
80
|
-
t.boolean "
|
81
|
-
t.boolean "stop", :default => false
|
79
|
+
t.boolean "embedded", :default => false
|
80
|
+
t.boolean "stop", :default => false
|
82
81
|
t.string "log_file_name"
|
83
|
-
t.string "log_content_type"
|
84
82
|
t.integer "log_file_size"
|
85
|
-
t.
|
86
|
-
t.string "name", :default => "None"
|
83
|
+
t.string "name", :default => "None"
|
87
84
|
t.integer "delayed_job_id"
|
88
85
|
t.text "failure_message"
|
89
86
|
t.integer "parent_id"
|
90
87
|
t.integer "user_id"
|
91
88
|
end
|
92
89
|
|
93
|
-
add_index "taverna_player_runs", ["
|
90
|
+
add_index "taverna_player_runs", ["parent_id"], :name => "index_taverna_player_runs_on_parent_id"
|
91
|
+
add_index "taverna_player_runs", ["user_id"], :name => "index_taverna_player_runs_on_user_id"
|
92
|
+
add_index "taverna_player_runs", ["workflow_id"], :name => "index_taverna_player_runs_on_workflow_id"
|
94
93
|
|
95
94
|
create_table "taverna_player_service_credentials", :force => true do |t|
|
96
95
|
t.string "uri", :null => false
|
@@ -11,21 +11,18 @@
|
|
11
11
|
#------------------------------------------------------------------------------
|
12
12
|
|
13
13
|
one:
|
14
|
-
unique_id: b6d0dad1-ef0a-436a-bd16-62f3fe767801
|
15
14
|
serial: ask0
|
16
15
|
replied: false
|
17
16
|
displayed: false
|
18
17
|
run_id: 4
|
19
18
|
|
20
19
|
two:
|
21
|
-
unique_id: 602f98fc-f1b7-4fbd-9ee3-d4aa001492bb
|
22
20
|
serial: Nested_workflow:Interaction0
|
23
21
|
replied: true
|
24
22
|
displayed: true
|
25
23
|
run_id: 3
|
26
24
|
|
27
25
|
three:
|
28
|
-
unique_id: 101d727f-31cf-4601-8c3c-9d936b9e6c5e
|
29
26
|
serial: Nested_workflow:Interaction0
|
30
27
|
replied: false
|
31
28
|
displayed: true
|
@@ -64,16 +64,16 @@ module TavernaPlayer
|
|
64
64
|
|
65
65
|
test "should route to interaction write proxy" do
|
66
66
|
assert_routing({ :method => "post",
|
67
|
-
:path => "/runs/1/interaction/#{@int.
|
67
|
+
:path => "/runs/1/interaction/#{@int.serial}" },
|
68
68
|
{ :controller => "taverna_player/runs", :action => "write_interaction",
|
69
|
-
:id => "1", :
|
69
|
+
:id => "1", :serial => @int.serial }, {}, {},
|
70
70
|
"Did not route correctly")
|
71
71
|
end
|
72
72
|
|
73
73
|
test "should route to interaction read proxy" do
|
74
|
-
assert_routing "/runs/1/interaction/#{@int.
|
74
|
+
assert_routing "/runs/1/interaction/#{@int.serial}",
|
75
75
|
{ :controller => "taverna_player/runs", :action => "read_interaction",
|
76
|
-
:id => "1", :
|
76
|
+
:id => "1", :serial => @int.serial, }, {}, {},
|
77
77
|
"Did not route correctly"
|
78
78
|
end
|
79
79
|
|
@@ -14,21 +14,13 @@ require 'test_helper'
|
|
14
14
|
|
15
15
|
module TavernaPlayer
|
16
16
|
class InteractionTest < ActiveSupport::TestCase
|
17
|
-
test "should not save interaction without a unique_id" do
|
18
|
-
int = Interaction.new
|
19
|
-
int.serial = "ask0"
|
20
|
-
refute int.save, "Saved the interaction without a unique_id"
|
21
|
-
end
|
22
|
-
|
23
17
|
test "should not save interaction without a serial number" do
|
24
18
|
int = Interaction.new
|
25
|
-
int.unique_id = "af19046f-4614-44a7-ad83-f940cea63c4a"
|
26
19
|
refute int.save, "Saved the interaction without a serial number"
|
27
20
|
end
|
28
21
|
|
29
22
|
test "should not allow two identical serial numbers for the same run" do
|
30
23
|
int = Interaction.new
|
31
|
-
int.unique_id = "fdb30aed-96ac-4499-b8b6-0a11cf82ccee"
|
32
24
|
int.serial = "ask0"
|
33
25
|
int.run_id = 4
|
34
26
|
refute int.save, "Saved the interaction with a non-unique serial number"
|
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.2.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-11-
|
12
|
+
date: 2013-11-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -219,7 +219,12 @@ dependencies:
|
|
219
219
|
- - ! '>='
|
220
220
|
- !ruby/object:Gem::Version
|
221
221
|
version: '0'
|
222
|
-
description: Taverna Player
|
222
|
+
description: ! 'Taverna Player is a Ruby on Rails plugin to run Taverna Workflows
|
223
|
+
using Taverna Server. Taverna Player surfaces a workflow in three ways: As a Web
|
224
|
+
interface in the browser; As an embeddable widget to be included in any other Web
|
225
|
+
page; As a REST-based Web Service. All three modes provide functionality to fully
|
226
|
+
configure a workflow’s inputs; run the workflow on a Taverna Server; collect workflow
|
227
|
+
outputs, logs and messages; and present the results in an appropriate manner.'
|
223
228
|
email:
|
224
229
|
- support@mygrid.org.uk
|
225
230
|
executables: []
|
@@ -227,6 +232,7 @@ extensions: []
|
|
227
232
|
extra_rdoc_files: []
|
228
233
|
files:
|
229
234
|
- .gitignore
|
235
|
+
- CHANGES.rdoc
|
230
236
|
- Gemfile
|
231
237
|
- LICENCE.rdoc
|
232
238
|
- README.rdoc
|
@@ -300,6 +306,10 @@ files:
|
|
300
306
|
- db/migrate/20131105115218_remove_proxy_from_taverna_player_runs.rb
|
301
307
|
- db/migrate/20131105141934_change_taverna_player_interactions_output_value_column_name.rb
|
302
308
|
- db/migrate/20131112165520_add_user_to_taverna_player_run.rb
|
309
|
+
- db/migrate/20131126175424_remove_unique_id_from_taverna_player_interactions.rb
|
310
|
+
- db/migrate/20131127162157_add_indexes_where_missing.rb
|
311
|
+
- db/migrate/20131127163438_remove_run_id_index_from_taverna_player_runs.rb
|
312
|
+
- db/migrate/20131127171823_remove_unused_paperclip_columns.rb
|
303
313
|
- lib/generators/taverna_player/callbacks_generator.rb
|
304
314
|
- lib/generators/taverna_player/controllers_generator.rb
|
305
315
|
- lib/generators/taverna_player/install_generator.rb
|
@@ -312,14 +322,21 @@ files:
|
|
312
322
|
- lib/generators/templates/callbacks/worker_callbacks.rb
|
313
323
|
- lib/generators/templates/controllers/runs_controller.rb
|
314
324
|
- lib/generators/templates/controllers/service_credentials_controller.rb
|
315
|
-
- lib/generators/templates/
|
325
|
+
- lib/generators/templates/models/input.rb
|
326
|
+
- lib/generators/templates/models/output.rb
|
316
327
|
- lib/generators/templates/models/run.rb
|
328
|
+
- lib/generators/templates/models/run_port.rb
|
329
|
+
- lib/generators/templates/player_initializer.rb
|
330
|
+
- lib/generators/templates/server_initializer.rb
|
317
331
|
- lib/tasks/delete-cancelled-runs.rake
|
318
332
|
- lib/tasks/delete-old-embedded-runs.rake
|
319
333
|
- lib/taverna-player.rb
|
320
334
|
- lib/taverna_player/concerns/controllers/runs_controller.rb
|
321
335
|
- lib/taverna_player/concerns/controllers/service_credentials_controller.rb
|
336
|
+
- lib/taverna_player/concerns/models/input_port.rb
|
337
|
+
- lib/taverna_player/concerns/models/output_port.rb
|
322
338
|
- lib/taverna_player/concerns/models/run.rb
|
339
|
+
- lib/taverna_player/concerns/models/run_port.rb
|
323
340
|
- lib/taverna_player/engine.rb
|
324
341
|
- lib/taverna_player/model_proxy.rb
|
325
342
|
- lib/taverna_player/output_renderer.rb
|
@@ -355,7 +372,8 @@ files:
|
|
355
372
|
- test/dummy/config/initializers/mime_types.rb
|
356
373
|
- test/dummy/config/initializers/secret_token.rb
|
357
374
|
- test/dummy/config/initializers/session_store.rb
|
358
|
-
- test/dummy/config/initializers/taverna_player.
|
375
|
+
- test/dummy/config/initializers/taverna_player.rb
|
376
|
+
- test/dummy/config/initializers/taverna_server.example.rb
|
359
377
|
- test/dummy/config/initializers/wrap_parameters.rb
|
360
378
|
- test/dummy/config/locales/en.yml
|
361
379
|
- test/dummy/config/routes.rb
|
@@ -386,6 +404,10 @@ files:
|
|
386
404
|
- test/dummy/db/migrate/20131105142417_change_taverna_player_interactions_output_value_column_name.taverna_player.rb
|
387
405
|
- test/dummy/db/migrate/20131112165815_add_user_to_taverna_player_run.taverna_player.rb
|
388
406
|
- test/dummy/db/migrate/20131114130937_create_users.rb
|
407
|
+
- test/dummy/db/migrate/20131126175640_remove_unique_id_from_taverna_player_interactions.taverna_player.rb
|
408
|
+
- test/dummy/db/migrate/20131127163538_add_indexes_where_missing.taverna_player.rb
|
409
|
+
- test/dummy/db/migrate/20131127163539_remove_run_id_index_from_taverna_player_runs.taverna_player.rb
|
410
|
+
- test/dummy/db/migrate/20131127172420_remove_unused_paperclip_columns.taverna_player.rb
|
389
411
|
- test/dummy/db/schema.rb
|
390
412
|
- test/dummy/lib/callbacks.rb
|
391
413
|
- test/dummy/log/.gitkeep
|
@@ -432,7 +454,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
432
454
|
version: '0'
|
433
455
|
segments:
|
434
456
|
- 0
|
435
|
-
hash:
|
457
|
+
hash: 4535908520263145975
|
436
458
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
437
459
|
none: false
|
438
460
|
requirements:
|
@@ -441,7 +463,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
441
463
|
version: '0'
|
442
464
|
segments:
|
443
465
|
- 0
|
444
|
-
hash:
|
466
|
+
hash: 4535908520263145975
|
445
467
|
requirements: []
|
446
468
|
rubyforge_project:
|
447
469
|
rubygems_version: 1.8.21
|
@@ -475,7 +497,8 @@ test_files:
|
|
475
497
|
- test/dummy/config/initializers/mime_types.rb
|
476
498
|
- test/dummy/config/initializers/secret_token.rb
|
477
499
|
- test/dummy/config/initializers/session_store.rb
|
478
|
-
- test/dummy/config/initializers/taverna_player.
|
500
|
+
- test/dummy/config/initializers/taverna_player.rb
|
501
|
+
- test/dummy/config/initializers/taverna_server.example.rb
|
479
502
|
- test/dummy/config/initializers/wrap_parameters.rb
|
480
503
|
- test/dummy/config/locales/en.yml
|
481
504
|
- test/dummy/config/routes.rb
|
@@ -506,6 +529,10 @@ test_files:
|
|
506
529
|
- test/dummy/db/migrate/20131105142417_change_taverna_player_interactions_output_value_column_name.taverna_player.rb
|
507
530
|
- test/dummy/db/migrate/20131112165815_add_user_to_taverna_player_run.taverna_player.rb
|
508
531
|
- test/dummy/db/migrate/20131114130937_create_users.rb
|
532
|
+
- test/dummy/db/migrate/20131126175640_remove_unique_id_from_taverna_player_interactions.taverna_player.rb
|
533
|
+
- test/dummy/db/migrate/20131127163538_add_indexes_where_missing.taverna_player.rb
|
534
|
+
- test/dummy/db/migrate/20131127163539_remove_run_id_index_from_taverna_player_runs.taverna_player.rb
|
535
|
+
- test/dummy/db/migrate/20131127172420_remove_unused_paperclip_columns.taverna_player.rb
|
509
536
|
- test/dummy/db/schema.rb
|
510
537
|
- test/dummy/lib/callbacks.rb
|
511
538
|
- test/dummy/log/.gitkeep
|