autocomplete 1.0.1 → 1.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ data.tar.gz: 62e73fc4b6f0a72965949f13235ce9341047b4cb
4
+ metadata.gz: 7908775c05e267582ddc8ede2bd9303a93f41809
5
+ SHA512:
6
+ data.tar.gz: 9d83c69f6c2f055a3346f4c709077f3d9e81012c6abe4e738509423c9d81e6abc26518d7d8f0d7a7789491e63f96bc2d9878f2e90cae0fc3636615ed9a41eec8
7
+ metadata.gz: a140b84e2c33ed886797efc6226baec6fd2927c1c6a7cc2689a0ac1cc6c88d8f7d0f588f3d460e6a0003c2aa593aee77241ccc00c26cf0106bffc5c4fb9b66d4
data/Manifest CHANGED
@@ -1,11 +1,11 @@
1
1
  MIT-LICENSE
2
+ Manifest
2
3
  README.rdoc
3
4
  Rakefile
4
5
  assets/autocomplete-loading.gif
5
6
  assets/autocomplete.css
6
7
  assets/autocomplete.js
7
8
  autocomplete.gemspec
8
- id_rsa.pub
9
9
  init.rb
10
10
  install.rb
11
11
  lib/autocomplete.rb
@@ -13,4 +13,3 @@ lib/autocomplete_controller.rb
13
13
  lib/autocomplete_helper.rb
14
14
  tasks/autocomplete_tasks.rake
15
15
  test/autocomplete_test.rb
16
- Manifest
data/Rakefile CHANGED
@@ -2,12 +2,12 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require "echoe"
4
4
 
5
- Echoe.new('autocomplete', '1.0.1') do |p|
5
+ Echoe.new('autocomplete', '1.0.2') do |p|
6
6
  p.description = "Insert an autocomplete-search-box inside your view"
7
- p.url = "http://www.voja-jovanovic.info"
7
+ p.url = "http://www.vojajovanovic.com"
8
8
  p.author = "Voislav Jovanovic"
9
9
  p.email = "voislavj@gmail.com"
10
- p.ignore_pattern = ["tmp/*", "script/*"]
10
+ p.ignore_pattern = ["tmp/*", "script/*", "pkg*"]
11
11
  p.development_dependencies = []
12
12
  end
13
13
 
