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.
Files changed (42) hide show
  1. data/.gitignore +1 -1
  2. data/CHANGES.rdoc +18 -0
  3. data/README.rdoc +9 -6
  4. data/Rakefile +1 -0
  5. data/app/helpers/taverna_player/runs_helper.rb +1 -1
  6. data/app/models/taverna_player/interaction.rb +3 -4
  7. data/app/models/taverna_player/run_port.rb +25 -97
  8. data/app/views/taverna_player/runs/_interaction.html.erb +1 -1
  9. data/app/views/taverna_player/runs/show.json.jbuilder +0 -1
  10. data/config/routes.rb +2 -2
  11. data/db/migrate/20131126175424_remove_unique_id_from_taverna_player_interactions.rb +11 -0
  12. data/db/migrate/20131127162157_add_indexes_where_missing.rb +12 -0
  13. data/db/migrate/20131127163438_remove_run_id_index_from_taverna_player_runs.rb +9 -0
  14. data/db/migrate/20131127171823_remove_unused_paperclip_columns.rb +17 -0
  15. data/lib/generators/taverna_player/install_generator.rb +7 -4
  16. data/lib/generators/taverna_player/models_generator.rb +3 -2
  17. data/lib/generators/templates/ReadMe.txt +10 -5
  18. data/lib/generators/templates/models/input.rb +20 -0
  19. data/lib/generators/templates/models/output.rb +20 -0
  20. data/lib/generators/templates/models/run_port.rb +20 -0
  21. data/lib/generators/templates/{initializer.rb → player_initializer.rb} +0 -20
  22. data/lib/generators/templates/server_initializer.rb +24 -0
  23. data/lib/taverna_player/concerns/controllers/runs_controller.rb +1 -1
  24. data/lib/taverna_player/concerns/models/input_port.rb +34 -0
  25. data/lib/taverna_player/concerns/models/output_port.rb +34 -0
  26. data/lib/taverna_player/concerns/models/run.rb +7 -5
  27. data/lib/taverna_player/concerns/models/run_port.rb +99 -0
  28. data/lib/taverna_player/version.rb +1 -1
  29. data/lib/taverna_player/worker.rb +2 -2
  30. data/taverna_player.gemspec +7 -1
  31. data/test/dummy/config/initializers/{taverna_player.example.rb → taverna_player.rb} +0 -13
  32. data/test/dummy/config/initializers/taverna_server.example.rb +26 -0
  33. data/test/dummy/db/migrate/20131126175640_remove_unique_id_from_taverna_player_interactions.taverna_player.rb +12 -0
  34. data/test/dummy/db/migrate/20131127163538_add_indexes_where_missing.taverna_player.rb +13 -0
  35. data/test/dummy/db/migrate/20131127163539_remove_run_id_index_from_taverna_player_runs.taverna_player.rb +10 -0
  36. data/test/dummy/db/migrate/20131127172420_remove_unused_paperclip_columns.taverna_player.rb +18 -0
  37. data/test/dummy/db/schema.rb +14 -15
  38. data/test/fixtures/taverna_player/interactions.yml +0 -3
  39. data/test/fixtures/taverna_player/run_ports.yml +1 -0
  40. data/test/functional/taverna_player/runs_controller_test.rb +4 -4
  41. data/test/unit/taverna_player/interaction_test.rb +0 -8
  42. metadata +35 -8
