rails3-jquery-autocomplete 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. data/CHANGELOG.md +1 -0
  2. data/README.markdown +11 -2
  3. data/Rakefile +8 -0
  4. data/integration/app/views/id_elements/new.html.haml +1 -1
  5. data/integration/public/javascripts/autocomplete-rails.js +2 -99
  6. data/lib/generators/templates/autocomplete-rails-uncompressed.js +4 -4
  7. data/lib/generators/templates/autocomplete-rails.js +2 -2
  8. data/lib/rails3-jquery-autocomplete.rb +7 -6
  9. data/lib/rails3-jquery-autocomplete/autocomplete.rb +87 -41
  10. data/lib/rails3-jquery-autocomplete/orm.rb +8 -0
  11. data/lib/rails3-jquery-autocomplete/orm/active_record.rb +47 -0
  12. data/lib/rails3-jquery-autocomplete/orm/mongo_mapper.rb +30 -0
  13. data/lib/rails3-jquery-autocomplete/orm/mongoid.rb +30 -0
  14. data/lib/rails3-jquery-autocomplete/version.rb +1 -1
  15. data/rails3-jquery-autocomplete.gemspec +2 -1
  16. data/test/generators/autocomplete/install_generator_test.rb +1 -1
  17. data/test/generators/autocomplete/uncompressed_generator_test.rb +2 -2
  18. data/test/lib/rails3-jquery-autocomplete/autocomplete_test.rb +59 -0
  19. data/test/lib/rails3-jquery-autocomplete/orm/active_record_test.rb +130 -0
  20. data/test/lib/rails3-jquery-autocomplete/orm/mongo_mapper_test.rb +60 -0
  21. data/test/lib/rails3-jquery-autocomplete/orm/mongoid_test.rb +60 -0
  22. data/test/lib/rails3-jquery-autocomplete_test.rb +38 -0
  23. data/test/test_helper.rb +5 -2
  24. metadata +56 -41
  25. data/lib/rails3-jquery-autocomplete/helpers.rb +0 -137
  26. data/test/implementations_test.rb +0 -41
  27. data/test/lib/rails3-jquery-autocomplete/helpers_test.rb +0 -16
  28. data/test/support/active_record.rb +0 -44
  29. data/test/support/mongo_mapper.rb +0 -39
  30. data/test/support/mongoid.rb +0 -43
  31. data/test/test_controller.rb +0 -101
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: 63
4
+ hash: 59
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 8
8
+ - 9
9
9
  - 0
10
- version: 0.8.0
10
+ version: 0.9.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: 2011-06-18 00:00:00 -05:00
18
+ date: 2011-07-07 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -33,24 +33,10 @@ dependencies:
33
33
  version: "3.0"
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: yajl-ruby
38
- prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
48
- type: :runtime
49
- version_requirements: *id002
50
36
  - !ruby/object:Gem::Dependency
51
37
  name: sqlite3-ruby
52
38
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
54
40
  none: false
55
41
  requirements:
56
42
  - - ">="
@@ -60,11 +46,11 @@ dependencies:
60
46
  - 0
61
47
  version: "0"
62
48
  type: :development
63
- version_requirements: *id003
49
+ version_requirements: *id002
64
50
  - !ruby/object:Gem::Dependency
65
51
  name: mongoid
66
52
  prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
53
+ requirement: &id003 !ruby/object:Gem::Requirement
68
54
  none: false
69
55
  requirements:
70
56
  - - ">="
@@ -76,11 +62,11 @@ dependencies:
76
62
  - 0
77
63
  version: 2.0.0
78
64
  type: :development
79
- version_requirements: *id004
65
+ version_requirements: *id003
80
66
  - !ruby/object:Gem::Dependency
81
67
  name: mongo_mapper
82
68
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
69
+ requirement: &id004 !ruby/object:Gem::Requirement
84
70
  none: false
85
71
  requirements:
86
72
  - - ">="
@@ -91,11 +77,11 @@ dependencies:
91
77
  - 9
92
78
  version: "0.9"
93
79
  type: :development
94
- version_requirements: *id005
80
+ version_requirements: *id004
95
81
  - !ruby/object:Gem::Dependency
96
82
  name: bson_ext
97
83
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
84
+ requirement: &id005 !ruby/object:Gem::Requirement
99
85
  none: false
100
86
  requirements:
101
87
  - - ~>
