[ARVADOS] updated: 4898ba78d5cc0783a319f0742bb8bc0b4c15d7be
git at public.curoverse.com
git at public.curoverse.com
Sat Jul 26 17:08:48 EDT 2014
Summary of changes:
.../app/assets/javascripts/select_modal.js | 9 +++++++--
.../app/assets/stylesheets/select_modal.css.scss | 3 +++
.../app/controllers/application_controller.rb | 5 ++++-
.../workbench/app/controllers/search_controller.rb | 6 ++++++
apps/workbench/app/helpers/application_helper.rb | 9 +++++++++
apps/workbench/app/models/group.rb | 9 +++++++++
.../app/views/collections/_choose_rows.html.erb | 2 +-
.../app/views/layouts/application.html.erb | 4 +++-
.../app/views/search/_choose_rows.html.erb | 22 ++++++++++++++++++++++
apps/workbench/config/routes.rb | 3 +++
.../search_controller_test.rb} | 2 +-
apps/workbench/test/helpers/search_helper_test.rb | 4 ++++
.../controllers/arvados/v1/groups_controller.rb | 15 +++++++++------
services/api/config/routes.rb | 1 +
.../arvados/v1/groups_controller_test.rb | 20 ++++++++++++++++++++
15 files changed, 102 insertions(+), 12 deletions(-)
create mode 100644 apps/workbench/app/controllers/search_controller.rb
create mode 100644 apps/workbench/app/views/search/_choose_rows.html.erb
copy apps/workbench/test/{unit/job_test.rb => controllers/search_controller_test.rb} (57%)
create mode 100644 apps/workbench/test/helpers/search_helper_test.rb
via 4898ba78d5cc0783a319f0742bb8bc0b4c15d7be (commit)
via e6e3c231b08a8f9786ea04c948f79c45604da1cc (commit)
via 32b276821cd06f6d97fbc29d91b7bc786342bf91 (commit)
from e32805af332dfdbb973979482e25bc5466236821 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit 4898ba78d5cc0783a319f0742bb8bc0b4c15d7be
Author: Tom Clegg <tom at curoverse.com>
Date: Sat Jul 26 17:08:45 2014 -0400
3235: Show multiple object types in top-nav Search modal.
diff --git a/apps/workbench/app/assets/javascripts/select_modal.js b/apps/workbench/app/assets/javascripts/select_modal.js
index cd23556..fe9132d 100644
--- a/apps/workbench/app/assets/javascripts/select_modal.js
+++ b/apps/workbench/app/assets/javascripts/select_modal.js
@@ -16,14 +16,19 @@ $(document).on('click', '.selectable', function() {
prop('disabled', !any);
if ($this.hasClass('active')) {
+ var no_preview_available = '<div class="spinner-h-center spinner-v-center"><center>(No preview available)</center></div>';
+ if (!$this.attr('data-preview-href')) {
+ $(".modal-dialog-preview-pane").html(no_preview_available);
+ return;
+ }
$(".modal-dialog-preview-pane").html('<div class="spinner spinner-32px spinner-h-center spinner-v-center"></div>');
$.ajax($this.attr('data-preview-href'),
{dataType: "html"}).
- done(function(data, status, jqxhr) {
+ done(function(data, status, jqxhr) {
$(".modal-dialog-preview-pane").html(data);
}).
fail(function(data, status, jqxhr) {
- $(".modal-dialog-preview-pane").text('Preview load failed.');
+ $(".modal-dialog-preview-pane").html(no_preview_available);
});
}
diff --git a/apps/workbench/app/assets/stylesheets/select_modal.css.scss b/apps/workbench/app/assets/stylesheets/select_modal.css.scss
index 0901769..4295f30 100644
--- a/apps/workbench/app/assets/stylesheets/select_modal.css.scss
+++ b/apps/workbench/app/assets/stylesheets/select_modal.css.scss
@@ -14,3 +14,6 @@
background: #428bca;
color: #fff;
}
+.selectable-container > .row.class-separator {
+ background: #ddd;
+}
diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb
index c32bac4..83cb261 100644
--- a/apps/workbench/app/controllers/application_controller.rb
+++ b/apps/workbench/app/controllers/application_controller.rb
@@ -14,6 +14,7 @@ class ApplicationController < ActionController::Base
around_filter :require_thread_api_token, except: ERROR_ACTIONS
before_filter :check_user_agreements, except: ERROR_ACTIONS
before_filter :check_user_notifications, except: ERROR_ACTIONS
+ before_filter :load_filters_and_paging_params, except: ERROR_ACTIONS
before_filter :find_object_by_uuid, except: [:index, :choose] + ERROR_ACTIONS
theme :select_theme
@@ -86,7 +87,7 @@ class ApplicationController < ActionController::Base
end
end
- def find_objects_for_index
+ def load_filters_and_paging_params
@limit ||= 200
if params[:limit]
@limit = params[:limit].to_i
@@ -105,7 +106,9 @@ class ApplicationController < ActionController::Base
end
@filters += filters
end
+ end
+ def find_objects_for_index
@objects ||= model_class
@objects = @objects.filter(@filters).limit(@limit).offset(@offset)
end
diff --git a/apps/workbench/app/controllers/search_controller.rb b/apps/workbench/app/controllers/search_controller.rb
new file mode 100644
index 0000000..510ba6f
--- /dev/null
+++ b/apps/workbench/app/controllers/search_controller.rb
@@ -0,0 +1,6 @@
+class SearchController < ApplicationController
+ def find_objects_for_index
+ @objects = Group.contents(limit: @limit, offset: @offset, filters: @filters)
+ super
+ end
+end
diff --git a/apps/workbench/app/helpers/application_helper.rb b/apps/workbench/app/helpers/application_helper.rb
index c3856c2..1b186c5 100644
--- a/apps/workbench/app/helpers/application_helper.rb
+++ b/apps/workbench/app/helpers/application_helper.rb
@@ -428,4 +428,13 @@ module ApplicationHelper
RESOURCE_CLASS_ICONS.fetch(class_name, default)
end
end
+
+ def chooser_preview_url_for object
+ case object.class.to_s
+ when 'Collection'
+ polymorphic_path(object, tab_pane: 'chooser_preview')
+ else
+ nil
+ end
+ end
end
diff --git a/apps/workbench/app/models/group.rb b/apps/workbench/app/models/group.rb
index 9e627bf..30488c3 100644
--- a/apps/workbench/app/models/group.rb
+++ b/apps/workbench/app/models/group.rb
@@ -3,6 +3,15 @@ class Group < ArvadosBase
true
end
+ def self.contents params={}
+ res = arvados_api_client.api self, "/contents", {
+ _method: 'GET'
+ }.merge(params)
+ ret = ArvadosResourceList.new
+ ret.results = arvados_api_client.unpack_api_response(res)
+ ret
+ end
+
def contents params={}
res = arvados_api_client.api self.class, "/#{self.uuid}/contents", {
_method: 'GET'
diff --git a/apps/workbench/app/views/collections/_choose_rows.html.erb b/apps/workbench/app/views/collections/_choose_rows.html.erb
index d87f56f..ab7e7ac 100644
--- a/apps/workbench/app/views/collections/_choose_rows.html.erb
+++ b/apps/workbench/app/views/collections/_choose_rows.html.erb
@@ -1,7 +1,7 @@
<% @name_links.each do |name_link| %>
<% if (object = get_object(name_link.head_uuid)) %>
<div class="row filterable selectable <%= 'multiple' if multiple %>" data-object-uuid="<%= name_link.uuid %>"
- data-preview-href="<%= url_for object %>?tab_pane=chooser_preview"
+ data-preview-href="<%= chooser_preview_url_for object %>"
style="margin-left: 1em; border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: #DDDDDD">
<i class="fa fa-fw fa-archive"></i>
<%= name_link.name %>
diff --git a/apps/workbench/app/views/layouts/application.html.erb b/apps/workbench/app/views/layouts/application.html.erb
index 2418489..715acf9 100644
--- a/apps/workbench/app/views/layouts/application.html.erb
+++ b/apps/workbench/app/views/layouts/application.html.erb
@@ -75,7 +75,9 @@
-->
<li>
- <%= link_to(choose_collections_path(
+ <%= link_to(url_for(
+ action: 'choose',
+ controller: 'search',
title: 'Search',
action_name: 'Show',
action_href: url_for(controller: :actions, action: :show),
diff --git a/apps/workbench/app/views/search/_choose_rows.html.erb b/apps/workbench/app/views/search/_choose_rows.html.erb
new file mode 100644
index 0000000..53b0d7e
--- /dev/null
+++ b/apps/workbench/app/views/search/_choose_rows.html.erb
@@ -0,0 +1,22 @@
+<% current_class = nil %>
+<% @objects.each do |object| %>
+ <% icon_class = fa_icon_class_for_class(object.class) %>
+ <% if object.class != current_class %>
+ <% current_class = object.class %>
+ <div class="row class-separator">
+ <div class="col-sm-12">
+ <%= object.class_for_display.pluralize.downcase %>
+ </div>
+ </div>
+ <% end %>
+ <div class="row filterable selectable <%= 'multiple' if multiple %>" data-object-uuid="<%= object.uuid %>" data-preview-href="<%= chooser_preview_url_for object %>">
+ <div class="col-sm-12" style="overflow-x:hidden; white-space: nowrap">
+ <i class="fa fa-fw <%= icon_class %>"></i>
+ <% if object.respond_to?(:name) and object.name and object.name.length > 0 %>
+ <%= object.name %>
+ <% else %>
+ unnamed - <span class="arvados-uuid"><%= object.uuid %></span>
+ <% end %>
+ </div>
+ </div>
+<% end %>
diff --git a/apps/workbench/config/routes.rb b/apps/workbench/config/routes.rb
index f3aa384..fe6200b 100644
--- a/apps/workbench/config/routes.rb
+++ b/apps/workbench/config/routes.rb
@@ -66,6 +66,9 @@ ArvadosWorkbench::Application.routes.draw do
get 'choose', on: :collection
post 'share_with', on: :member
end
+ resources :search do
+ get 'choose', :on => :collection
+ end
post 'actions' => 'actions#post'
get 'actions' => 'actions#show'
diff --git a/apps/workbench/test/controllers/search_controller_test.rb b/apps/workbench/test/controllers/search_controller_test.rb
new file mode 100644
index 0000000..bfbf22d
--- /dev/null
+++ b/apps/workbench/test/controllers/search_controller_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class SearchControllerTest < ActionController::TestCase
+ # test "the truth" do
+ # assert true
+ # end
+end
diff --git a/apps/workbench/test/helpers/search_helper_test.rb b/apps/workbench/test/helpers/search_helper_test.rb
new file mode 100644
index 0000000..3034163
--- /dev/null
+++ b/apps/workbench/test/helpers/search_helper_test.rb
@@ -0,0 +1,4 @@
+require 'test_helper'
+
+class SearchHelperTest < ActionView::TestCase
+end
commit e6e3c231b08a8f9786ea04c948f79c45604da1cc
Author: Tom Clegg <tom at curoverse.com>
Date: Fri Jul 25 13:49:27 2014 -0400
3235: Add test case.
diff --git a/services/api/app/controllers/arvados/v1/groups_controller.rb b/services/api/app/controllers/arvados/v1/groups_controller.rb
index bb74b90..98acbef 100644
--- a/services/api/app/controllers/arvados/v1/groups_controller.rb
+++ b/services/api/app/controllers/arvados/v1/groups_controller.rb
@@ -22,11 +22,13 @@ class Arvados::V1::GroupsController < ApplicationController
# Set @objects:
load_searchable_objects(owner_uuid: @object.andand.uuid, include_linked: params[:include_linked])
- @links = Link.where('link_class=? and tail_uuid=?'\
- ' and head_uuid in (?)',
- 'name',
- @object.uuid,
- @objects.collect(&:uuid))
+ sql = 'link_class=? and head_uuid in (?)'
+ sql_params = ['name', @objects.collect(&:uuid)]
+ if @object
+ sql += ' and tail_uuid=?'
+ sql_params << @object.uuid
+ end
+ @links = Link.where sql, *sql_params
@object_list = {
:kind => "arvados#objectList",
:etag => "",
diff --git a/services/api/config/routes.rb b/services/api/config/routes.rb
index 7093455..74d2aea 100644
--- a/services/api/config/routes.rb
+++ b/services/api/config/routes.rb
@@ -15,6 +15,7 @@ Server::Application.routes.draw do
get 'used_by', on: :member
end
resources :groups do
+ get 'contents', on: :collection
get 'contents', on: :member
end
resources :humans
diff --git a/services/api/test/functional/arvados/v1/groups_controller_test.rb b/services/api/test/functional/arvados/v1/groups_controller_test.rb
index 0b76029..176e8e1 100644
--- a/services/api/test/functional/arvados/v1/groups_controller_test.rb
+++ b/services/api/test/functional/arvados/v1/groups_controller_test.rb
@@ -83,6 +83,26 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase
check_project_contents_response
end
+ test 'list objects across multiple projects' do
+ authorize_with :project_viewer
+ get :contents, {
+ format: :json,
+ include_linked: false,
+ filters: [['uuid', 'is_a', 'arvados#specimen']]
+ }
+ assert_response :success
+ found_uuids = json_response['items'].collect { |i| i['uuid'] }
+ [[:in_aproject, true],
+ [:in_asubproject, true],
+ [:owned_by_private_group, false]].each do |specimen_fixture, should_find|
+ if should_find
+ assert_includes found_uuids, specimens(specimen_fixture).uuid, "did not find specimen fixture '#{specimen_fixture}'"
+ else
+ refute_includes found_uuids, specimens(specimen_fixture).uuid, "found specimen fixture '#{specimen_fixture}'"
+ end
+ end
+ end
+
# Even though the project_viewer tests go through other controllers,
# I'm putting them here so they're easy to find alongside the other
# project tests.
commit 32b276821cd06f6d97fbc29d91b7bc786342bf91
Author: Tom Clegg <tom at curoverse.com>
Date: Thu Jul 24 22:10:30 2014 -0400
3235: Fix SQL query.
diff --git a/services/api/app/controllers/arvados/v1/groups_controller.rb b/services/api/app/controllers/arvados/v1/groups_controller.rb
index d69cd6c..bb74b90 100644
--- a/services/api/app/controllers/arvados/v1/groups_controller.rb
+++ b/services/api/app/controllers/arvados/v1/groups_controller.rb
@@ -65,9 +65,10 @@ class Arvados::V1::GroupsController < ApplicationController
cond_params << opts[:owner_uuid]
end
if opts[:include_linked]
- conds << " OR #{klass.table_name}.uuid IN (SELECT head_uuid FROM links WHERE link_class=#{klass.sanitize 'name'} AND links.tail_uuid=#{klass.sanitize @object.uuid})"
+ conds << "#{klass.table_name}.uuid IN (SELECT head_uuid FROM links WHERE link_class=#{klass.sanitize 'name'} AND links.tail_uuid=#{klass.sanitize @object.uuid})"
end
if conds.any?
+ cond_sql = '(' + conds.join(') OR (') + ')'
@objects = @objects.where(cond_sql, *cond_params)
end
@objects = @objects.order("#{klass.table_name}.uuid")
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list