data/.gitignore CHANGED
@@ -7,7 +7,7 @@ test/dummy/log/*.log
7
7
  test/dummy/tmp/
8
8
  test/dummy/.sass-cache
9
9
  test/dummy/public/system/
10
- test/dummy/config/initializers/taverna_player.rb
10
+ test/dummy/config/initializers/taverna_server.rb
11
11
 
12
12
  *~
13
13
  rdoc/
@@ -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>..
@@ -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 an initializer (into your application's
41
- <tt>config/initializers</tt> directory) which describes all of Taverna Player's
42
- configuration options and there are some things that MUST be configured before
43
- it will work - see below for more information. The install generator also
44
- prints out a list of other steps for setting up Taverna Player; these are
45
- repeated and detailed below.
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
@@ -32,6 +32,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
32
32
  rdoc.options << "--tab-width=2"
33
33
 
34
34
  files = [
35
+ "CHANGES.rdoc",
35
36
  "README.rdoc",
36
37
  "LICENCE.rdoc",
37
38
  "app/helpers/taverna_player/application_helper.rb",
@@ -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.unique_id}"
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, :unique_id
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
- MAXIMUM_DATABASE_VALUE_SIZE = 255 # :nodoc:
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 output port in a Hash. For a
140
- # list output it might look like this:
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.unique_id}" %>', status, results);
23
+ interaction_reply('<%= "#{run_url(run)}/interaction/#{interaction.serial}" %>', status, results);
24
24
  return "OK";
25
25
  }
26
26
  });
@@ -18,7 +18,6 @@ end
18
18
 
19
19
  unless @interaction.nil?
20
20
  json.interaction do
21
- json.id @interaction.unique_id
22
21
  json.serial @interaction.serial
23
22
  json.uri interaction_redirect(@interaction)
24
23
  end
@@ -24,8 +24,8 @@ TavernaPlayer::Engine.routes.draw do
24
24
  end
25
25
 
26
26
  scope "interaction" do
27
- get ":int_id", :action => "read_interaction"
28
- post ":int_id", :action => "write_interaction"
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,9 @@
1
+ class RemoveRunIdIndexFromTavernaPlayerRuns < ActiveRecord::Migration
2
+ def up
3
+ remove_index :taverna_player_runs, :run_id
4
+ end
5
+
6
+ def down
7
+ add_index :taverna_player_runs, :run_id
8
+ end
9
+ 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 a Taverna Player initializer"
18
+ desc "Creates Taverna Player initializers"
19
19
 
20
- def copy_initializer
21
- copy_file "initializer.rb",
22
- "config/initializers/taverna_player.rb.example"
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
- copy_file "run.rb",
23
- "app/models/taverna_player/run.rb"
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
- An example initializer has been installed to:
4
+ Two initializers have been installed to:
5
5
 
6
- config/initializers/taverna_player.rb.example
6
+ config/initializers/taverna_player.rb
7
+ config/initializers/taverna_server.example.rb
7
8
 
8
- Please look through this file and make any alterations as required. BEFORE you
9
- configure the Taverna Server URI and login information copy this file to:
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/taverna_player.rb
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
@@ -66,7 +66,7 @@ module TavernaPlayer
66
66
  end
67
67
 
68
68
  def find_interaction
69
- @interaction = Interaction.find_by_unique_id(params[:int_id])
69
+ @interaction = Interaction.find_by_run_id_and_serial(@run.id, params[:serial])
70
70
  end
71
71
 
72
72
  # Read the data from the results zip file.
@@ -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", :dependent => :nullify
45
- belongs_to :parent, :class_name => "TavernaPlayer::Run"
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
@@ -11,5 +11,5 @@
11
11
  #------------------------------------------------------------------------------
12
12
 
13
13
  module TavernaPlayer
14
- VERSION = "0.1.0"
14
+ VERSION = "0.2.0"
15
15
  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.find_or_initialize_by_run_id_and_unique_id_and_serial(@run.id, note.id, note.serial)
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.find_or_initialize_by_run_id_and_unique_id_and_serial(@run.id, note.id, note.serial)
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?
@@ -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 runs Taverna Workflows using Taverna Server."
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
@@ -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 => 20131114130937) do
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", :default => "pending", :null => false
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", :null => false
73
- t.datetime "created_at", :null => false
74
- t.datetime "updated_at", :null => false
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.datetime "results_updated_at"
80
- t.boolean "embedded", :default => false
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.datetime "log_updated_at"
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", ["run_id"], :name => "index_taverna_player_runs_on_run_id"
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
@@ -34,6 +34,7 @@ three:
34
34
  port_type: TavernaPlayer::RunPort::Input
35
35
  run_id: 3
36
36
  depth: 0
37
+ metadata: "---\n:size: 3\n:type: text/plain"
37
38
 
38
39
  four:
39
40
  id: 4
@@ -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.unique_id}" },
67
+ :path => "/runs/1/interaction/#{@int.serial}" },
68
68
  { :controller => "taverna_player/runs", :action => "write_interaction",
69
- :id => "1", :int_id => @int.unique_id }, {}, {},
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.unique_id}",
74
+ assert_routing "/runs/1/interaction/#{@int.serial}",
75
75
  { :controller => "taverna_player/runs", :action => "read_interaction",
76
- :id => "1", :int_id => @int.unique_id, }, {}, {},
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.1.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-25 00:00:00.000000000 Z
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 runs Taverna Workflows using Taverna Server.
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/initializer.rb
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.example.rb
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: -3245351155395870817
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: -3245351155395870817
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.example.rb
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