adding autocomplete controller and tests
git-svn-id: http://svn.barleysodas.com/barleysodas/trunk@36 0f7b21a7-9e3a-4941-bbeb-ce5c7c368fa7master
parent
f3c9f85e1d
commit
abcc827626
|
@ -0,0 +1,27 @@
|
||||||
|
class AutocompleteController < ApplicationController
|
||||||
|
append_before_filter :ensure_xhr
|
||||||
|
|
||||||
|
##
|
||||||
|
# Automatically finds and returns a nice list of things. It is stupid in that
|
||||||
|
# it only finds the first thing available, but it will find it all.
|
||||||
|
#
|
||||||
|
# It expects to have parameters passed in the form:
|
||||||
|
#
|
||||||
|
# 'brewery' => { 'name' => 'foo' }
|
||||||
|
#
|
||||||
|
# Only one of those sets. If this is done, then all will be peachy.
|
||||||
|
#
|
||||||
|
def index
|
||||||
|
key = params.keys.detect do |x|
|
||||||
|
x.to_s != 'action' and x.to_s != 'controller'
|
||||||
|
end
|
||||||
|
render :nothing => true, :status => 500 if key.nil?
|
||||||
|
@value = params[key].keys.first
|
||||||
|
class_name = key.camelize.constantize
|
||||||
|
render :nothing => true unless class_name.new.respond_to?(@value)
|
||||||
|
@items = class_name.find(:all, :order => "#{@value} ASC", :select => @value,
|
||||||
|
:conditions => [ "lower(#{@value}) LIKE ?",
|
||||||
|
"%#{params[key][@value].downcase}%" ])
|
||||||
|
render :partial => 'autocomplete/results'
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
module AutocompleteHelper
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
<ul>
|
||||||
|
<% if @items.empty? -%>
|
||||||
|
<li><strong>Ohtehnoz! No maches found!</strong></li>
|
||||||
|
<% else -%>
|
||||||
|
<%= @items.collect { |x| "<li>#{x.send(@value)}</li>" } %>
|
||||||
|
<% end -%>
|
||||||
|
</ul>
|
|
@ -0,0 +1,18 @@
|
||||||
|
require File.dirname(__FILE__) + '/../test_helper'
|
||||||
|
require 'autocomplete_controller'
|
||||||
|
|
||||||
|
# Re-raise errors caught by the controller.
|
||||||
|
class AutocompleteController; def rescue_action(e) raise e end; end
|
||||||
|
|
||||||
|
class AutocompleteControllerTest < Test::Unit::TestCase
|
||||||
|
def setup
|
||||||
|
@controller = AutocompleteController.new
|
||||||
|
@request = ActionController::TestRequest.new
|
||||||
|
@response = ActionController::TestResponse.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# Replace this with your real tests.
|
||||||
|
def test_truth
|
||||||
|
assert true
|
||||||
|
end
|
||||||
|
end
|
Reference in New Issue