@@ -107,11 +93,11 @@ dependencies:
107
93
  - 0
108
94
  version: 1.3.0
109
95
  type: :development
110
- version_requirements: *id006
96
+ version_requirements: *id005
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: shoulda
113
99
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::Requirement
100
+ requirement: &id006 !ruby/object:Gem::Requirement
115
101
  none: false
116
102
  requirements:
117
103
  - - ~>
@@ -123,10 +109,24 @@ dependencies:
123
109
  - 1
124
110
  version: 2.11.1
125
111
  type: :development
126
- version_requirements: *id007
112
+ version_requirements: *id006
127
113
  - !ruby/object:Gem::Dependency
128
114
  name: uglifier
129
115
  prerelease: false
116
+ requirement: &id007 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ hash: 3
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ type: :development
126
+ version_requirements: *id007
127
+ - !ruby/object:Gem::Dependency
128
+ name: rr
129
+ prerelease: false
130
130
  requirement: &id008 !ruby/object:Gem::Requirement
131
131
  none: false
132
132
  requirements:
@@ -138,6 +138,20 @@ dependencies:
138
138
  version: "0"
139
139
  type: :development
140
140
  version_requirements: *id008
141
+ - !ruby/object:Gem::Dependency
142
+ name: rcov
143
+ prerelease: false
144
+ requirement: &id009 !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ hash: 3
150
+ segments:
151
+ - 0
152
+ version: "0"
153
+ type: :development
154
+ version_requirements: *id009
141
155
  description: Use jQuery's autocomplete plugin with Rails 3.
142
156
  email: david.padilla@crowdint.com
143
157
  executables: []
@@ -253,7 +267,10 @@ files:
253
267
  - lib/rails3-jquery-autocomplete/autocomplete.rb
254
268
  - lib/rails3-jquery-autocomplete/form_helper.rb
255
269
  - lib/rails3-jquery-autocomplete/formtastic_plugin.rb
256
- - lib/rails3-jquery-autocomplete/helpers.rb
270
+ - lib/rails3-jquery-autocomplete/orm.rb
271
+ - lib/rails3-jquery-autocomplete/orm/active_record.rb
272
+ - lib/rails3-jquery-autocomplete/orm/mongo_mapper.rb
273
+ - lib/rails3-jquery-autocomplete/orm/mongoid.rb
257
274
  - lib/rails3-jquery-autocomplete/simple_form_plugin.rb
258
275
  - lib/rails3-jquery-autocomplete/version.rb
259
276
  - lib/steak/autocomplete.rb
@@ -261,12 +278,11 @@ files:
261
278
  - test/form_helper_test.rb
262
279
  - test/generators/autocomplete/install_generator_test.rb
263
280
  - test/generators/autocomplete/uncompressed_generator_test.rb
264
- - test/implementations_test.rb
265
- - test/lib/rails3-jquery-autocomplete/helpers_test.rb
266
- - test/support/active_record.rb
267
- - test/support/mongo_mapper.rb
268
- - test/support/mongoid.rb
269
- - test/test_controller.rb
281
+ - test/lib/rails3-jquery-autocomplete/autocomplete_test.rb
282
+ - test/lib/rails3-jquery-autocomplete/orm/active_record_test.rb
283
+ - test/lib/rails3-jquery-autocomplete/orm/mongo_mapper_test.rb
284
+ - test/lib/rails3-jquery-autocomplete/orm/mongoid_test.rb
285
+ - test/lib/rails3-jquery-autocomplete_test.rb
270
286
  - test/test_helper.rb
271
287
  has_rdoc: true
272
288
  homepage: http://github.com/crowdint/rails3-jquery-autocomplete
@@ -306,10 +322,9 @@ test_files:
306
322
  - test/form_helper_test.rb
307
323
  - test/generators/autocomplete/install_generator_test.rb
308
324
  - test/generators/autocomplete/uncompressed_generator_test.rb
309
- - test/implementations_test.rb
310
- - test/lib/rails3-jquery-autocomplete/helpers_test.rb
311
- - test/support/active_record.rb
312
- - test/support/mongo_mapper.rb
313
- - test/support/mongoid.rb
314
- - test/test_controller.rb
325
+ - test/lib/rails3-jquery-autocomplete/autocomplete_test.rb
326
+ - test/lib/rails3-jquery-autocomplete/orm/active_record_test.rb
327
+ - test/lib/rails3-jquery-autocomplete/orm/mongo_mapper_test.rb
328
+ - test/lib/rails3-jquery-autocomplete/orm/mongoid_test.rb
329
+ - test/lib/rails3-jquery-autocomplete_test.rb
315
330
  - test/test_helper.rb
