taverna-player 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|