[ARVADOS] created: ded1246fd796ae2065cf52a8a95cd8a770a5bf46

git at public.curoverse.com git at public.curoverse.com
Wed Feb 26 05:40:58 EST 2014


        at  ded1246fd796ae2065cf52a8a95cd8a770a5bf46 (commit)


commit ded1246fd796ae2065cf52a8a95cd8a770a5bf46
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Feb 26 02:40:16 2014 -0800

    Return empty set when search cannot match anything, and drop obsolete
    test for "name" column.

diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb
index 34a22aa..183eb0c 100644
--- a/services/api/app/controllers/application_controller.rb
+++ b/services/api/app/controllers/application_controller.rb
@@ -126,8 +126,7 @@ class ApplicationController < ActionController::Base
         if attr == :any
           if value.is_a?(Array) and
               value.length == 2 and
-              value[0] == 'contains' and
-              model_class.columns.collect(&:name).index('name') then
+              value[0] == 'contains' then
             ilikes = []
             model_class.searchable_columns.each do |column|
               ilikes << "#{table_name}.#{column} ilike ?"
@@ -135,6 +134,8 @@ class ApplicationController < ActionController::Base
             end
             if ilikes.any?
               conditions[0] << ' and (' + ilikes.join(' or ') + ')'
+            else
+              conditions[0] << ' and 0=1'
             end
           end
         elsif attr.to_s.match(/^[a-z][_a-z0-9]+$/) and

commit e753866a6355fa443e7592a45e55fdd6bdda7313
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Feb 26 02:37:47 2014 -0800

    Fix up search form and results page.

diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb
index e94428e..b3d5643 100644
--- a/apps/workbench/app/controllers/application_controller.rb
+++ b/apps/workbench/app/controllers/application_controller.rb
@@ -145,6 +145,14 @@ class ApplicationController < ActionController::Base
     controller_name.classify.constantize
   end
 
+  def attributes_for_display
+    @objects.first.attributes_for_display.collect { |k,v| k }
+  end
+
+  def breadcrumb_controller_name
+    model_class.to_s.pluralize.underscore.gsub('_', ' ')
+  end
+
   def breadcrumb_page_name
     (@breadcrumb_page_name ||
      (@object.friendly_link_name if @object.respond_to? :friendly_link_name))
diff --git a/apps/workbench/app/controllers/related_objects_controller.rb b/apps/workbench/app/controllers/related_objects_controller.rb
index 870cb58..678d6fc 100644
--- a/apps/workbench/app/controllers/related_objects_controller.rb
+++ b/apps/workbench/app/controllers/related_objects_controller.rb
@@ -4,12 +4,49 @@ class RelatedObjectsController < ApplicationController
     Collection
   end
 
+  def breadcrumb_controller_name
+    'search'
+  end
+
   def index
-    @related_objs = {}
-    if params[:q].andand.length.andand > 0
-      [Collection, Group, Human, Specimen, Trait].each do |obj|
-        @related_objs[obj.name] = obj.where(any: ['contains', params[:q]])
+    @objects = []
+    unless params[:q].andand.length.andand > 0
+      return super
+    end
+    @links = Link.where(any: ['contains', params[:q]])
+    [Collection, Group, Human, Specimen, Trait].each do |klass|
+      @objects += klass.where(any: ['contains', params[:q]]).to_a
+      @objects += klass.where(uuid: (@links.collect(&:head_uuid) | @links.collect(&:tail_uuid)))
+    end
+    @objects = @objects.uniq_by { |x| x.uuid }.sort_by { |x| x.modified_at }.reverse
+    @detail_for = {}
+    @objects.each do |object|
+      uuid = object.uuid
+      @detail_for[uuid] ||= []
+      if object.respond_to? :files
+        object.files[0..2].each do |file|
+          @detail_for[uuid] += ["#{file[0]}/#{file[1]}"]
+        end
+      end
+    end
+    @links.each do |link|
+      [link.head_uuid, link.tail_uuid].each do |uuid|
+        if @detail_for[uuid]
+          @detail_for[uuid] += ["#{link.link_class}: #{link.name}"]
+        end
+      end
+    end
+    super
+  end
+
+  def attributes_for_display
+    unless @attributes_for_display
+      ret = []
+      @objects.each do |object|
+        ret |= object.attributes_for_display.collect { |k,v| k }
       end
+      @attributes_for_display = ret
     end
+    @attributes_for_display
   end
 end
diff --git a/apps/workbench/app/models/collection.rb b/apps/workbench/app/models/collection.rb
index bda5523..e48d2d5 100644
--- a/apps/workbench/app/models/collection.rb
+++ b/apps/workbench/app/models/collection.rb
@@ -13,6 +13,14 @@ class Collection < ArvadosBase
     false
   end
 
