rails-autocomplete 1.1.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.
Files changed (31) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +51 -0
  3. data/LICENSE +20 -0
  4. data/README.md +453 -0
  5. data/Rakefile +21 -0
  6. data/lib/assets/javascripts/autocomplete-rails-uncompressed.js +197 -0
  7. data/lib/assets/javascripts/autocomplete-rails.js +1 -0
  8. data/lib/cucumber/autocomplete.rb +6 -0
  9. data/lib/generators/autocomplete/install_generator.rb +14 -0
  10. data/lib/generators/autocomplete/uncompressed_generator.rb +14 -0
  11. data/lib/rails-jquery-autocomplete.rb +23 -0
  12. data/lib/rails-jquery-autocomplete/autocomplete.rb +112 -0
  13. data/lib/rails-jquery-autocomplete/form_helper.rb +49 -0
  14. data/lib/rails-jquery-autocomplete/formtastic.rb +41 -0
  15. data/lib/rails-jquery-autocomplete/formtastic_plugin.rb +44 -0
  16. data/lib/rails-jquery-autocomplete/orm.rb +6 -0
  17. data/lib/rails-jquery-autocomplete/orm/active_record.rb +83 -0
  18. data/lib/rails-jquery-autocomplete/rails/engine.rb +5 -0
  19. data/lib/rails-jquery-autocomplete/simple_form_plugin.rb +100 -0
  20. data/lib/rails-jquery-autocomplete/version.rb +3 -0
  21. data/lib/steak/autocomplete.rb +12 -0
  22. data/test/form_helper_test.rb +25 -0
  23. data/test/generators/autocomplete/install_generator_test.rb +25 -0
  24. data/test/generators/autocomplete/uncompressed_generator_test.rb +25 -0
  25. data/test/lib/rails-jquery-autocomplete/autocomplete_test.rb +93 -0
  26. data/test/lib/rails-jquery-autocomplete/orm/active_record_test.rb +190 -0
  27. data/test/lib/rails-jquery-autocomplete/simple_form_plugin_test.rb +33 -0
  28. data/test/lib/rails-jquery-autocomplete_test.rb +38 -0
  29. data/test/test_helper.rb +35 -0
  30. data/test/view_test_helper.rb +108 -0
  31. metadata +196 -0
