[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