@@ -1,137 +0,0 @@
1
- module Rails3JQueryAutocomplete
2
-
3
- # Contains utility methods used by autocomplete
4
- module Helpers
5
-
6
- #
7
- # Returns a hash with three keys actually used by the Autocomplete jQuery-ui
8
- # Can be overriden to show whatever you like
9
- # Hash also includes a key/value pair for each method in extra_data
10
- #
11
- def json_for_autocomplete(items, method, extra_data=nil)
12
- items.collect do |item|
13
- hash = {"id" => item.id.to_s, "label" => item.send(method), "value" => item.send(method)}
14
- extra_data.each do |datum|
15
- hash[datum] = item.send(datum)
16
- end if extra_data
17
- hash
18
- end
19
- end
20
-
21
- # Returns parameter model_sym as a constant
22
- #
23
- # get_object(:actor)
24
- # # returns a Actor constant supposing it is already defined
25
- #
26
- def get_object(model_sym)
27
- object = model_sym.to_s.camelize.constantize
28
- end
29
-
30
- # Returns a symbol representing what implementation should be used to query
31
- # the database and raises *NotImplementedError* if ORM implementor can not be found
32
- def get_implementation(object)
33
- ancestors_ary = object.ancestors.collect(&:to_s)
34
- if ancestors_ary.include?('ActiveRecord::Base')
35
- :activerecord
36
- elsif ancestors_ary.include?('Mongoid::Document')
37
- :mongoid
38
- elsif ancestors_ary.include?('MongoMapper::Document')
39
- :mongo_mapper
40
- else
41
- raise NotImplementedError
42
- end
43
- end
44
-
45
- #DEPRECATED
46
- def get_order(implementation, method, options)
47
- warn 'Rails3JQueryAutocomplete#get_order is has been DEPRECATED, please use #get_autocomplete_order instead'
48
- get_autocomplete_order(implementation, method, options)
49
- end
50
-
51
- # Returns the order parameter to be used in the query created by get_items
52
- def get_autocomplete_order(implementation, method, options, model=nil)
53
- order = options[:order]
54
-
55
- case implementation
56
- when :mongoid then
57
- if order
58
- order.split(',').collect do |fields|
59
- sfields = fields.split
60
- [sfields[0].downcase.to_sym, sfields[1].downcase.to_sym]
61
- end
62
- else
63
- [[method.to_sym, :asc]]
64
- end
65
- when :mongo_mapper then
66
- if order
67
- order.split(',').collect do |fields|
68
- sfields = fields.split
69
- [sfields[0].downcase.to_sym, sfields[1].downcase.to_sym]
70
- end
71
- else
72
- [[method.to_sym, :asc]]
73
- end
74
- when :activerecord then
75
- table_prefix = model ? "#{model.table_name}." : ""
76
- order || "#{table_prefix}#{method} ASC"
77
- end
78
- end
79
-
80
- # DEPRECATED
81
- def get_limit(options)
82
- warn 'Rails3JQueryAutocomplete#get_limit is has been DEPRECATED, please use #get_autocomplete_limit instead'
83
- get_autocomplete_limit(options)
84
- end
85
-
86
- # Returns a limit that will be used on the query
87
- def get_autocomplete_limit(options)
88
- options[:limit] ||= 10
89
- end
90
-
91
- # DEPRECATED
92
- def get_items(parameters)
93
- warn 'Rails3JQueryAutocomplete#get_items is has been DEPRECATED, you should use #get_autocomplete_items instead'
94
- get_autocomplete_items(parameters)
95
- end
96
-
97
- #
98
- # Can be overriden to return or filter however you like
99
- # the objects to be shown by autocomplete
100
- #
101
- # items = get_autocomplete_items(:model => get_object(object), :options => options, :term => term, :method => method)
102
- #
103
- def get_autocomplete_items(parameters)
104
- model = parameters[:model]
105
- term = parameters[:term]
106
- method = parameters[:method]
107
- options = parameters[:options]
108
-
109
- is_full_search = options[:full]
110
- scopes = Array(options[:scopes])
111
- limit = get_autocomplete_limit(options)
112
- implementation = get_implementation(model)
113
- order = get_autocomplete_order(implementation, method, options, model)
114
-
115
- like_clause = (defined?(PGconn) ? 'ILIKE' : 'LIKE')
116
-
117
- implementation == :mongo_mapper ? (items = model.query) : items = model.scoped
118
-
119
- scopes.each { |scope| items = items.send(scope) } unless scopes.empty?
120
-
121
- case implementation
122
- when :mongoid
123
- search = (is_full_search ? '.*' : '^') + term + '.*'
124
- items = model.where(method.to_sym => /#{search}/i).limit(limit).order_by(order)
125
- when :mongo_mapper
126
- search = (is_full_search ? '.*' : '^') + term + '.*'
127
- items = model.where(method.to_sym => /#{search}/i).limit(limit).sort(order)
128
- when :activerecord
129
- table_name = model.table_name
130
- items = items.select(["#{table_name}.#{model.primary_key}", "#{table_name}.#{method}"] + (options[:extra_data].blank? ? [] : options[:extra_data])) unless options[:full_model]
131
- items = items.where(["LOWER(#{table_name}.#{method}) #{like_clause} ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]) \
132
- .limit(limit).order(order)
133
- end
134
- end
135
- end
136
- end
137
-
@@ -1,41 +0,0 @@
1
- require "test_helper"
2
- require 'test_controller'
3
- require 'support/mongoid'
4
- require 'support/mongo_mapper'
5
- require 'support/active_record'
6
-
7
- class ActiveRecordControllerTest < ActionController::TestCase
8
- include Rails3JQueryAutocomplete::TestCase::ActiveRecord
9
- include Rails3JQueryAutocomplete::TestCase
10
- end
11
-
12
- class ActiveRecordSTIControllerTest < ActionController::TestCase
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
37
-
38
- class MongoMapperControllerTest < ActionController::TestCase
39
- include Rails3JQueryAutocomplete::TestCase::MongoMapper
40
- include Rails3JQueryAutocomplete::TestCase
41
- end
@@ -1,16 +0,0 @@
1
- require 'test_helper'
2
-
3
- module Rails3JQueryAutocomplete
4
- module Test
5
- class HelpersTest < ::Test::Unit::TestCase
6
- include Rails3JQueryAutocomplete::Helpers
7
-
8
- context 'passing a query result' do
9
- should 'parse items to JSON' do
10
- response = self.json_for_autocomplete([], :name)
11
- assert_not_nil(response)
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,44 +0,0 @@
1
- module Rails3JQueryAutocomplete
2
- module TestCase
3
- module ActiveRecord
4
- def setup
5
- ::ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
6
- ::ActiveRecord::Schema.define(:version => 1) do
7
- create_table :movies do |t|
8
- t.column :name, :string
9
- end
10
- end
11
-
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')
19
- end
20
-
21
- def teardown
22
- destroy_models
23
- ::ActiveRecord::Base.connection.tables.each do |table|
24
- ::ActiveRecord::Base.connection.drop_table(table)
25
- end
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
-
42
- end
43
- end
44
- end
@@ -1,39 +0,0 @@
1
- module Rails3JQueryAutocomplete
2
- module TestCase
3
- module MongoMapper
4
- def setup
5
- ::MongoMapper.connection = Mongo::Connection.new('localhost', 27017)
6
- ::MongoMapper.database = "rails3_jquery_autocomplete_test"
7
-
8
- create_models
9
-
10
- @controller = ActorsController.new
11
- @movie1 = @movie_class.create(:name => 'Alpha')
12
- @movie2 = @movie_class.create(:name => 'Alspha')
13
- @movie3 = @movie_class.create(:name => 'Alzpha')
14
- end
15
-
16
- def teardown
17
- destroy_models
18
- ::MongoMapper.database.collections.select {|c| c.name !~ /system/ }.each(&:drop)
19
- end
20
-
21
- private
22
- def create_models
23
- @movie_class = Object.const_set(:Movie, Class.new)
24
- @movie_class.send(:include, ::MongoMapper::Document)
25
- @movie_class.key(:name, :class => String)
26
- @movie_class.class_eval do
27
- def display_name
28
- "Movie: #{name}"
29
- end
30
- end
31
- end
32
-
33
- def destroy_models
34
- Object.send(:remove_const, :Movie)
35
- end
36
-
37
- end
38
- end
39
- end