auto_complete 0.0.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.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +23 -0
  5. data/README.md +37 -0
  6. data/Rakefile +8 -0
  7. data/app/helpers/auto_complete_macros_helper.rb +145 -0
  8. data/auto_complete.gemspec +25 -0
  9. data/lib/auto_complete.rb +13 -0
  10. data/lib/auto_complete/class_methods.rb +49 -0
  11. data/lib/auto_complete/version.rb +3 -0
  12. data/test/auto_complete_test.rb +55 -0
  13. data/test/dummy/.gitignore +15 -0
  14. data/test/dummy/Gemfile +38 -0
  15. data/test/dummy/README.rdoc +261 -0
  16. data/test/dummy/Rakefile +7 -0
  17. data/test/dummy/app/assets/images/rails.png +0 -0
  18. data/test/dummy/app/assets/javascripts/application.js +16 -0
  19. data/test/dummy/app/assets/javascripts/example.js.coffee +9 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  21. data/test/dummy/app/assets/swfs/example.swf +0 -0
  22. data/test/dummy/app/assets/swfs/source/Example.as +26 -0
  23. data/test/dummy/app/assets/swfs/source/example.fla +0 -0
  24. data/test/dummy/app/controllers/application_controller.rb +5 -0
  25. data/test/dummy/app/helpers/application_helper.rb +2 -0
  26. data/test/dummy/app/mailers/.gitkeep +0 -0
  27. data/test/dummy/app/models/.gitkeep +0 -0
  28. data/test/dummy/app/views/application/example.html.erb +7 -0
  29. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  30. data/test/dummy/config.ru +4 -0
  31. data/test/dummy/config/application.rb +67 -0
  32. data/test/dummy/config/boot.rb +6 -0
  33. data/test/dummy/config/database.yml +25 -0
  34. data/test/dummy/config/environment.rb +5 -0
  35. data/test/dummy/config/environments/development.rb +37 -0
  36. data/test/dummy/config/environments/production.rb +67 -0
  37. data/test/dummy/config/environments/test.rb +37 -0
  38. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  39. data/test/dummy/config/initializers/inflections.rb +15 -0
  40. data/test/dummy/config/initializers/mime_types.rb +5 -0
  41. data/test/dummy/config/initializers/secret_token.rb +7 -0
  42. data/test/dummy/config/initializers/session_store.rb +8 -0
  43. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  44. data/test/dummy/config/locales/en.yml +5 -0
  45. data/test/dummy/config/routes.rb +59 -0
  46. data/test/dummy/db/seeds.rb +7 -0
  47. data/test/dummy/lib/assets/.gitkeep +0 -0
  48. data/test/dummy/lib/tasks/.gitkeep +0 -0
  49. data/test/dummy/log/.gitkeep +0 -0
  50. data/test/dummy/public/404.html +26 -0
  51. data/test/dummy/public/422.html +26 -0
  52. data/test/dummy/public/500.html +25 -0
  53. data/test/dummy/public/favicon.ico +0 -0
  54. data/test/dummy/public/robots.txt +5 -0
  55. data/test/dummy/script/rails +6 -0
  56. data/test/dummy/test/fixtures/.gitkeep +0 -0
  57. data/test/dummy/test/functional/.gitkeep +0 -0
  58. data/test/dummy/test/integration/.gitkeep +0 -0
  59. data/test/dummy/test/test_helper.rb +13 -0
  60. data/test/dummy/test/unit/.gitkeep +0 -0
  61. data/test/dummy/vendor/assets/javascripts/.gitkeep +0 -0
  62. data/test/dummy/vendor/assets/stylesheets/.gitkeep +0 -0
  63. data/test/dummy/vendor/plugins/.gitkeep +0 -0
  64. data/test/test_helper.rb +19 -0
  65. metadata +202 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7c07000c74780498b78972c3f1079bb09c62d5a1