@@ -1,74 +1,74 @@
1
- .autocomplete-loading {
2
- background-image:url(/images/autocomplete-loading.gif);
3
- background-repeat: no-repeat;
4
- background-position: 98% center;
5
- }
6
- .autocomplete-multi-controls .autocomplete-remove {
7
- float:right;
8
- margin-bottom:5px;
9
- }
10
- .autocomplete-multi-controls a {
11
- outline:none;
12
- }
13
- .autocomplete-multi-container {
14
- width:200px;
15
- clear:both;
16
- border:1px solid #ccc;
17
- overflow:auto;
18
- }
19
- .autocomplete-multi-rowset {
20
- padding:2px 4px;
21
- border-bottom:1px dotted #ddd;
22
- cursor:default;
23
- }
24
- .autocomplete-multi-rowset:hover {
25
- background-color:#E8730C;
26
- color:#fff;
27
- }
28
- .autocomplete-multi-rowset.selected,
29
- .autocomplete-multi-rowset.selected:hover {
30
- background:#eee;color:#000
31
- }
32
- .autocomplete-multi-rowset label{margin-left:5px;}
33
- .autocomplete-multi-rowset:hover label{color:#fff}
34
- .autocomplete-multi-rowset.selected:hover label{color:#000}
35
-
36
- .autocomplete-list {
37
- list-style-type:none;
38
- position:absolute;
39
- background:#fff;
40
- border:1px solid #ccc;
41
- width:300px;
42
- max-height:200px;
43
- overflow:auto;
44
- }
45
- .autocomplete-list li{
46
- margin:0;
47
- padding:0;
48
- }
49
- .autocomplete-list li.empty{
50
- padding:2px 4px;
51
- color:#777;
52
- }
53
- .autocomplete-list li.odd {
54
- background:#eee;
55
- }
56
- .autocomplete-list a {
57
- display:block;
58
- text-decoration:none;
59
- padding:2px 4px;
60
- outline:none;
61
- }
62
- .autocomplete-list a:focus,
63
- .autocomplete-list a:hover {
64
- background:Highlight;
65
- color:HighlightText;
66
- }
67
- .autocomplete-multi-status {
68
- width:192px;
69
- background:#ccc;
70
- font-size:10px;
71
- color:#555;
72
- padding:2px 5px;
73
- text-align:right;
1
+ .autocomplete-loading {
2
+ background-image:url(/images/autocomplete-loading.gif);
3
+ background-repeat: no-repeat;
4
+ background-position: 98% center;
5
+ }
6
+ .autocomplete-multi-controls .autocomplete-remove {
7
+ float:right;
8
+ margin-bottom:5px;
9
+ }
10
+ .autocomplete-multi-controls a {
11
+ outline:none;
12
+ }
13
+ .autocomplete-multi-container {
14
+ width:200px;
15
+ clear:both;
16
+ border:1px solid #ccc;
17
+ overflow:auto;
18
+ }
19
+ .autocomplete-multi-rowset {
20
+ padding:2px 4px;
21
+ border-bottom:1px dotted #ddd;
22
+ cursor:default;
23
+ }
24
+ .autocomplete-multi-rowset:hover {
25
+ background-color:#E8730C;
26
+ color:#fff;
27
+ }
28
+ .autocomplete-multi-rowset.selected,
29
+ .autocomplete-multi-rowset.selected:hover {
30
+ background:#eee;color:#000
31
+ }
32
+ .autocomplete-multi-rowset label{margin-left:5px;}
33
+ .autocomplete-multi-rowset:hover label{color:#fff}
34
+ .autocomplete-multi-rowset.selected:hover label{color:#000}
35
+
36
+ .autocomplete-list {
37
+ list-style-type:none;
38
+ position:absolute;
39
+ background:#fff;
40
+ border:1px solid #ccc;
41
+ width:300px;
42
+ max-height:200px;
43
+ overflow:auto;
44
+ }
45
+ .autocomplete-list li{
46
+ margin:0;
47
+ padding:0;
48
+ }
49
+ .autocomplete-list li.empty{
50
+ padding:2px 4px;
51
+ color:#777;
52
+ }
53
+ .autocomplete-list li.odd {
54
+ background:#eee;
55
+ }
56
+ .autocomplete-list a {
57
+ display:block;
58
+ text-decoration:none;
59
+ padding:2px 4px;
60
+ outline:none;
61
+ }
62
+ .autocomplete-list a:focus,
63
+ .autocomplete-list a:hover {
64
+ background:Highlight;
65
+ color:HighlightText;
66
+ }
67
+ .autocomplete-multi-status {
68
+ width:192px;
69
+ background:#ccc;
70
+ font-size:10px;
71
+ color:#555;
72
+ padding:2px 5px;
73
+ text-align:right;
74
74
  }
@@ -1,31 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # stub: autocomplete 1.0.2 ruby lib
2
3
 
3
4
  Gem::Specification.new do |s|
4
- s.name = %q{autocomplete}
5
- s.version = "1.0.1"
5
+ s.name = "autocomplete"
6
+ s.version = "1.0.2"
6
7
 
7
8
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
9
+ s.require_paths = ["lib"]
8
10
  s.authors = ["Voislav Jovanovic"]
9
- s.date = %q{2010-07-23}
10
- s.description = %q{Insert an autocomplete-search-box inside your view}
11
- s.email = %q{voislavj@gmail.com}
11
+ s.date = "2014-03-24"
12
+ s.description = "Insert an autocomplete-search-box inside your view"
13
+ s.email = "voislavj@gmail.com"
12
14
  s.extra_rdoc_files = ["README.rdoc", "lib/autocomplete.rb", "lib/autocomplete_controller.rb", "lib/autocomplete_helper.rb", "tasks/autocomplete_tasks.rake"]
13
- s.files = ["MIT-LICENSE", "README.rdoc", "Rakefile", "assets/autocomplete-loading.gif", "assets/autocomplete.css", "assets/autocomplete.js", "autocomplete.gemspec", "id_rsa.pub", "init.rb", "install.rb", "lib/autocomplete.rb", "lib/autocomplete_controller.rb", "lib/autocomplete_helper.rb", "tasks/autocomplete_tasks.rake", "test/autocomplete_test.rb", "Manifest"]
14
- s.homepage = %q{http://www.voja-jovanovic.info}
15
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Autocomplete", "--main", "README.rdoc"]
16
- s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{autocomplete}
18
- s.rubygems_version = %q{1.3.7}
19
- s.summary = %q{Insert an autocomplete-search-box inside your view}
15
+ s.files = ["MIT-LICENSE", "Manifest", "README.rdoc", "Rakefile", "assets/autocomplete-loading.gif", "assets/autocomplete.css", "assets/autocomplete.js", "autocomplete.gemspec", "init.rb", "install.rb", "lib/autocomplete.rb", "lib/autocomplete_controller.rb", "lib/autocomplete_helper.rb", "tasks/autocomplete_tasks.rake", "test/autocomplete_test.rb"]
16
+ s.homepage = "http://www.vojajovanovic.com"
17
+ s.rdoc_options = ["--line-numbers", "--title", "Autocomplete", "--main", "README.rdoc"]
18
+ s.rubyforge_project = "autocomplete"
19
+ s.rubygems_version = "2.2.2"
20
+ s.summary = "Insert an autocomplete-search-box inside your view"
20
21
  s.test_files = ["test/autocomplete_test.rb"]
21
-
22
- if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
- s.specification_version = 3
25
-
26
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
- else
28
- end
29
- else
30
- end
31
22
  end
@@ -1,78 +1,78 @@
1
- class AutocompleteController < ActionController::Base
2
-
3
- def find
4
- params[:map] = {:value=>[:id], :label=>[:name], :search=>[:name]} unless params[:map]
5
- params[:limit] ||= 50
6
- params[:skip] ||= []
7
- params[:map][:search] ||= []
8
- params[:glue] ||= " "
9
-
10
- params[:joins] ||= []
11
-
12
- @modelname = params[:model]
13
- @model = params[:model].constantize
14
-
15
- params[:map][:label] = parse_table_fields(params[:map][:label])
16
- params[:map][:value] = parse_table_fields(params[:map][:value])
17
- params[:map][:search] = parse_table_fields(params[:map][:search])
18
-
19
- params[:joins].each_with_index do |v,k|
20
- params[:joins][k] = eval(":#{v}")
21
- end
22
-
23
- value = "CONCAT_WS(' ',#{params[:map][:value].join(",")})"
24
- label = "CONCAT_WS('#{params[:glue]}',#{params[:map][:label].join(",")})"
25
- search = "CONCAT_WS(' ',#{(params[:map][:label]|params[:map][:search]).join(",")})"
26
-
27
- skip = ""
28
- toskip = ""
29
-
30
- params[:skip].each do |s|
31
- toskip += ","
32
- unless s.to_s.match(/^\d+$/i)
33
- s = "'#{s}'"
34
- end
35
- toskip += s
36
- end
37
-
38
- toskip = toskip.gsub(/^,/, "")
39
- if params[:skip].length>0
40
- skip = "AND #{value} NOT IN(#{toskip})"
41
- end
42
-
43
- debug params[:joins]
44
-
45
- result = @model.find(
46
- :all, {
47
- :select => "#{value} as `value`, #{label} as `label`",
48
- :conditions => ["#{search} LIKE ? #{skip}", "%" + params[:keyword].gsub("%", "\%") + "%"],
49
- :joins => params[:joins],
50
- :order => "label",
51
- :limit => params[:limit]
52
- }
53
- );
54
- render :text => result.to_json
55
- end
56
-
57
- def debug(var, mode="w")
58
- File.open("D:\\voja.log", mode) {|f| f.write(var.to_yaml); f.close}
59
- end
60
-
61
- def parse_table_fields(arr)
62
- single = false
63
- unless arr.is_a?(Array)
64
- arr = [arr]
65
- single = true
66
- end
67
-
68
- arr.each_with_index do |v,k|
69
- puts v.inspect + " => " + v.to_s.inspect
70
- if v.to_s.match(/\./)
71
- items = v.to_s.split(".",2)
72
- arr[k] = "#{items[0].constantize.table_name}.#{items[1]}"
73
- end
74
- end
75
- return single ? arr[0] : arr;
76
- end
77
-
1
+ class AutocompleteController < ActionController::Base
2
+
3
+ def find
4
+ params[:map] = {:value=>[:id], :label=>[:name], :search=>[:name]} unless params[:map]
5
+ params[:limit] ||= 50
6
+ params[:skip] ||= []
7
+ params[:map][:search] ||= []
8
+ params[:glue] ||= " "
9
+
10
+ params[:joins] ||= []
11
+
12
+ @modelname = params[:model]
13
+ @model = params[:model].constantize
14
+
15
+ params[:map][:label] = parse_table_fields(params[:map][:label])
16
+ params[:map][:value] = parse_table_fields(params[:map][:value])
17
+ params[:map][:search] = parse_table_fields(params[:map][:search])
18
+
19
+ params[:joins].each_with_index do |v,k|
20
+ params[:joins][k] = eval(":#{v}")
21
+ end
22
+
23
+ value = "CONCAT_WS(' ',#{params[:map][:value].join(",")})"
24
+ label = "CONCAT_WS('#{params[:glue]}',#{params[:map][:label].join(",")})"
25
+ search = "CONCAT_WS(' ',#{(params[:map][:label]|params[:map][:search]).join(",")})"
26
+
27
+ skip = ""
28
+ toskip = ""
29
+
30
+ params[:skip].each do |s|
31
+ toskip += ","
32
+ unless s.to_s.match(/^\d+$/i)
33
+ s = "'#{s}'"
34
+ end
35
+ toskip += s
36
+ end
37
+
38
+ toskip = toskip.gsub(/^,/, "")
39
+ if params[:skip].length>0
40
+ skip = "AND #{value} NOT IN(#{toskip})"
41
+ end
42
+
43
+ debug params[:joins]
44
+
45
+ result = @model.find(
46
+ :all, {
47
+ :select => "#{value} as `value`, #{label} as `label`",
48
+ :conditions => ["#{search} LIKE ? #{skip}", "%" + params[:keyword].gsub("%", "\%") + "%"],
49
+ :joins => params[:joins],
50
+ :order => "label",
51
+ :limit => params[:limit]
52
+ }
53
+ );
54
+ render :text => result.to_json
55
+ end
56
+
57
+ def debug(var, mode="w")
58
+ File.open("D:\\voja.log", mode) {|f| f.write(var.to_yaml); f.close}
59
+ end
60
+
61
+ def parse_table_fields(arr)
62
+ single = false
63
+ unless arr.is_a?(Array)
64
+ arr = [arr]
65
+ single = true
66
+ end
67
+
68
+ arr.each_with_index do |v,k|
69
+ puts v.inspect + " => " + v.to_s.inspect
70
+ if v.to_s.match(/\./)
71
+ items = v.to_s.split(".",2)
72
+ arr[k] = "#{items[0].constantize.table_name}.#{items[1]}"
73
+ end
74
+ end
75
+ return single ? arr[0] : arr;
76
+ end
77
+
78
78
  end
@@ -1,43 +1,43 @@
1
- module AutocompleteHelper
2
-
3
- # generate autocomplete text-field
4
- def autocomplete(options={})
5
- return nil unless options[:model]
6
-
7
- options[:name] ||= :autocomplete_keyword
8
- options[:multi] ||= false;
9
-
10
- options[:multi_height] ||= 150
11
- options[:uuid] = _uuid
12
-
13
- options[:map][:value] ||= :id
14
- options[:map][:label] ||= [:name]
15
- options[:map][:search] ||= []
16
-
17
- #txt_name = options[:multi] ? "autocomplete-keyword-#{options[:uuid]}" : options[:name]
18
- txt_name = "autocomplete-keyword-#{options[:uuid]}"
19
-
20
- ret = []
21
- ret << javascript_include_tag("autocomplete")
22
- ret << stylesheet_link_tag("autocomplete")
23
- ret << label_tag(txt_name, options[:model].camelize)
24
- ret << text_field_tag(txt_name, nil, {
25
- :onfocus => "Autocomplete(this, " + options.to_json.to_s + ")"
26
- })
27
-
28
- if options[:multi]
29
- ret << content_tag(:div, '<a class="autocomplete-remove" href="javascript:void(0);">remove selected</a> select <a href="javascript:void(0)" class="autocomplete-select-all">all</a> / <a href="javascript:void(0)" class="autocomplete-select-none">none</a>', :class=>"autocomplete-multi-controls")
30
- ret << content_tag(:div, "", :class=>"autocomplete-multi-container", :style=>"height: #{options[:multi_height]}px")
31
- ret << content_tag(:div, "<span class=\"length\">0</span> items", :class=>"autocomplete-multi-status")
32
- else
33
- ret << hidden_field_tag(options[:name], "")
34
- end
35
-
36
- return ret.join("\r\n")
37
- end
38
-
39
- def _uuid
40
- o = [('a'..'z'),('A'..'Z'),(0..9)].map{|i| i.to_a}.flatten;
41
- string = (0..10).map{ o[rand(o.length)] }.join;
42
- end
1
+ module AutocompleteHelper
2
+
3
+ # generate autocomplete text-field
4
+ def autocomplete(options={})
5
+ return nil unless options[:model]
6
+
7
+ options[:name] ||= :autocomplete_keyword
8
+ options[:multi] ||= false;
9
+
10
+ options[:multi_height] ||= 150
11
+ options[:uuid] = _uuid
12
+
13
+ options[:map][:value] ||= :id
14
+ options[:map][:label] ||= [:name]
15
+ options[:map][:search] ||= []
16
+
17
+ #txt_name = options[:multi] ? "autocomplete-keyword-#{options[:uuid]}" : options[:name]
18
+ txt_name = "autocomplete-keyword-#{options[:uuid]}"
19
+
20
+ ret = []
21
+ ret << javascript_include_tag("autocomplete")
22
+ ret << stylesheet_link_tag("autocomplete")
23
+ ret << label_tag(options[:name], options[:model].camelize)
24
+ ret << text_field_tag(txt_name, nil, {
25
+ :onfocus => "Autocomplete(this, " + options.to_json.to_s + ")"
26
+ })
27
+
28
+ if options[:multi]
29
+ ret << content_tag(:div, '<a class="autocomplete-remove" href="javascript:void(0);">remove selected</a> select <a href="javascript:void(0)" class="autocomplete-select-all">all</a> / <a href="javascript:void(0)" class="autocomplete-select-none">none</a>', :class=>"autocomplete-multi-controls")
30
+ ret << content_tag(:div, "", :class=>"autocomplete-multi-container", :style=>"height: #{options[:multi_height]}px")
31
+ ret << content_tag(:div, "<span class=\"length\">0</span> items", :class=>"autocomplete-multi-status")
32
+ else
33
+ ret << hidden_field_tag(options[:name], "")
34
+ end
35
+
36
+ return ret.join("\r\n")
37
+ end
38
+
39
+ def _uuid
40
+ o = [('a'..'z'),('A'..'Z'),(0..9)].map{|i| i.to_a}.flatten;
41
+ string = (0..10).map{ o[rand(o.length)] }.join;
42
+ end
43
43
  end
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: autocomplete
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
4
+ version: 1.0.2
11
5
  platform: ruby
12
6
  authors:
13
7
  - Voislav Jovanovic
@@ -15,8 +9,7 @@ autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
11
 
18
- date: 2010-07-23 00:00:00 +02:00
19
- default_executable:
12
+ date: 2014-03-24 00:00:00 Z
20
13
  dependencies: []
21
14
 
22
15
  description: Insert an autocomplete-search-box inside your view
@@ -33,13 +26,13 @@ extra_rdoc_files:
33
26
  - tasks/autocomplete_tasks.rake
34
27
  files:
35
28
  - MIT-LICENSE
29
+ - Manifest
36
30
  - README.rdoc
37
31
  - Rakefile
38
32
  - assets/autocomplete-loading.gif
39
33
  - assets/autocomplete.css
40
34
  - assets/autocomplete.js
41
35
  - autocomplete.gemspec
42
- - id_rsa.pub
43
36
  - init.rb
44
37
  - install.rb
45
38
  - lib/autocomplete.rb
@@ -47,15 +40,14 @@ files:
47
40
  - lib/autocomplete_helper.rb
48
41
  - tasks/autocomplete_tasks.rake
49
42
  - test/autocomplete_test.rb
50
- - Manifest
51
- has_rdoc: true
52
- homepage: http://www.voja-jovanovic.info
43
+ homepage: http://www.vojajovanovic.com
53
44
  licenses: []
54
45
 
46
+ metadata: {}
47
+
55
48
  post_install_message:
56
49
  rdoc_options:
57
50
  - --line-numbers
58
- - --inline-source
59
51
  - --title
60
52
  - Autocomplete
61
53
  - --main
@@ -63,30 +55,21 @@ rdoc_options:
63
55
  require_paths:
64
56
  - lib
65
57
  required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
58
  requirements:
68
59
  - - ">="
69
60
  - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
61
  version: "0"
74
62
  required_rubygems_version: !ruby/object:Gem::Requirement
75
- none: false
76
63
  requirements:
77
64
  - - ">="
78
65
  - !ruby/object:Gem::Version
79
- hash: 11
80
- segments:
81
- - 1
82
- - 2
83
66
  version: "1.2"
84
67
  requirements: []
85
68
 
86
69
  rubyforge_project: autocomplete
87
- rubygems_version: 1.3.7
70
+ rubygems_version: 2.2.2
88
71
  signing_key:
89
- specification_version: 3
72
+ specification_version: 4
90
73
  summary: Insert an autocomplete-search-box inside your view
91
74
  test_files:
92
75
  - test/autocomplete_test.rb
data/id_rsa.pub DELETED
@@ -1 +0,0 @@
1
- ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxm7FhP0LM71UVtxZLiZdmx0cyzj2cNCqE4UOD+JF5HvkbAmv2ySIqyO4NMSq9Ww96P+GW8o6UlnhzhziNMRoeon2b59AsjV5d8q8rlOKGT5z7zkN8VpoT8iht+wpQrZX4SLshlmwR90nP4ygDWh9Z9wZ1GVje36GqVUdYAKh0c2zYH5MZrfEuTIIMzaMJm6faRE/MG1Gx/Lqo+0mGw6k1Uz4Y7j8M/rm+SDC6Ws0TotKnnHkvhT2ZDi8ZB0Qvf7Zz0U/oamKYArXeLAeR6U+ytNozXq9lWvB15wKzLFYEHJonpmh3IH2oazfvksE1nzBlMGF37oHTJCDZ/hsQ+yAiQ== User@VOJA