[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