4
+ data.tar.gz: 4f957c335e169222ed8d1a9494215884382ddd15
5
+ SHA512:
6
+ metadata.gz: 2dbd5465d5ce60dcd7b190e6a4f76fe3610864db3b7308252c91f2203ece61fbdf5abd2749aaf20ce3f742fb9118ce66551c59a392b05da2d1ec173a6d045261
7
+ data.tar.gz: a8a2904e5709daa65f17341084b7722a3849c1d1491387e1862b0f55cb00be87f7259b7896b9b0acce9e2ebb1cb10238fccdd9c8b0b74c25ce19fd8711df12b6
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in auto_complete.gemspec
4
+ gemspec
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2007 David Heinemeier Hansson (original code)
2
+ Copyright (c) 2013 Marc-Andre Lafortune (gem)
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,37 @@
1
+ # AutoComplete
2
+
3
+ Gem port of the legacy auto_complete plugin for Rails 3+
4
+
5
+ ## Example
6
+
7
+ Add this line to your application's Gemfile:Example:
8
+
9
+ # Controller
10
+ class BlogController < ApplicationController
11
+ auto_complete_for :post, :title
12
+ end
13
+
14
+ # View
15
+ <%= text_field_with_auto_complete :post, title %>
16
+
17
+ By default, auto_complete_for limits the results to 10 entries,
18
+ and sorts by the given field.
19
+
20
+ auto_complete_for takes a third parameter, an options hash to
21
+ the find method used to search for the records:
22
+
23
+ auto_complete_for :post, :title, :limit => 15, :order => 'created_at DESC'
24
+
25
+ For more examples, see script.aculo.us:
26
+ * http://script.aculo.us/demos/ajax/autocompleter
27
+ * http://script.aculo.us/demos/ajax/autocompleter_customized
28
+
29
+ Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license
30
+
31
+ ## Contributing
32
+
33
+ 1. Fork it
34
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
35
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
36
+ 4. Push to the branch (`git push origin my-new-feature`)
37
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'lib' << 'test'
6
+ test.pattern = 'test/**/*_test.rb'
7
+ test.verbose = false
8
+ end
@@ -0,0 +1,145 @@
1
+ module AutoCompleteMacrosHelper
2
+ # Adds AJAX autocomplete functionality to the text input field with the
3
+ # DOM ID specified by +field_id+.
4
+ #
5
+ # This function expects that the called action returns an HTML <ul> list,
6
+ # or nothing if no entries should be displayed for autocompletion.
7
+ #
8
+ # You'll probably want to turn the browser's built-in autocompletion off,
9
+ # so be sure to include an <tt>autocomplete="off"</tt> attribute with your text
10
+ # input field.
11
+ #
12
+ # The autocompleter object is assigned to a Javascript variable named <tt>field_id</tt>_auto_completer.
13
+ # This object is useful if you for example want to trigger the auto-complete suggestions through
14
+ # other means than user input (for that specific case, call the <tt>activate</tt> method on that object).
15
+ #
16
+ # Required +options+ are:
17
+ # <tt>:url</tt>:: URL to call for autocompletion results
18
+ # in url_for format.
19
+ #
20
+ # Addtional +options+ are:
21
+ # <tt>:update</tt>:: Specifies the DOM ID of the element whose
22
+ # innerHTML should be updated with the autocomplete
23
+ # entries returned by the AJAX request.
24
+ # Defaults to <tt>field_id</tt> + '_auto_complete'
25
+ # <tt>:with</tt>:: A JavaScript expression specifying the
26
+ # parameters for the XMLHttpRequest. This defaults
27
+ # to 'fieldname=value'.
28
+ # <tt>:frequency</tt>:: Determines the time to wait after the last keystroke
29
+ # for the AJAX request to be initiated.
30
+ # <tt>:indicator</tt>:: Specifies the DOM ID of an element which will be
31
+ # displayed while autocomplete is running.
32
+ # <tt>:tokens</tt>:: A string or an array of strings containing
33
+ # separator tokens for tokenized incremental
34
+ # autocompletion. Example: <tt>:tokens => ','</tt> would
35
+ # allow multiple autocompletion entries, separated
36
+ # by commas.
37
+ # <tt>:min_chars</tt>:: The minimum number of characters that should be
38
+ # in the input field before an Ajax call is made
39
+ # to the server.
40
+ # <tt>:on_hide</tt>:: A Javascript expression that is called when the
41
+ # autocompletion div is hidden. The expression
42
+ # should take two variables: element and update.
43
+ # Element is a DOM element for the field, update
44
+ # is a DOM element for the div from which the
45
+ # innerHTML is replaced.
46
+ # <tt>:on_show</tt>:: Like on_hide, only now the expression is called
47
+ # then the div is shown.
48
+ # <tt>:after_update_element</tt>:: A Javascript expression that is called when the
49
+ # user has selected one of the proposed values.
50
+ # The expression should take two variables: element and value.
51
+ # Element is a DOM element for the field, value
52
+ # is the value selected by the user.
53
+ # <tt>:select</tt>:: Pick the class of the element from which the value for
54
+ # insertion should be extracted. If this is not specified,
55
+ # the entire element is used.
56
+ # <tt>:method</tt>:: Specifies the HTTP verb to use when the autocompletion
57
+ # request is made. Defaults to POST.
58
+ def auto_complete_field(field_id, options = {})
59
+ function = "var #{field_id}_auto_completer = new Ajax.Autocompleter("
60
+ function << "'#{field_id}', "
61
+ function << "'" + (options[:update] || "#{field_id}_auto_complete") + "', "
62
+ function << "'#{url_for(options[:url])}'"
63
+
64
+ js_options = {}
65
+ js_options[:tokens] = array_or_string_for_javascript(options[:tokens]) if options[:tokens]
66
+ js_options[:callback] = "function(element, value) { return #{options[:with]} }" if options[:with]
67
+ js_options[:indicator] = "'#{options[:indicator]}'" if options[:indicator]
68
+ js_options[:select] = "'#{options[:select]}'" if options[:select]
69
+ js_options[:paramName] = "'#{options[:param_name]}'" if options[:param_name]
70
+ js_options[:frequency] = "#{options[:frequency]}" if options[:frequency]
71
+ js_options[:method] = "'#{options[:method].to_s}'" if options[:method]
72
+
73
+ { :after_update_element => :afterUpdateElement,
74
+ :on_show => :onShow, :on_hide => :onHide, :min_chars => :minChars }.each do |k,v|
75
+ js_options[v] = options[k] if options[k]
76
+ end
77
+
78
+ function << (', ' + options_for_javascript(js_options) + ')')
79
+
80
+ javascript_tag(function)
81
+ end
82
+
83
+ # Use this method in your view to generate a return for the AJAX autocomplete requests.
84
+ #
85
+ # Example action:
86
+ #
87
+ # def auto_complete_for_item_title
88
+ # @items = Item.find(:all,
89
+ # :conditions => [ 'LOWER(description) LIKE ?',
90
+ # '%' + request.raw_post.downcase + '%' ])
91
+ # render :inline => "<%= auto_complete_result(@items, 'description') %>"
92
+ # end
93
+ #
94
+ # The auto_complete_result can of course also be called from a view belonging to the
95
+ # auto_complete action if you need to decorate it further.
96
+ def auto_complete_result(entries, field, phrase = nil)
97
+ return unless entries
98
+ items = entries.map { |entry| content_tag("li", phrase ? highlight(entry[field], phrase) : entry[field]) }
99
+ content_tag("ul", safe_join(items.uniq))
100
+ end
101
+
102
+ # Wrapper for text_field with added AJAX autocompletion functionality.
103
+ #
104
+ # In your controller, you'll need to define an action called
105
+ # auto_complete_for to respond the AJAX calls,
106
+ #
107
+ def text_field_with_auto_complete(object, method, tag_options = {}, completion_options = {})
108
+ (completion_options[:skip_style] ? "".html_safe : auto_complete_stylesheet) +
109
+ text_field(object, method, tag_options) +
110
+ content_tag("div", "", :id => "#{object}_#{method}_auto_complete", :class => "auto_complete") +
111
+ auto_complete_field("#{object}_#{method}", { :url => { :action => "auto_complete_for_#{object}_#{method}" } }.update(completion_options))
112
+ end
113
+
114
+ private
115
+ STYLE = <<-EOT.html_safe.freeze
116
+ div.auto_complete {
117
+ width: 350px;
118
+ background: #fff;
119
+ }
120
+ div.auto_complete ul {
121
+ border:1px solid #888;
122
+ margin:0;
123
+ padding:0;
124
+ width:100%;
125
+ list-style-type:none;
126
+ }
127
+ div.auto_complete ul li {
128
+ margin:0;
129
+ padding:3px;
130
+ }
131
+ div.auto_complete ul li.selected {
132
+ background-color: #ffb;
133
+ }
134
+ div.auto_complete ul strong.highlight {
135
+ color: #800;
136
+ margin:0;
137
+ padding:0;
138
+ }
139
+ EOT
140
+
141
+ def auto_complete_stylesheet
142
+ content_tag('style', STYLE, :type => Mime::CSS)
143
+ end
144
+
145
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'auto_complete/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "auto_complete"
8
+ spec.version = AutoComplete::VERSION
9
+ spec.authors = ["David Heinemeier Hansson, Marc-André Lafortune"]
10
+ spec.email = ["github@marc-andre.ca"]
11
+ spec.description = %q{Gem for the legacy auto_complete plugin}
12
+ spec.summary = %q{Gem for the legacy auto_complete plugin}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "rails", ">= 3.1"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ end
@@ -0,0 +1,13 @@
1
+ require "auto_complete/version"
2
+ require "auto_complete/class_methods"
3
+
4
+ module AutoComplete
5
+ class Engine < Rails::Engine
6
+ # Thanks to http://robots.thoughtbot.com/post/159805560/tips-for-writing-your-own-rails-engine for:
7
+ config.to_prepare do
8
+ ActionView::Helpers.send :include, AutoCompleteMacrosHelper
9
+ end
10
+ end
11
+ end
12
+
13
+ ActionController::Base.send :include, AutoComplete
@@ -0,0 +1,49 @@
1
+ module AutoComplete
2
+
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ #
8
+ # Example:
9
+ #
10
+ # # Controller
11
+ # class BlogController < ApplicationController
12
+ # auto_complete_for :post, :title
13
+ # end
14
+ #
15
+ # # View
16
+ # <%= text_field_with_auto_complete :post, title %>
17
+ #
18
+ # By default, auto_complete_for limits the results to 10 entries,
19
+ # and sorts by the given field.
20
+ #
21
+ # auto_complete_for takes a third parameter, an options hash to
22
+ # the find method used to search for the records:
23
+ #
24
+ # auto_complete_for :post, :title, :limit => 15, :order => 'created_at DESC'
25
+ #
26
+ # For help on defining text input fields with autocompletion,
27
+ # see ActionView::Helpers::JavaScriptHelper.
28
+ #
29
+ # For more examples, see script.aculo.us:
30
+ # * http://script.aculo.us/demos/ajax/autocompleter
31
+ # * http://script.aculo.us/demos/ajax/autocompleter_customized
32
+ module ClassMethods
33
+ def auto_complete_for(object, method, options = {})
34
+ define_method("auto_complete_for_#{object}_#{method}") do
35
+ table = object.to_s.camelize.constantize.table_name
36
+
37
+ find_options = {
38
+ :conditions => [ "LOWER(#{table}.#{method}) LIKE (?)", '%' + params[object][method].downcase + '%' ],
39
+ :order => "#{table}.#{method} ASC",
40
+ :limit => 10 }.merge!(options)
41
+
42
+ @items = object.to_s.camelize.constantize.find(:all, find_options)
43
+
44
+ render :inline => "<%= auto_complete_result @items, '#{method}' %>"
45
+ end
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,3 @@
1
+ module AutoComplete
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,55 @@
1
+ require './test/test_helper'
2
+
3
+ class AutoCompleteTest < ActionView::TestCase
4
+ def assert_dom_equal(expected, actual)
5
+ super
6
+ assert_equal true, actual.html_safe?
7
+ end
8
+
9
+ def url_for(opt)
10
+ "http://www.example.com/#{opt[:action]}"
11
+ end
12
+
13
+ def test_auto_complete_field
14
+ #stub!(:url_for).and_return("/path")
15
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {})\n//]]>\n</script>),
16
+ auto_complete_field("some_input", :url => { :action => "autocomplete" });
17
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {tokens:','})\n//]]>\n</script>),
18
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :tokens => ',');
19
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {tokens:[',']})\n//]]>\n</script>),
20
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :tokens => [',']);
21
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {minChars:3})\n//]]>\n</script>),
22
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :min_chars => 3);
23
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {onHide:function(element, update){alert('me');}})\n//]]>\n</script>),
24
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :on_hide => "function(element, update){alert('me');}");
25
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {frequency:2})\n//]]>\n</script>),
26
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :frequency => 2);
27
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {afterUpdateElement:function(element,value){alert('You have chosen: '+value)}})\n//]]>\n</script>),
28
+ auto_complete_field("some_input", :url => { :action => "autocomplete" },
29
+ :after_update_element => "function(element,value){alert('You have chosen: '+value)}");
30
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {paramName:'huidriwusch'})\n//]]>\n</script>),
31
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :param_name => 'huidriwusch');
32
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nvar some_input_auto_completer = new Ajax.Autocompleter('some_input', 'some_input_auto_complete', 'http://www.example.com/autocomplete', {method:'get'})\n//]]>\n</script>),
33
+ auto_complete_field("some_input", :url => { :action => "autocomplete" }, :method => :get);
34
+ end
35
+
36
+ def test_auto_complete_result
37
+ result = [ { :title => 'test1' }, { :title => 'test2' } ]
38
+ assert_dom_equal %(<ul><li>test1</li><li>test2</li></ul>),
39
+ auto_complete_result(result, :title)
40
+ assert_dom_equal %(<ul><li>t<strong class=\"highlight\">est</strong>1</li><li>t<strong class=\"highlight\">est</strong>2</li></ul>),
41
+ auto_complete_result(result, :title, "est")
42
+
43
+ resultuniq = [ { :title => 'test1' }, { :title => 'test1' } ]
44
+ assert_dom_equal %(<ul><li>t<strong class=\"highlight\">est</strong>1</li></ul>),
45
+ auto_complete_result(resultuniq, :title, "est")
46
+ end
47
+
48
+ def test_text_field_with_auto_complete
49
+ assert_match %(<style type="text/css">),
50
+ text_field_with_auto_complete(:message, :recipient)
51
+
52
+ assert_dom_equal %(<input id=\"message_recipient\" name=\"message[recipient]\" size=\"30\" type=\"text\" /><div class=\"auto_complete\" id=\"message_recipient_auto_complete\"></div><script type=\"text/javascript\">\n//<![CDATA[\nvar message_recipient_auto_completer = new Ajax.Autocompleter('message_recipient', 'message_recipient_auto_complete', 'http://www.example.com/auto_complete_for_message_recipient', {})\n//]]>\n</script>),
53
+ text_field_with_auto_complete(:message, :recipient, {}, :skip_style => true)
54
+ end
55
+ end
@@ -0,0 +1,15 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile ~/.gitignore_global
6
+
7
+ # Ignore bundler config
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+
13
+ # Ignore all logfiles and tempfiles.
14
+ /log/*.log
15
+ /tmp
@@ -0,0 +1,38 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', '3.2.6'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ # gem 'sqlite3'
9
+
10
+ # Gems used only for assets and not required
11
+ # in production environments by default.
12
+ group :assets do
13
+ gem 'sass-rails', '~> 3.2.3'
14
+ gem 'coffee-rails', '~> 3.2.1'
15
+
16
+ # See https://github.com/sstephenson/execjs#readme for more supported runtimes
17
+ # gem 'therubyracer', :platforms => :ruby
18
+
19
+ gem 'uglifier', '>= 1.0.3'
20
+ end
21
+
22
+ gem 'jquery-rails'
23
+
24
+ gem 'auto_complete', :path => "../.."
25
+ # To use ActiveModel has_secure_password
26
+ # gem 'bcrypt-ruby', '~> 3.0.0'
27
+
28
+ # To use Jbuilder templates for JSON
29
+ # gem 'jbuilder'
30
+
31
+ # Use unicorn as the app server
32
+ # gem 'unicorn'
33
+
34
+ # Deploy with Capistrano
35
+ # gem 'capistrano'
36
+
37
+ # To use debugger
38
+ # gem 'debugger'