rails3-jquery-autocomplete 0.5.0 → 0.5.1

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
@@ -210,6 +210,7 @@ You need to have an instance of MongoDB running on your computer or all the mong
210
210
 
211
211
  # Changelog
212
212
 
213
+ * 0.5.1 Add STI support
213
214
  * 0.5.0 Formtastic support
214
215
  * 0.4.0 MongoID support
215
216
  * 0.3.6 Using .live() to put autocomplete on dynamic fields
@@ -218,4 +219,4 @@ You need to have an instance of MongoDB running on your computer or all the mong
218
219
 
219
220
  [Crowd Interactive](http://www.crowdint.com) is an American web design and development company that happens to work in Colima, Mexico.
220
221
  We specialize in building and growing online retail stores. We don’t work with everyone – just companies we believe in. Call us today to see if there’s a fit.
221
- Find more info [here](http://www.crowdint.com)!
222
+ Find more info [here](http://www.crowdint.com)!
@@ -19,9 +19,10 @@ module Rails3JQueryAutocomplete
19
19
  # Returns a symbol representing what implementation should be used to query
20
20
  # the database and raises *NotImplementedError* if ORM implementor can not be found
21
21
  def get_implementation(object)
22
- if object.superclass.to_s == 'ActiveRecord::Base'
22
+ ancestors_ary = object.ancestors.collect(&:to_s)
23
+ if ancestors_ary.include?('ActiveRecord::Base')
23
24
  :activerecord
24
- elsif object.included_modules.collect(&:to_s).include?('Mongoid::Document')
25
+ elsif ancestors_ary.include?('Mongoid::Document')
25
26
  :mongoid
26
27
  else
27
28
  raise NotImplementedError
@@ -0,0 +1,36 @@
1
+ require "test_helper"
2
+ require 'test_controller'
3
+ require 'support/mongoid'
4
+ require 'support/active_record'
5
+
6
+ class ActiveRecordControllerTest < ActionController::TestCase
7
+ include Rails3JQueryAutocomplete::TestCase::ActiveRecord
8
+ include Rails3JQueryAutocomplete::TestCase
9
+ end
10
+
11
+ class ActiveRecordSTIControllerTest < ActionController::TestCase
12
+ require 'support/active_record'
13
+ include Rails3JQueryAutocomplete::TestCase::ActiveRecord
14
+ include Rails3JQueryAutocomplete::TestCase
15
+
16
+ def create_models
17
+ @parent_movie_class = Object.const_set(:Movie, Class.new(::ActiveRecord::Base))
18
+ @parent_movie_class.class_eval do
19
+ def display_name
20
+ "Movie: #{name}"
21
+ end
22
+ end
23
+ @movie_class = Object.const_set(:HorrorMovie, Class.new(@parent_movie_class))
24
+ end
25
+
26
+ def destroy_models
27
+ Object.send(:remove_const, :Movie)
28
+ Object.send(:remove_const, :HorrorMovie)
29
+ end
30
+
31
+ end
32
+
33
+ class MonogidControllerTest < ActionController::TestCase
34
+ include Rails3JQueryAutocomplete::TestCase::Mongoid
35
+ include Rails3JQueryAutocomplete::TestCase
36
+ end
@@ -1,19 +1,5 @@
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
1
  module Rails3JQueryAutocomplete
16
- module Test
2
+ module TestCase
17
3
  module ActiveRecord
18
4
  def setup
19
5
  ::ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
@@ -21,23 +7,38 @@ module Rails3JQueryAutocomplete
21
7
  create_table :movies do |t|
22
8
  t.column :name, :string
23
9
  end
24
-
25
- create_table :actors do |t|
26
- t.column :movie_id, :integer
27
- t.column :name, :string
28
- end
29
10
  end
30
11
 
31
- @movie = Movie.create(:name => 'Alpha')
32
- @movie2 = Movie.create(:name => 'Alspha')
33
- @movie3 = Movie.create(:name => 'Alzpha')
12
+ create_models
13
+
14
+ @controller = ActorsController.new
15
+
16
+ @movie1 = @movie_class.create(:name => 'Alpha')
17
+ @movie2 = @movie_class.create(:name => 'Alspha')
18
+ @movie3 = @movie_class.create(:name => 'Alzpha')
34
19
  end
35
20
 
36
21
  def teardown
22
+ destroy_models
37
23
  ::ActiveRecord::Base.connection.tables.each do |table|
38
24
  ::ActiveRecord::Base.connection.drop_table(table)
39
25
  end
40
26
  end
27
+
28
+ private
29
+ def create_models
30
+ @movie_class = Object.const_set(:Movie, Class.new(::ActiveRecord::Base))
31
+ @movie_class.class_eval do
32
+ def display_name
33
+ "Movie: #{name}"
34
+ end
35
+ end
36
+ end
37
+
38
+ def destroy_models
39
+ Object.send(:remove_const, :Movie)
40
+ end
41
+
41
42
  end
42
43
  end
43
44
  end
@@ -1,24 +1,5 @@
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
1
  module Rails3JQueryAutocomplete
21
- module Test
2
+ module TestCase
22
3
  module Mongoid
23
4
  def setup
24
5
  ::Mongoid.configure do |config|
@@ -28,14 +9,36 @@ module Rails3JQueryAutocomplete
28
9
  config.logger = nil
29
10
  end
30
11
 
31
- @game = Game.create(:name => 'Alpha')
32
- @game2 = Game.create(:name => 'Alspha')
33
- @game3 = Game.create(:name => 'Alzpha')
12
+ create_models
13
+
14
+ @controller = ActorsController.new
15
+
16
+ @movie1 = @movie_class.create(:name => 'Alpha')
17
+ @movie2 = @movie_class.create(:name => 'Alspha')
18
+ @movie3 = @movie_class.create(:name => 'Alzpha')
34
19
  end
35
20
 
36
21
  def teardown
22
+ destroy_models
37
23
  ::Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
38
24
  end
25
+
26
+ private
27
+ def create_models
28
+ @movie_class = Object.const_set(:Movie, Class.new)
29
+ @movie_class.send(:include, ::Mongoid::Document)
30
+ @movie_class.field(:name, :class => String)
31
+ @movie_class.class_eval do
32
+ def display_name
33
+ "Movie: #{name}"
34
+ end
35
+ end
36
+ end
37
+
38
+ def destroy_models
39
+ Object.send(:remove_const, :Movie)
40
+ end
41
+
39
42
  end
40
43
  end
41
44
  end
@@ -0,0 +1,101 @@
1
+ module Rails3JQueryAutocomplete
2
+ module TestCase
3
+
4
+ include Shoulda::InstanceMethods
5
+ extend Shoulda::ClassMethods
6
+ include Shoulda::Assertions
7
+ extend Shoulda::Macros
8
+ include Shoulda::Helpers
9
+
10
+ context "the autocomplete gem" do
11
+
12
+ should "be able to access the autocomplete action regardless of the quality of param[:term]" do
13
+ get :autocomplete_movie_name
14
+ assert_response :success
15
+
16
+ get :autocomplete_movie_name, :term => ''
17
+ assert_response :success
18
+
19
+ get :autocomplete_movie_name, :term => nil
20
+ assert_response :success
21
+
22
+ get :autocomplete_movie_name, :term => 'Al'
23
+ assert_response :success
24
+ end
25
+
26
+ should "respond with expected json" do
27
+ get :autocomplete_movie_name, :term => 'Al'
28
+ json_response = JSON.parse(@response.body)
29
+ assert_equal(json_response.first["label"], @movie1.name)
30
+ assert_equal(json_response.first["value"], @movie1.name)
31
+ assert_equal(json_response.first["id"].to_s, @movie1.id.to_s)
32
+ end
33
+
34
+ should "return results in alphabetical order by default" do
35
+ get :autocomplete_movie_name, :term => 'Al'
36
+ json_response = JSON.parse(@response.body)
37
+ assert_equal(json_response.first["label"], "Alpha")
38
+ assert_equal(json_response.last["label"], "Alzpha")
39
+ end
40
+
41
+ should "be able to sort in other ways if desired" do
42
+ @controller.class_eval do
43
+ autocomplete :movie, :name, {:order => "name DESC"}
44
+ end
45
+
46
+ get :autocomplete_movie_name, :term => 'Al'
47
+ json_response = JSON.parse(@response.body)
48
+ assert_equal(json_response.first["label"], "Alzpha")
49
+ assert_equal(json_response.last["label"], "Alpha")
50
+ end
51
+
52
+ should "be able to limit the results" do
53
+ @controller.class_eval do
54
+ autocomplete :movie, :name, {:limit => 1}
55
+ end
56
+
57
+ get :autocomplete_movie_name, :term => 'Al'
58
+ json_response = JSON.parse(@response.body)
59
+ assert_equal(json_response.length, 1)
60
+ end
61
+
62
+ should "ignore case of search term and results" do
63
+ @movie = @movie_class.create(:name => 'aLpHa')
64
+
65
+ @controller.class_eval do
66
+ autocomplete :movie, :name
67
+ end
68
+
69
+ get :autocomplete_movie_name, :term => 'Al'
70
+ json_response = JSON.parse(@response.body)
71
+ assert_equal(json_response.length, @movie_class.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
+ @controller.class_eval do
77
+ autocomplete :movie, :name, {:full => true}
78
+ end
79
+
80
+ get :autocomplete_movie_name, :term => 'ph'
81
+ json_response = JSON.parse(@response.body)
82
+ assert_equal(json_response.length, @movie_class.count)
83
+ assert_equal(json_response.first["label"], @movie1.name)
84
+ end
85
+
86
+ should "be able to customize what is displayed" do
87
+ @controller.class_eval do
88
+ autocomplete :movie, :name, {:display_value => :display_name}
89
+ end
90
+
91
+ get :autocomplete_movie_name, :term => 'Al'
92
+
93
+ json_response = JSON.parse(@response.body)
94
+
95
+ assert_equal(@movie1.display_name, json_response.first["label"])
96
+ assert_equal(@movie1.display_name, json_response.first["value"])
97
+ assert_equal(@movie1.id.to_s, json_response.first["id"].to_s)
98
+ end
99
+ end
100
+ end
101
+ end
data/test/test_helper.rb CHANGED
@@ -24,3 +24,6 @@ Rails3JQueryAutocomplete::Application.routes.draw do
24
24
  end
25
25
 
26
26
  ActionController::Base.send :include, Rails3JQueryAutocomplete::Application.routes.url_helpers
27
+
28
+ ActorsController = Class.new(ActionController::Base)
29
+ ActorsController.autocomplete(:movie, :name)
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: 11
4
+ hash: 9
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 0
10
- version: 0.5.0
9
+ - 1
10
+ version: 0.5.1
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-26 00:00:00 -05:00
18
+ date: 2010-11-24 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -54,13 +54,13 @@ files:
54
54
  - lib/rails3-jquery-autocomplete/form_helper.rb
55
55
  - lib/rails3-jquery-autocomplete/formtastic_plugin.rb
56
56
  - lib/rails3-jquery-autocomplete/helpers.rb
57
- - test/active_record_controller_test.rb
58
57
  - test/form_helper_test.rb
59
58
  - test/generators/generator_test.rb
60
59
  - test/helpers.rb
61
- - test/mongoid_controller_test.rb
60
+ - test/implementations_test.rb
62
61
  - test/support/active_record.rb
63
62
  - test/support/mongoid.rb
63
+ - test/test_controller.rb
64
64
  - test/test_helper.rb
65
65
  - LICENSE
66
66
  has_rdoc: true
@@ -98,11 +98,11 @@ signing_key:
98
98
  specification_version: 3
99
99
  summary: Use jQuery's autocomplete plugin with Rails 3.
100
100
  test_files:
101
- - test/active_record_controller_test.rb
102
101
  - test/form_helper_test.rb
103
102
  - test/generators/generator_test.rb
104
103
  - test/helpers.rb
105
- - test/mongoid_controller_test.rb
104
+ - test/implementations_test.rb
106
105
  - test/support/active_record.rb
107
106
  - test/support/mongoid.rb
107
+ - test/test_controller.rb
108
108
  - test/test_helper.rb
@@ -1,100 +0,0 @@
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
@@ -1,100 +0,0 @@
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