+  def attributes_for_display
+    attributes.select { |k,v|
+      %w(uuid owner_uuid).index k
+    }.sort_by { |k,v|
+      attribute_sortkey[k] or k
+    }
+  end
+
   def self.creatable?
     false
   end
diff --git a/apps/workbench/app/views/application/_delete_object_button.html.erb b/apps/workbench/app/views/application/_delete_object_button.html.erb
index 67a3d06..d9d1ee2 100644
--- a/apps/workbench/app/views/application/_delete_object_button.html.erb
+++ b/apps/workbench/app/views/application/_delete_object_button.html.erb
@@ -1,5 +1,5 @@
 <% if object.editable? %>
-  <%= link_to({action: 'destroy', id: object.uuid}, method: :delete, remote: true, data: {confirm: "You are about to delete #{object.class} #{object.uuid}.\n\nAre you sure?"}) do %>
+  <%= link_to({controller: object.class.to_s.camelize(:lower).pluralize, action: 'destroy', id: object.uuid}, method: :delete, remote: true, data: {confirm: "You are about to delete #{object.class} #{object.uuid}.\n\nAre you sure?"}) do %>
     <i class="glyphicon glyphicon-trash"></i>
   <% end %>
 <% end %>
diff --git a/apps/workbench/app/views/application/_show_recent.html.erb b/apps/workbench/app/views/application/_show_recent.html.erb
index c58c628..59d06ef 100644
--- a/apps/workbench/app/views/application/_show_recent.html.erb
+++ b/apps/workbench/app/views/application/_show_recent.html.erb
@@ -11,7 +11,7 @@
 <table class="table table-condensed arv-index">
   <thead>
     <tr>
-      <% @objects.first.attributes_for_display.each do |attr, attrvalue| %>
+      <% controller.attributes_for_display.each do |attr| %>
       <% next if attr_blacklist.index(" "+attr) %>
       <th class="arv-attr-<%= attr %>">
         <%= controller.model_class.attribute_info[attr.to_sym].andand[:column_heading] or attr.sub /_uuid/, '' %>
@@ -26,8 +26,10 @@
   <tbody>
     <% @objects.each do |object| %>
     <tr data-object-uuid="<%= object.uuid %>">
-      <% object.attributes_for_display.each do |attr, attrvalue| %>
+      <% controller.attributes_for_display.each do |attr| %>
       <% next if attr_blacklist.index(" "+attr) %>
+      <% if object.respond_to? attr %>
+      <% attrvalue = object.send attr %>
       <td class="arv-object-<%= object.class.to_s %> arv-attr-<%= attr %>">
         <% if attr == 'uuid' %>
         <%= link_to_if_arvados_object object %>
@@ -42,6 +44,9 @@
         <%= link_to_if_arvados_object(attrvalue, { referring_object: @object, link_text: raw('<i class="icon-hand-right"></i>') }) if resource_class_for_uuid(attrvalue, {referring_object: @object}) %>
         <% end %>
       </td>
+      <% else %>
+      <td></td>
+      <% end %>
       <% end %>
       <td>
         <%= render partial: 'delete_object_button', locals: {object:object} %>
diff --git a/apps/workbench/app/views/layouts/application.html.erb b/apps/workbench/app/views/layouts/application.html.erb
index 19b200a..1ca90b9 100644
--- a/apps/workbench/app/views/layouts/application.html.erb
+++ b/apps/workbench/app/views/layouts/application.html.erb
@@ -89,15 +89,15 @@
           <li class="nav-separator"><span class="glyphicon glyphicon-arrow-right"></span></li>
           <li>
             <%= link_to(
-                        controller.model_class.to_s.pluralize.underscore.gsub('_', ' '),
-                        url_for({controller: params[:controller]})) %>
+                controller.breadcrumb_controller_name,
+                url_for({controller: params[:controller]})) %>
           </li>
           <% if params[:action] != 'index' %>
             <li class="nav-separator">
               <span class="glyphicon glyphicon-arrow-right"></span>
             </li>
             <li>
-<%= link_to controller.breadcrumb_page_name, request.fullpath %>
+              <%= link_to controller.breadcrumb_page_name, request.fullpath %>
             </li>
           <% end %>
         <% end %>
@@ -111,11 +111,19 @@
         </li>
 
         <% if current_user %>
-        <!-- XXX placeholder for this when search is implemented -->
         <li>
