rails3-jquery-autocomplete 0.3.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.markdown CHANGED
@@ -1,7 +1,18 @@
1
1
  # rails3-jquery-autocomplete
2
2
 
3
- An easy way to use jQuery's autocomplete with Rails 3. You can find a [detailed example](http://github.com/crowdint/rails3-jquery-autocomplete-app)
4
- on how to use this gem [here](http://github.com/crowdint/rails3-jquery-autocomplete-app).
3
+ An easy way to use jQuery's autocomplete with Rails 3.
4
+
5
+ In now supports both ActiveRecord and [mongoid](http://github.com/mongoid/mongoid).
6
+
7
+ ## ActiveRecord
8
+
9
+ You can find a [detailed example](http://github.com/crowdint/rails3-jquery-autocomplete-app)
10
+ on how to use this gem with ActiveRecord [here](http://github.com/crowdint/rails3-jquery-autocomplete-app).
11
+
12
+ ## MongoID
13
+
14
+ You can find a [detailed example](http://github.com/crowdint/rails3-jquery-autocomplete-app/tree/mongoid)
15
+ on how to use this gem with MongoID [here](http://github.com/crowdint/rails3-jquery-autocomplete-app/tree/mongoid).
5
16
 
6
17
  ## Before you start
7
18
 
@@ -1,53 +1,8 @@
1
- require 'form_helper'
2
-
3
- module Rails3JQueryAutocomplete
4
- def self.included(base)
5
- base.extend(ClassMethods)
6
- end
7
-
8
- # Inspired on DHH's autocomplete plugin
9
- #
10
- # Usage:
11
- #
12
- # class ProductsController < Admin::BaseController
13
- # autocomplete :brand, :name
14
- # end
15
- #
16
- # This will magically generate an action autocomplete_brand_name, so,
17
- # don't forget to add it on your routes file
18
- #
19
- # resources :products do
20
- # get :autocomplete_brand_name, :on => :collection
21
- # end
22
- #
23
- # Now, on your view, all you have to do is have a text field like:
24
- #
25
- # f.text_field :brand_name, :autocomplete => autocomplete_brand_name_products_path
26
- #
27
- #
28
- module ClassMethods
29
- def autocomplete(object, method, options = {})
30
- limit = options[:limit] || 10
31
- order = options[:order] || "#{method} ASC"
32
-
33
- define_method("autocomplete_#{object}_#{method}") do
34
- if params[:term] && !params[:term].empty?
35
- items = object.to_s.camelize.constantize.where(["LOWER(#{method}) LIKE ?", "#{(options[:full] ? '%' : '')}#{params[:term].downcase}%"]).limit(limit).order(order)
36
- else
37
- items = {}
38
- end
39
-
40
- render :json => json_for_autocomplete(items, (options[:display_value] ? options[:display_value] : method))
41
- end
42
- end
43
- end
44
-
45
- private
46
- def json_for_autocomplete(items, method)
47
- items.collect {|i| {"id" => i.id, "label" => i.send(method), "value" => i.send(method)}}
48
- end
49
- end
1
+ require 'rails3-jquery-autocomplete/form_helper'
2
+ require 'rails3-jquery-autocomplete/helpers'
3
+ require 'rails3-jquery-autocomplete/autocomplete'
50
4
 
51
5
  class ActionController::Base
52
- include Rails3JQueryAutocomplete
6
+ extend Rails3JQueryAutocomplete::ClassMethods
7
+ include Rails3JQueryAutocomplete::Helpers
53
8
  end
@@ -0,0 +1,42 @@
1
+ module Rails3JQueryAutocomplete
2
+
3
+ # Inspired on DHH's autocomplete plugin
4
+ #
5
+ # Usage:
6
+ #
7
+ # class ProductsController < Admin::BaseController
8
+ # autocomplete :brand, :name
9
+ # end
10
+ #
11
+ # This will magically generate an action autocomplete_brand_name, so,
12
+ # don't forget to add it on your routes file
13
+ #
14
+ # resources :products do
15
+ # get :autocomplete_brand_name, :on => :collection
16
+ # end
17
+ #
18
+ # Now, on your view, all you have to do is have a text field like:
19
+ #
20
+ # f.text_field :brand_name, :autocomplete => autocomplete_brand_name_products_path
21
+ #
22
+ #
23
+ module ClassMethods
24
+ def autocomplete(object, method, options = {})
25
+
26
+ define_method("autocomplete_#{object}_#{method}") do
27
+
28
+ term = params[:term]
29
+
30
+ if term && !term.empty?
31
+ items = get_items(:model => get_object(object), \
32
+ :options => options, :term => term, :method => method)
33
+ else
34
+ items = {}
35
+ end
36
+
37
+ render :json => json_for_autocomplete(items, options[:display_value] ||= method)
38
+ end
39
+ end
40
+ end
41
+
42
+ end
@@ -53,4 +53,4 @@ class ActionView::Helpers::FormBuilder #:nodoc:
53
53
  def autocomplete_field(method, source, options = {})
54
54
  @template.autocomplete_field(@object_name, method, source, options)
55
55
  end
56
- end
56
+ end
@@ -0,0 +1,81 @@
1
+ module Rails3JQueryAutocomplete
2
+
3
+ # Contains utility methods used by autocomplete
4
+ module Helpers
5
+
6
+ # Returns a three keys hash
7
+ def json_for_autocomplete(items, method)
8
+ items.collect {|item| {"id" => item.id, "label" => item.send(method), "value" => item.send(method)}}
9
+ end
10
+
11
+ # Returns parameter model_sym as a constant
12
+ #
13
+ # get_object(:actor)
14
+ # # returns a Actor constant supposing it is already defined
15
+ def get_object(model_sym)
16
+ object = model_sym.to_s.camelize.constantize
17
+ end
18
+
19
+ # Returns a symbol representing what implementation should be used to query
20
+ # the database and raises *NotImplementedError* if ORM implementor can not be found
21
+ def get_implementation(object)
22
+ if object.superclass.to_s == 'ActiveRecord::Base'
23
+ :activerecord
24
+ elsif object.included_modules.collect(&:to_s).include?('Mongoid::Document')
25
+ :mongoid
26
+ else
27
+ raise NotImplementedError
28
+ end
29
+ end
30
+
31
+ # Returns the order parameter to be used in the query created by get_items
32
+ def get_order(implementation, method, options)
33
+ order = options[:order]
34
+
35
+ case implementation
36
+ when :mongoid then
37
+ if order
38
+ order.split(',').collect do |fields|
39
+ sfields = fields.split
40
+ [sfields[0].downcase.to_sym, sfields[1].downcase.to_sym]
41
+ end
42
+ else
43
+ [[method.to_sym, :asc]]
44
+ end
45
+ when :activerecord then
46
+ order || "#{method} ASC"
47
+ end
48
+ end
49
+
50
+ # Returns a limit that will be used on the query
51
+ def get_limit(options)
52
+ options[:limit] ||= 10
53
+ end
54
+
55
+ # Queries selected database
56
+ #
57
+ # items = get_items(:model => get_object(object), :options => options, :term => term, :method => method)
58
+ def get_items(parameters)
59
+
60
+ model = parameters[:model]
61
+ method = parameters[:method]
62
+ options = parameters[:options]
63
+ term = parameters[:term]
64
+ is_full_search = options[:full]
65
+
66
+ limit = get_limit(options)
67
+ implementation = get_implementation(model)
68
+ order = get_order(implementation, method, options)
69
+
70
+ case implementation
71
+ when :mongoid
72
+ search = (is_full_search ? '.*' : '^') + term + '.*'
73
+ items = model.where(method.to_sym => /#{search}/i).limit(limit).order_by(order)
74
+ when :activerecord
75
+ items = model.where(["LOWER(#{method}) LIKE ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]) \
76
+ .limit(limit).order(order)
77
+ end
78
+ end
79
+
80
+ end
81
+ end
@@ -0,0 +1,100 @@
1
+ require "test_helper"
2
+ require 'support/active_record'
3
+
4
+ module Rails3JQueryAutocomplete
5
+ module Test
6
+ module ActiveRecord
7
+
8
+ class ActorsControllerTest < ActionController::TestCase
9
+
10
+ include Rails3JQueryAutocomplete::Test::ActiveRecord
11
+
12
+ setup do
13
+ @controller = ActorsController.new
14
+ end
15
+
16
+ context "the autocomplete gem" do
17
+
18
+ should "be able to access the autocomplete action regardless of the quality of param[:term]" do
19
+ get :autocomplete_movie_name
20
+ assert_response :success
21
+
22
+ get :autocomplete_movie_name, :term => ''
23
+ assert_response :success
24
+
25
+ get :autocomplete_movie_name, :term => nil
26
+ assert_response :success
27
+
28
+ get :autocomplete_movie_name, :term => 'Al'
29
+ assert_response :success
30
+ end
31
+
32
+ should "respond with expected json" do
33
+ get :autocomplete_movie_name, :term => 'Al'
34
+ json_response = JSON.parse(@response.body)
35
+ assert_equal(json_response.first["label"], @movie.name)
36
+ assert_equal(json_response.first["value"], @movie.name)
37
+ assert_equal(json_response.first["id"], @movie.id)
38
+ end
39
+
40
+ should "return results in alphabetical order by default" do
41
+ get :autocomplete_movie_name, :term => 'Al'
42
+ json_response = JSON.parse(@response.body)
43
+ assert_equal(json_response.first["label"], "Alpha")
44
+ assert_equal(json_response.last["label"], "Alzpha")
45
+ end
46
+
47
+ should "be able to sort in other ways if desired" do
48
+ ActorsController.send(:autocomplete, :movie, :name, {:order => "name DESC"})
49
+
50
+ get :autocomplete_movie_name, :term => 'Al'
51
+ json_response = JSON.parse(@response.body)
52
+ assert_equal(json_response.first["label"], "Alzpha")
53
+ assert_equal(json_response.last["label"], "Alpha")
54
+ end
55
+
56
+ should "be able to limit the results" do
57
+ ActorsController.send(:autocomplete, :movie, :name, {:limit => 1})
58
+
59
+ get :autocomplete_movie_name, :term => 'Al'
60
+ json_response = JSON.parse(@response.body)
61
+ assert_equal(json_response.length, 1)
62
+ end
63
+
64
+ should "ignore case of search term and results" do
65
+ @movie = Movie.create(:name => 'aLpHa')
66
+
67
+ ActorsController.send(:autocomplete, :movie, :name)
68
+
69
+ get :autocomplete_movie_name, :term => 'Al'
70
+ json_response = JSON.parse(@response.body)
71
+ assert_equal(json_response.length, Movie.count)
72
+ assert_equal(json_response.last["label"], 'aLpHa')
73
+ end
74
+
75
+ should "match term to letters in middle of words when full-text search is on" do
76
+ ActorsController.send(:autocomplete, :movie, :name, {:full => true})
77
+
78
+ get :autocomplete_movie_name, :term => 'ph'
79
+ json_response = JSON.parse(@response.body)
80
+ assert_equal(json_response.length, Movie.count)
81
+ assert_equal(json_response.first["label"], @movie.name)
82
+ end
83
+
84
+ should "be able to customize what is displayed" do
85
+ ActorsController.send(:autocomplete, :movie, :name, {:display_value => :display_name})
86
+
87
+ get :autocomplete_movie_name, :term => 'Al'
88
+
89
+ json_response = JSON.parse(@response.body)
90
+
91
+ assert_equal(@movie.display_name, json_response.first["label"])
92
+ assert_equal(@movie.display_name, json_response.first["value"])
93
+ assert_equal(@movie.id, json_response.first["id"])
94
+ end
95
+ end
96
+ end
97
+
98
+ end
99
+ end
100
+ end
data/test/helpers.rb ADDED
@@ -0,0 +1,122 @@
1
+ require 'test_helper'
2
+
3
+ module Rails3JQueryAutocomplete
4
+ module Test
5
+
6
+ class HelpersTest < ::Test::Unit::TestCase
7
+
8
+ assert_structure = lambda do |hash|
9
+ assert_instance_of(String, hash['label'])
10
+ assert_instance_of(String, hash['value'])
11
+ end
12
+
13
+ items_exist_assert = lambda do |model|
14
+ items = Helpers.get_items(:model => model), :term => 'A', :method => 'name')
15
+ assert(items)
16
+ assert_equal(3, items.size)
17
+ end
18
+
19
+ context 'with Mongoid support' do
20
+
21
+ require 'support/mongoid'
22
+
23
+ context 'passing a Mongoid query result' do
24
+
25
+ include Rails3JQueryAutocomplete::Mongoid::Test
26
+
27
+ should 'parse items to JSON' do
28
+ response = Helpers.json_for_autocomplete(Game.all, :name)
29
+ assert_not_nil(response)
30
+ response.each(&assert_structure)
31
+ end
32
+ end
33
+
34
+ context 'looking for items' do
35
+
36
+ include Rails3JQueryAutocomplete::Mongoid::Test
37
+
38
+ should 'return items' do
39
+ items_exist_assert.call(Game)
40
+ end
41
+ end
42
+ end
43
+
44
+ context 'with ActiveRecord support' do
45
+
46
+ require 'support/active_record'
47
+
48
+ context 'passing an ActiveRecord query result' do
49
+
50
+ include Rails3JQueryAutocomplete::ActiveRecord::Test
51
+
52
+ should 'parse items to JSON' do
53
+ response = Helpers.json_for_autocomplete(Game.all, :name)
54
+ assert_not_nil(response)
55
+ response.each(&assert_structure)
56
+ end
57
+ end
58
+
59
+ context 'looking for items' do
60
+
61
+ include Rails3JQueryAutocomplete::ActiveRecord::Test
62
+
63
+ should 'return items' do
64
+ items_exist_assert.call(Movie)
65
+ end
66
+ end
67
+ end
68
+
69
+ context 'converting a symbol to connstant' do
70
+ should 'return a defined constant' do
71
+ ::MyJustDefinedConstant = Class.new
72
+ assert_equal(::MyJustDefinedConstant, Helpers.get_object(:my_just_defined_constant))
73
+ end
74
+ end
75
+
76
+ context 'returning one symbol for an implemented adapter' do
77
+
78
+ require 'support/active_record'
79
+ require 'support/mongoid'
80
+
81
+ should 'return a symbol for defined interface' do
82
+ assert_equal(:activerecord, Helpers.get_implementation(::Movie))
83
+ assert_equal(:mongoid, Helpers.get_implementation(::Game))
84
+ end
85
+ end
86
+
87
+ context 'returning a limit integer number' do
88
+
89
+ should 'return default value of 10' do
90
+ assert_equal(10, Helpers.get_limit({}))
91
+ end
92
+
93
+ should 'return params value' do
94
+ assert_equal(1, Helpers.get_limit(:limit => 1))
95
+ end
96
+ end
97
+
98
+ context 'returning elements ordering' do
99
+
100
+ should 'returning default ascending order for activerecord' do
101
+ assert_equal("name ASC", Helpers.get_order(:activerecord, 'name', {}))
102
+ end
103
+
104
+ should 'returning descending order for activerecord' do
105
+ assert_equal("thisfield DESC", Helpers.get_order(:activerecord, 'otherfield', :order => 'thisfield DESC'))
106
+ end
107
+
108
+ should 'returning default ascending order for mongoid' do
109
+ expected = [[:name, :asc]]
110
+ returned = Helpers.get_order(:mongoid, 'name', {})
111
+ assert expected.eql?(returned)
112
+ end
113
+
114
+ should 'returning order according paramters for mongoid' do
115
+ expected = [[:first, :asc], [:second, :desc]]
116
+ returned = Helpers.get_order(:mongoid, 'name', {:order => 'first asc, second desc'})
117
+ assert expected.eql?(returned)
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,100 @@
1
+ require "test_helper"
2
+ require 'support/mongoid'
3
+
4
+ module Rails3JQueryAutocomplete
5
+ module Test
6
+ module Mongoid
7
+
8
+ class GamesControllerTest < ActionController::TestCase
9
+
10
+ include Rails3JQueryAutocomplete::Test::Mongoid
11
+
12
+ setup do
13
+ @controller = GamesController.new
14
+ end
15
+
16
+ context "the autocomplete gem" do
17
+
18
+ should "be able to access the autocomplete action regardless of the quality of param[:term]" do
19
+ get :autocomplete_game_name
20
+ assert_response :success
21
+
22
+ get :autocomplete_game_name, :term => ''
23
+ assert_response :success
24
+
25
+ get :autocomplete_game_name, :term => nil
26
+ assert_response :success
27
+
28
+ get :autocomplete_game_name, :term => 'Al'
29
+ assert_response :success
30
+ end
31
+
32
+ should "respond with expected json" do
33
+ get :autocomplete_game_name, :term => 'Al'
34
+ json_response = JSON.parse(@response.body)
35
+ assert_equal(json_response.first["label"], @game.name)
36
+ assert_equal(json_response.first["value"], @game.name)
37
+ assert_equal(json_response.first["id"], @game.id.to_s)
38
+ end
39
+
40
+ should "return results in alphabetical order by default" do
41
+ get :autocomplete_game_name, :term => 'Al'
42
+ json_response = JSON.parse(@response.body)
43
+ assert_equal(json_response.first["label"], "Alpha")
44
+ assert_equal(json_response.last["label"], "Alzpha")
45
+ end
46
+
47
+ should "be able to sort in other ways if desired" do
48
+ GamesController.send(:autocomplete, :game, :name, {:order => "name DESC"})
49
+
50
+ get :autocomplete_game_name, :term => 'Al'
51
+ json_response = JSON.parse(@response.body)
52
+ assert_equal(json_response.first["label"], "Alzpha")
53
+ assert_equal(json_response.last["label"], "Alpha")
54
+ end
55
+
56
+ should "be able to limit the results" do
57
+ GamesController.send(:autocomplete, :game, :name, {:limit => 1})
58
+
59
+ get :autocomplete_game_name, :term => 'Al'
60
+ json_response = JSON.parse(@response.body)
61
+ assert_equal(json_response.length, 1)
62
+ end
63
+
64
+ should "ignore case of search term and results" do
65
+ @game = Game.create(:name => 'aLpHa')
66
+
67
+ GamesController.send(:autocomplete, :game, :name)
68
+
69
+ get :autocomplete_game_name, :term => 'Al'
70
+ json_response = JSON.parse(@response.body)
71
+ assert_equal(json_response.length, Game.count)
72
+ assert_equal(json_response.last["label"], 'aLpHa')
73
+ end
74
+
75
+ should "match term to letters in middle of words when full-text search is on" do
76
+ GamesController.send(:autocomplete, :game, :name, {:full => true})
77
+
78
+ get :autocomplete_game_name, :term => 'ph'
79
+ json_response = JSON.parse(@response.body)
80
+ assert_equal(json_response.length, Game.count)
81
+ assert_equal(json_response.first["label"], @game.name)
82
+ end
83
+
84
+ should "be able to customize what is displayed" do
85
+ GamesController.send(:autocomplete, :game, :name, {:display_value => :display_name})
86
+
87
+ get :autocomplete_game_name, :term => 'Al'
88
+
89
+ json_response = JSON.parse(@response.body)
90
+
91
+ assert_equal(@game.display_name, json_response.first["label"])
92
+ assert_equal(@game.display_name, json_response.first["value"])
93
+ assert_equal(@game.id.to_s, json_response.first["id"])
94
+ end
95
+ end
96
+ end
97
+
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,43 @@
1
+ class Actor < ActiveRecord::Base
2
+ belongs_to :movie
3
+ end
4
+
5
+ class Movie < ActiveRecord::Base
6
+ def display_name
7
+ "Movie: #{name}"
8
+ end
9
+ end
10
+
11
+ class ActorsController < ActionController::Base
12
+ autocomplete :movie, :name
13
+ end
14
+
15
+ module Rails3JQueryAutocomplete
16
+ module Test
17
+ module ActiveRecord
18
+ def setup
19
+ ::ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
20
+ ::ActiveRecord::Schema.define(:version => 1) do
21
+ create_table :movies do |t|
22
+ t.column :name, :string
23
+ end
24
+
25
+ create_table :actors do |t|
26
+ t.column :movie_id, :integer
27
+ t.column :name, :string
28
+ end
29
+ end
30
+
31
+ @movie = Movie.create(:name => 'Alpha')
32
+ @movie2 = Movie.create(:name => 'Alspha')
33
+ @movie3 = Movie.create(:name => 'Alzpha')
34
+ end
35
+
36
+ def teardown
37
+ ::ActiveRecord::Base.connection.tables.each do |table|
38
+ ::ActiveRecord::Base.connection.drop_table(table)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ class Character
2
+ include Mongoid::Document
3
+ field :name, :class => String
4
+ referenced_in :game
5
+ end
6
+
7
+ class Game
8
+ include Mongoid::Document
9
+ field :name, :class => String
10
+ references_one :character
11
+ def display_name
12
+ "Game: #{name}"
13
+ end
14
+ end
15
+
16
+ class GamesController < ActionController::Base
17
+ autocomplete :game, :name
18
+ end
19
+
20
+ module Rails3JQueryAutocomplete
21
+ module Test
22
+ module Mongoid
23
+ def setup
24
+ ::Mongoid.configure do |config|
25
+ name = "rails3_jquery_autocomplete_test"
26
+ host = "localhost"
27
+ config.master = Mongo::Connection.new.db(name)
28
+ config.logger = nil
29
+ end
30
+
31
+ @game = Game.create(:name => 'Alpha')
32
+ @game2 = Game.create(:name => 'Alspha')
33
+ @game3 = Game.create(:name => 'Alzpha')
34
+ end
35
+
36
+ def teardown
37
+ ::Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
38
+ end
39
+ end
40
+ end
41
+ end
data/test/test_helper.rb CHANGED
@@ -1,34 +1,26 @@
1
1
  require 'test/unit'
2
-
3
2
  require 'rubygems'
4
3
  gem 'rails', '>=3.0.0.rc'
5
- gem 'sqlite3-ruby'
6
4
 
7
5
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
6
  $LOAD_PATH.unshift(File.dirname(__FILE__))
9
7
 
10
- require "active_support"
11
- require "active_record"
12
- require "active_model"
13
- require "action_controller"
14
- require "rails/railtie"
8
+ ENV["RAILS_ENV"] = "test"
15
9
 
10
+ require 'rails/all'
11
+ require 'mongoid'
12
+ require 'shoulda'
13
+ require 'redgreen'
14
+ require 'rails/test_help'
16
15
  require 'rails3-jquery-autocomplete'
17
16
 
18
- class ApplicationController < ActionController::Base; end
19
-
20
- ActionController::Base.view_paths = File.join(File.dirname(__FILE__), 'views')
21
-
22
- Rails3JQueryAutocomplete::Routes = ActionDispatch::Routing::RouteSet.new
23
- Rails3JQueryAutocomplete::Routes.draw do |map|
24
- map.connect ':controller/:action/:id'
25
- map.connect ':controller/:action'
17
+ module Rails3JQueryAutocomplete
18
+ class Application < Rails::Application
19
+ end
26
20
  end
27
21
 
28
- ActionController::Base.send :include, Rails3JQueryAutocomplete::Routes.url_helpers
29
-
30
- class ActiveSupport::TestCase
31
- setup do
32
- @routes = Rails3JQueryAutocomplete::Routes
33
- end
22
+ Rails3JQueryAutocomplete::Application.routes.draw do
23
+ match '/:controller(/:action(/:id))'
34
24
  end
25
+
26
+ ActionController::Base.send :include, Rails3JQueryAutocomplete::Application.routes.url_helpers
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails3-jquery-autocomplete
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
9
- - 6
10
- version: 0.3.6
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - David Padilla
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-12 00:00:00 -05:00
18
+ date: 2010-10-22 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -47,13 +47,19 @@ files:
47
47
  - README.markdown
48
48
  - Rakefile
49
49
  - lib/cucumber/autocomplete.rb
50
- - lib/form_helper.rb
51
50
  - lib/generators/autocomplete_generator.rb
52
51
  - lib/generators/templates/autocomplete-rails.js
53
52
  - lib/rails3-jquery-autocomplete.rb
54
- - test/autocomplete_generator_test.rb
55
- - test/controller_module_test.rb
53
+ - lib/rails3-jquery-autocomplete/autocomplete.rb
54
+ - lib/rails3-jquery-autocomplete/form_helper.rb
55
+ - lib/rails3-jquery-autocomplete/helpers.rb
56
+ - test/active_record_controller_test.rb
56
57
  - test/form_helper_test.rb
58
+ - test/generators/generator_test.rb
59
+ - test/helpers.rb
60
+ - test/mongoid_controller_test.rb
61
+ - test/support/active_record.rb
62
+ - test/support/mongoid.rb
57
63
  - test/test_helper.rb
58
64
  - LICENSE
59
65
  has_rdoc: true
@@ -91,7 +97,11 @@ signing_key:
91
97
  specification_version: 3
92
98
  summary: Use jQuery's autocomplete plugin with Rails 3.
93
99
  test_files:
94
- - test/autocomplete_generator_test.rb
95
- - test/controller_module_test.rb
100
+ - test/active_record_controller_test.rb
96
101
  - test/form_helper_test.rb
102
+ - test/generators/generator_test.rb
103
+ - test/helpers.rb
104
+ - test/mongoid_controller_test.rb
105
+ - test/support/active_record.rb
106
+ - test/support/mongoid.rb
97
107
  - test/test_helper.rb
@@ -1,138 +0,0 @@
1
- require "test_helper"
2
-
3
- class ActorsController < ApplicationController
4
- autocomplete :movie, :name
5
- end
6
-
7
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
8
-
9
- class Actor < ActiveRecord::Base
10
- belongs_to :movie
11
- end
12
-
13
- class Movie < ActiveRecord::Base
14
- def display_name
15
- "Movie: #{name}"
16
- end
17
- end
18
-
19
- def setup_db
20
- ActiveRecord::Schema.define(:version => 1) do
21
- create_table :movies do |t|
22
- t.column :name, :string
23
- end
24
-
25
- create_table :actors do |t|
26
- t.column :movie_id, :integer
27
- t.column :name, :string
28
- end
29
- end
30
- end
31
-
32
- def teardown_db
33
- ActiveRecord::Base.connection.tables.each do |table|
34
- ActiveRecord::Base.connection.drop_table(table)
35
- end
36
- end
37
-
38
- class ActorsControllerTest < ActionController::TestCase
39
- require 'shoulda'
40
- require 'redgreen'
41
- def setup
42
- setup_db
43
-
44
- @controller = ActorsController.new
45
- @controller.request = @request = ActionController::TestRequest.new
46
- @controller.response = @response = ActionController::TestResponse.new
47
- end
48
-
49
- def teardown
50
- teardown_db
51
- end
52
-
53
- context "the autocomplete gem" do
54
- setup do
55
- @movie = Movie.create(:name => 'Alpha')
56
- @movie2 = Movie.create(:name => 'Alspha')
57
- @movie3 = Movie.create(:name => 'Alzpha')
58
- end
59
-
60
- should "be able to access the autocomplete action regardless of the quality of param[:term]" do
61
- get :autocomplete_movie_name
62
- assert_response :success
63
-
64
- get :autocomplete_movie_name, :term => ''
65
- assert_response :success
66
-
67
- get :autocomplete_movie_name, :term => nil
68
- assert_response :success
69
-
70
- get :autocomplete_movie_name, :term => 'Al'
71
- assert_response :success
72
- end
73
-
74
- should "respond with expected json" do
75
- get :autocomplete_movie_name, :term => 'Al'
76
- json_response = JSON.parse(@response.body)
77
- assert_equal(json_response.first["label"], @movie.name)
78
- assert_equal(json_response.first["value"], @movie.name)
79
- assert_equal(json_response.first["id"], @movie.id)
80
- end
81
-
82
- should "return results in alphabetical order by default" do
83
- get :autocomplete_movie_name, :term => 'Al'
84
- json_response = JSON.parse(@response.body)
85
- assert_equal(json_response.first["label"], "Alpha")
86
- assert_equal(json_response.last["label"], "Alzpha")
87
- end
88
-
89
- should "be able to sort in other ways if desired" do
90
- ActorsController.send(:autocomplete, :movie, :name, {:order => "name DESC"})
91
-
92
- get :autocomplete_movie_name, :term => 'Al'
93
- json_response = JSON.parse(@response.body)
94
- assert_equal(json_response.first["label"], "Alzpha")
95
- assert_equal(json_response.last["label"], "Alpha")
96
- end
97
-
98
- should "be able to limit the results" do
99
- ActorsController.send(:autocomplete, :movie, :name, {:limit => 1})
100
-
101
- get :autocomplete_movie_name, :term => 'Al'
102
- json_response = JSON.parse(@response.body)
103
- assert_equal(json_response.length, 1)
104
- end
105
-
106
- should "ignore case of search term and results" do
107
- @movie = Movie.create(:name => 'aLpHa')
108
-
109
- ActorsController.send(:autocomplete, :movie, :name)
110
-
111
- get :autocomplete_movie_name, :term => 'Al'
112
- json_response = JSON.parse(@response.body)
113
- assert_equal(json_response.length, Movie.count)
114
- assert_equal(json_response.last["label"], 'aLpHa')
115
- end
116
-
117
- should "match term to letters in middle of words when full-text search is on" do
118
- ActorsController.send(:autocomplete, :movie, :name, {:full => true})
119
-
120
- get :autocomplete_movie_name, :term => 'ph'
121
- json_response = JSON.parse(@response.body)
122
- assert_equal(json_response.length, Movie.count)
123
- assert_equal(json_response.first["label"], @movie.name)
124
- end
125
-
126
- should "be able to customize what is displayed" do
127
- ActorsController.send(:autocomplete, :movie, :name, {:display_value => :display_name})
128
-
129
- get :autocomplete_movie_name, :term => 'Al'
130
-
131
- json_response = JSON.parse(@response.body)
132
-
133
- assert_equal(@movie.display_name, json_response.first["label"])
134
- assert_equal(@movie.display_name, json_response.first["value"])
135
- assert_equal(@movie.id, json_response.first["id"])
136
- end
137
- end
138
- end