@@ -0,0 +1,190 @@
1
+ require 'test_helper'
2
+
3
+ module RailsJQueryAutocomplete
4
+ module Orm
5
+ class ActiveRecordTest < Test::Unit::TestCase
6
+ include RailsJQueryAutocomplete::Orm::ActiveRecord
7
+
8
+ context "#get_autocomplete_order" do
9
+ context 'order is specified' do
10
+ should 'returns that order option' do
11
+ assert_equal "field ASC", active_record_get_autocomplete_order(:field, {:order => 'field ASC'})
12
+ end
13
+ end
14
+
15
+ context 'no order is specified' do
16
+ should 'return the order clause by the LOWER(table_name.field) ASC' do
17
+ assert_equal "LOWER(field) ASC", active_record_get_autocomplete_order(:field, {})
18
+ end
19
+
20
+ context 'a different model is specified' do
21
+ should 'return the order clause by the LOWER(table_name.field) ASC' do
22
+ model = Object.new
23
+ mock(model).table_name { 'table_name' }
24
+ assert_equal "LOWER(table_name.field) ASC", active_record_get_autocomplete_order(:field, {}, model)
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ context '#active_record_get_autocomplete_items' do
31
+ should 'retrieve the items from ActiveRecord' do
32
+ class Dog ; end
33
+
34
+ model = Dog
35
+ scoped = []
36
+ whered = []
37
+ term = 'query'
38
+ method = :field
39
+
40
+ options = {
41
+ :model => model,
42
+ :term => term,
43
+ :method => method,
44
+ :options => {}
45
+ }
46
+
47
+ mock(self).get_autocomplete_limit(anything) { 10 }
48
+ mock(self).active_record_get_autocomplete_order(anything, anything, anything) { "order ASC" }
49
+ mock(self).get_autocomplete_select_clause(model, method, {}) { ["field"] }
50
+ mock(self).get_autocomplete_where_clause(model, term, method, {}) { ["WHERE something"] }
51
+ mock(model).table_name.times(any_times) { 'model_table_name' }
52
+
53
+ mock(model).scoped { model }
54
+ mock(model).select(["field"]) { model }
55
+ mock(model).where(["WHERE something"]).mock!.limit(10).mock!.
56
+ order("order ASC") { 1 }
57
+
58
+ assert_equal 1, active_record_get_autocomplete_items(options)
59
+ end
60
+
61
+ should 'use hstore method if present' do
62
+ class Dog ; end
63
+
64
+ model = Dog
65
+ scoped = []
66
+ whered = []
67
+ term = 'query'
68
+ method = :field
69
+ hsmethod = :hsfield
70
+
71
+ options = {
72
+ :model => model,
73
+ :term => term,
74
+ :method => method,
75
+ :options => {hstore: {method: hsmethod}}
76
+ }
77
+
78
+ mock(self).get_autocomplete_limit(anything) { 10 }
79
+ mock(self).active_record_get_autocomplete_order(anything, anything, anything) { "order ASC" }
80
+ mock(self).get_autocomplete_select_clause(model, hsmethod, options[:options]) { ["hsfield"] }
81
+ mock(self).get_autocomplete_where_clause(model, term, hsmethod, options[:options]) { ["WHERE something"] }
82
+ mock(model).table_name.times(any_times) { 'model_table_name' }
83
+
84
+ mock(model).scoped { model }
85
+ mock(model).select(["hsfield"]) { model }
86
+ mock(model).where(["WHERE something"]).mock!.limit(10).mock!.
87
+ order("order ASC") { 1 }
88
+
89
+ assert_equal 1, active_record_get_autocomplete_items(options)
90
+ end
91
+ end
92
+
93
+ context '#get_autocomplete_select_clause' do
94
+ setup do
95
+ @model = Object.new
96
+ mock(@model).table_name { 'table_name' }
97
+ mock(@model).primary_key { 'id' }
98
+ end
99
+
100
+ should 'create a select clause' do
101
+ assert_equal ["table_name.id", "table_name.method"],
102
+ get_autocomplete_select_clause(@model, :method, {})
103
+ end
104
+
105
+ should 'create a select clause with hstore method' do
106
+ assert_equal ["table_name.id", "table_name.hsmethod"],
107
+ get_autocomplete_select_clause(@model, :hsmethod, {hstore: {method: :hsmethod}})
108
+ end
109
+
110
+ context 'with extra options' do
111
+ should 'return those extra fields on the clause' do
112
+ options = {:extra_data => ['table_name.created_at']}
113
+
114
+ assert_equal ["table_name.id", "table_name.method", "table_name.created_at"],
115
+ get_autocomplete_select_clause(@model, :method, options)
116
+ end
117
+ end
118
+ end
119
+
120
+ context '#get_autocomplete_where_clause' do
121
+ setup do
122
+ @model = Object.new
123
+ mock(@model).table_name { 'table_name' }
124
+
125
+ @term = 'query'
126
+ @options = {}
127
+ @method = :method
128
+ end
129
+
130
+ context 'Not Postgres' do
131
+ should 'return options for where' do
132
+ mock(self).postgres?(@model) { false }
133
+ assert_equal ["LOWER(table_name.method) LIKE LOWER(?)", "query%"], get_autocomplete_where_clause(@model, @term, @method, @options)
134
+ end
135
+ end
136
+
137
+ context 'Postgres' do
138
+ should 'return options for where with ILIKE' do
139
+ mock(self).postgres?(@model) { true }
140
+ assert_equal ["LOWER(table_name.method) ILIKE LOWER(?)", "query%"], get_autocomplete_where_clause(@model, @term, @method, @options)
141
+ end
142
+ end
143
+
144
+ context 'HStore' do
145
+ should 'return options for where from hstore options' do
146
+ mock(self).postgres?(@model) { true }
147
+ @options[:hstore] = {method: :hsmethod, key: :hskey}
148
+ @method = :hsmethod
149
+ assert_equal ["LOWER(table_name.hsmethod -> 'hskey') LIKE LOWER(?)", "query%"], get_autocomplete_where_clause(@model, @term, @method, @options)
150
+ end
151
+ end
152
+
153
+ context 'full search' do
154
+ should 'return options for where with the term sourrounded by %%' do
155
+ mock(self).postgres?(@model) { false }
156
+ @options[:full] = true
157
+ assert_equal ["LOWER(table_name.method) LIKE LOWER(?)", "%query%"], get_autocomplete_where_clause(@model, @term, @method, @options)
158
+ end
159
+ end
160
+ end
161
+
162
+ context '#postgres?' do
163
+ setup do
164
+ @model = stub
165
+ end
166
+
167
+ context 'the connection class is not postgres' do
168
+ setup do
169
+ mock(@model).connection { stub }
170
+ end
171
+
172
+ should 'return nil if the connection class matches PostgreSQLAdapter' do
173
+ assert_nil self.postgres?(@model)
174
+ end
175
+ end
176
+
177
+ context 'the connection class matches PostgreSQLAdapter' do
178
+ setup do
179
+ class PostgreSQLAdapter; end
180
+ mock(@model).connection { PostgreSQLAdapter.new }
181
+ end
182
+
183
+ should 'return true' do
184
+ assert self.postgres?(@model)
185
+ end
186
+ end
187
+ end
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+ require 'view_test_helper'
3
+
4
+ module RailsJQueryAutocomplete
5
+ class SimpleFormPluginTest < ActionView::TestCase
6
+
7
+ should "apply a class of 'autocomplete'" do
8
+ with_input_for @user, :name, :autocomplete
9
+ assert_select "input#user_name.autocomplete[type=text][name='user[name]']"
10
+ end
11
+
12
+ should "add a data-autocomplete attribute with the provided :url" do
13
+ with_input_for @user, :name, :autocomplete, :url => '/test'
14
+ assert_select "input#user_name[data-autocomplete=/test]"
15
+ end
16
+
17
+ should "add a data-update-elements attribute with encoded data if passed an :update_elements option" do
18
+ with_input_for @user, :name, :autocomplete, :update_elements => { :id => '#this', :ego => '#that' }
19
+ assert_select "input#user_name[data-update-elements='{&quot;id&quot;:&quot;#this&quot;,&quot;ego&quot;:&quot;#that&quot;}']"
20
+ end
21
+
22
+ should "not add a data-update-elements attribute if not passed an :update_elements option" do
23
+ with_input_for @user, :name, :autocomplete, :url => '/test'
24
+ assert_no_select "input#user_name[data-update-elements]"
25
+ end
26
+
27
+ should "add arbitrary html options, if specified" do
28
+ with_input_for @user, :name, :autocomplete, :input_html => { :class => "superego" }
29
+ assert_select "input#user_name.superego"
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ require 'test_helper'
2
+
3
+ module RailsJQueryAutocomplete
4
+ class RailsJQueryAutocompleteTest < ActionController::TestCase
5
+ ActorsController = Class.new(ActionController::Base)
6
+ ActorsController.autocomplete(:movie, :name)
7
+
8
+ class ::Movie ; end
9
+
10
+ context '#autocomplete_object_method' do
11
+ setup do
12
+ @controller = ActorsController.new
13
+ @items = {}
14
+ @options = { :display_value => :name }
15
+ end
16
+
17
+ should 'respond to the action' do
18
+ assert_respond_to @controller, :autocomplete_movie_name
19
+ end
20
+
21
+ should 'render the JSON items' do
22
+ mock(@controller).get_autocomplete_items({
23
+ :model => Movie, :method => :name, :options => @options, :term => "query"
24
+ }) { @items }
25
+
26
+ mock(@controller).json_for_autocomplete(@items, :name, nil)
27
+ get :autocomplete_movie_name, :term => 'query'
28
+ end
29
+
30
+ context 'no term is specified' do
31
+ should "render an empty hash" do
32
+ mock(@controller).json_for_autocomplete({}, :name, nil)
33
+ get :autocomplete_movie_name
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'test/unit'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+
8
+ ENV["RAILS_ENV"] = "test"
9
+ module Rails
10
+ def self.env
11
+ ActiveSupport::StringInquirer.new("test")
12
+ end
13
+ end
14
+
15
+ require 'rails/all'
16
+ require 'shoulda'
17
+ require 'rr'
18
+ require 'rails/test_help'
19
+ require 'rails-jquery-autocomplete'
20
+
21
+ module RailsJQueryAutocomplete
22
+ class Application < ::Rails::Application
23
+ end
24
+ end
25
+
26
+ RailsJQueryAutocomplete::Application.routes.draw do
27
+ match '/:controller(/:action(/:id))', via: [:get, :post]
28
+ end
29
+
30
+ ActionController::Base.send :include, RailsJQueryAutocomplete::Application.routes.url_helpers
31
+
32
+ class Test::Unit::TestCase
33
+
34
+ end
35
+
@@ -0,0 +1,108 @@
1
+ class User
2
+ extend ActiveModel::Naming
3
+ include ActiveModel::Conversion
4
+
5
+ attr_accessor :id, :name, :description, :created_at, :updated_at
6
+
7
+ def initialize(options={})
8
+ @new_record = false
9
+ options.each do |key, value|
10
+ send("#{key}=", value)
11
+ end if options
12
+ end
13
+
14
+ def new_record!
15
+ @new_record = true
16
+ end
17
+
18
+ def persisted?
19
+ !@new_record
20
+ end
21
+ end
22
+
23
+ class MockController
24
+ attr_writer :action_name
25
+
26
+ def _routes
27
+ self
28
+ end
29
+
30
+ def action_name
31
+ defined?(@action_name) ? @action_name : "edit"
32
+ end
33
+
34
+ def url_for(*args)
35
+ "http://example.com"
36
+ end
37
+
38
+ def url_helpers
39
+ self
40
+ end
41
+
42
+ def hash_for_user_path(*args); end
43
+ def hash_for_users_path(*args); end
44
+ end
45
+
46
+ class MockResponse
47
+
48
+ def initialize(test_case)
49
+ @test_case = test_case
50
+ end
51
+
52
+ def content_type
53
+ 'text/html'
54
+ end
55
+
56
+ def body
57
+ @test_case.send :output_buffer
58
+ end
59
+ end
60
+
61
+ class ActionView::TestCase
62
+ include RailsJQueryAutocomplete::Autocomplete
63
+ include SimpleForm::ActionViewExtensions::FormHelper
64
+
65
+ setup :set_controller
66
+ setup :set_response
67
+ setup :setup_new_user
68
+
69
+ def assert_no_select(selector, value = nil)
70
+ assert_select(selector, :text => value, :count => 0)
71
+ end
72
+
73
+ def with_concat_form_for(*args, &block)
74
+ concat simple_form_for(*args, &block)
75
+ end
76
+
77
+ def with_input_for(object, attribute_name, type, options={})
78
+ with_concat_form_for(object) do |f|
79
+ f.input(attribute_name, options.merge(:as => type))
80
+ end
81
+ end
82
+
83
+ def set_controller
84
+ @controller = MockController.new
85
+ end
86
+
87
+ def set_response
88
+ @response = MockResponse.new(self)
89
+ end
90
+
91
+ def setup_new_user
92
+ @user = User.new(
93
+ :id => 1,
94
+ :name => 'New in SimpleForm!',
95
+ :description => 'Hello!',
96
+ :created_at => Time.now
97
+ )
98
+ end
99
+
100
+ def protect_against_forgery?
101
+ false
102
+ end
103
+
104
+ def user_path(*args)
105
+ '/users'
106
+ end
107
+ alias :users_path :user_path
108
+ end
metadata ADDED
@@ -0,0 +1,196 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-autocomplete
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - David Padilla
8
+ - Joiey Seeley
9
+ - Sundus Yousuf
10
+ - XPeppers
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2017-08-03 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rails
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: '4.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '4.0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3-ruby
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ - !ruby/object:Gem::Dependency
45
+ name: bson_ext
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ - !ruby/object:Gem::Dependency
59
+ name: test-unit
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :development
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: shoulda
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ - !ruby/object:Gem::Dependency
87
+ name: uglifier
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: rr
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: simple_form
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ description: Use jQuery's autocomplete plugin with Rails 4+.
129
+ email: david@padilla.cc joiey.seeley@gmail.com sundusahmedyousuf@gmail.com orione-team@xpeppers.com
130
+ executables: []
131
+ extensions: []
132
+ extra_rdoc_files: []
133
+ files:
134
+ - CHANGELOG.md
135
+ - LICENSE
136
+ - README.md
137
+ - Rakefile
138
+ - lib/assets/javascripts/autocomplete-rails-uncompressed.js
139
+ - lib/assets/javascripts/autocomplete-rails.js
140
+ - lib/cucumber/autocomplete.rb
141
+ - lib/generators/autocomplete/install_generator.rb
142
+ - lib/generators/autocomplete/uncompressed_generator.rb
143
+ - lib/rails-jquery-autocomplete.rb
144
+ - lib/rails-jquery-autocomplete/autocomplete.rb
145
+ - lib/rails-jquery-autocomplete/form_helper.rb
146
+ - lib/rails-jquery-autocomplete/formtastic.rb
147
+ - lib/rails-jquery-autocomplete/formtastic_plugin.rb
148
+ - lib/rails-jquery-autocomplete/orm.rb
149
+ - lib/rails-jquery-autocomplete/orm/active_record.rb
150
+ - lib/rails-jquery-autocomplete/rails/engine.rb
151
+ - lib/rails-jquery-autocomplete/simple_form_plugin.rb
152
+ - lib/rails-jquery-autocomplete/version.rb
153
+ - lib/steak/autocomplete.rb
154
+ - test/form_helper_test.rb
155
+ - test/generators/autocomplete/install_generator_test.rb
156
+ - test/generators/autocomplete/uncompressed_generator_test.rb
157
+ - test/lib/rails-jquery-autocomplete/autocomplete_test.rb
158
+ - test/lib/rails-jquery-autocomplete/orm/active_record_test.rb
159
+ - test/lib/rails-jquery-autocomplete/simple_form_plugin_test.rb
160
+ - test/lib/rails-jquery-autocomplete_test.rb
161
+ - test/test_helper.rb
162
+ - test/view_test_helper.rb
163
+ homepage: https://github.com/xpeppers/rails-jquery-autocomplete/
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project:
183
+ rubygems_version: 2.6.12
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Use jQuery's autocomplete plugin with Rails 4+.
187
+ test_files:
188
+ - test/form_helper_test.rb
189
+ - test/generators/autocomplete/install_generator_test.rb
190
+ - test/generators/autocomplete/uncompressed_generator_test.rb
191
+ - test/lib/rails-jquery-autocomplete/autocomplete_test.rb
192
+ - test/lib/rails-jquery-autocomplete/orm/active_record_test.rb
193
+ - test/lib/rails-jquery-autocomplete/simple_form_plugin_test.rb
194
+ - test/lib/rails-jquery-autocomplete_test.rb
195
+ - test/test_helper.rb
196
+ - test/view_test_helper.rb