-	  <%= form_tag("/related_objects", method: "get") do %>
-	    <%= text_field_tag(:q) %>
-	    <%= submit_tag("Search") %>
+	  <%= form_tag related_objects_path,
+              method: 'get',
+              class: 'navbar-form',
+              role: 'search' do %>
+            <div class="input-group" style="width: 220px">
+	      <%= text_field_tag(:q, params[:q], class: 'form-control', placeholder: 'Search') %>
+              <span class="input-group-btn">
+                <%= button_tag(class: 'btn btn-info') do %>
+                <span class="glyphicon glyphicon-search"></span>
+                <% end %>
+	      </span>
+            </div>
 	  <% end %>
 	  <!--
           <form class="navbar-form" role="search">
diff --git a/apps/workbench/app/views/related_objects/_index_tbody.html.erb b/apps/workbench/app/views/related_objects/_index_tbody.html.erb
deleted file mode 100644
index 8a04522..0000000
--- a/apps/workbench/app/views/related_objects/_index_tbody.html.erb
+++ /dev/null
@@ -1,10 +0,0 @@
-<% related_objs.each do |obj| %>
-
-<tr class="collection">
-  <td>
-    <%= link_to_if_arvados_object obj.uuid %>
-  </td>
-  <td><%= link_to_if_arvados_object obj.owner_uuid, friendly_name: true %></td>
-</tr>
-
-<% end %>
diff --git a/apps/workbench/app/views/related_objects/_show_recent.html.erb b/apps/workbench/app/views/related_objects/_show_recent.html.erb
deleted file mode 100644
index f0ae9b3..0000000
--- a/apps/workbench/app/views/related_objects/_show_recent.html.erb
+++ /dev/null
@@ -1,41 +0,0 @@
-<% content_for :tab_line_buttons do %>
-<div class="pull-right" style="width: 30%">
-  <%= form_tag collections_path, method: 'get', remote: true, class: 'form-search' do %>
-  <div class="input-group">
-    <%= text_field_tag :search, params[:search], class: 'form-control', placeholder: 'Search collections' %>
-    <span class="input-group-btn">
-      <%= button_tag(class: 'btn btn-info') do %>
-      <span class="glyphicon glyphicon-search"></span>
-      <% end %>
-    </span>
-  </div>  
-  <% end %>
-</div>
-<% end %>
-
-<div style="padding-right: 1em">
-
-<% @related_objs.each do |obj_class, related_objs| %>
-  <h1><%= obj_class.pluralize %></h1>
-  <table id="collections-index" class="topalign table table-condensed table-fixedlayout">
-    <thead>
-      <tr class="contain-align-left">
-	<th>uuid</th>
-	<th>owner</th>
-      </tr>
-    </thead>
-    <tbody>
-      <%= render partial: 'index_tbody',
-	         locals: {related_objs: related_objs} %>
-    </tbody>
-  </table>
-<% end %>
-
-</div>
-
-<% content_for :js do %>
-$(document).on('click', 'form[data-remote] input[type=submit]', function() {
-  $('table#collections-index tbody').fadeTo(200, 0.3);
-  return true;
-});
-<% end %>
diff --git a/apps/workbench/app/views/related_objects/index.html.erb b/apps/workbench/app/views/related_objects/index.html.erb
new file mode 100644
index 0000000..9b43992
--- /dev/null
+++ b/apps/workbench/app/views/related_objects/index.html.erb
@@ -0,0 +1,53 @@
+<% if @objects.empty? %>
+
+<br/>
+<p style="text-align: center">
+  Nothing to display.
+</p>
+
+<% else %>
+
+<table class="table table-condensed arv-index">
+  <thead>
+    <tr>
+      <th>
+        object
+      </th>
+      <th>
+        detail
+      </th>
+      <th>
+        owner
+      </th>
+      <th>
+        age
+      </th>
+    </tr>
+  </thead>
+      
+  <tbody>
+    <% @objects.each do |object| %>
+    <tr data-object-uuid="<%= object.uuid %>">
+      <td>
+        <%= link_to_if_arvados_object object, friendly_name: true %>
+      </td>
+      <td>
+        <% @detail_for[object.uuid][0..3].each do |detail| %>
+        <%= detail %><br />
+        <% end %>
+      </td>
+      <td>
+        <%= link_to_if_arvados_object object.owner_uuid, friendly_name: true %>
+      </td>
+      <td>
+        <%= distance_of_time_in_words object.created_at, Time.now %>
+      </td>
+    </tr>
+    <% end %>
+  </tbody>
+
+  <tfoot>
+  </tfoot>
+</table>
+
+<% end %>

commit 6441daababe825dc5632a1977d36f622461d5bd8
Merge: f9b83ed d7a0729
Author: Tom Clegg <tom at curoverse.com>
Date:   Wed Feb 26 01:07:57 2014 -0800

    Merge branch 'master' into 2013-search-all-the-things-TC


-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list