auto_awesomplete 0.0.3 → 0.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.
Potentially problematic release.
This version of auto_awesomplete might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/auto_awesomplete/search_adapter/base.rb +22 -7
- data/lib/auto_awesomplete/search_adapter/default.rb +38 -6
- data/lib/auto_awesomplete/version.rb +1 -1
- data/lib/generators/auto_awesomplete/search_adapter_generator.rb +52 -0
- data/lib/generators/auto_awesomplete/templates/search_adapter.rb.erb +6 -0
- data/vendor/assets/javascripts/auto_awesomplete/ajax.js.coffee +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de1d19e8705e57a160f1f213468a5b0de061b499
|
4
|
+
data.tar.gz: 042048a03ad6ae8b610b18e45115a472c0d5e9f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c8521ce8c9f2b4c2eddfe9cd1bfe244fe8eaed5d7d764e5f89f60ca8da66d98f01073f3653542fedb91858cd348cfd4189456546280175230ead7fbf41323484
|
7
|
+
data.tar.gz: 7c59d0ef7ff7b1d2effd07e5da4741705e10b055b16f50c1d8bcda082de2c7347284128dbff4f7c9c25b3ebea2e5b6c04eb7f0193905cfc20eed6cf06588bf04
|
@@ -17,8 +17,14 @@ module AutoAwesomplete
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def default_finder(searched_class, term, options)
|
20
|
-
columns = options[:
|
21
|
-
conditions =
|
20
|
+
columns = options[:columns].present? ? options[:columns] : 'name'
|
21
|
+
conditions =
|
22
|
+
default_search_conditions(
|
23
|
+
term,
|
24
|
+
options[:basic_conditions],
|
25
|
+
columns,
|
26
|
+
options.slice(:case_sensitive)
|
27
|
+
)
|
22
28
|
|
23
29
|
if term.nil?
|
24
30
|
[ searched_class.where(options[:basic_conditions]) ]
|
@@ -30,7 +36,7 @@ module AutoAwesomplete
|
|
30
36
|
end
|
31
37
|
end
|
32
38
|
|
33
|
-
def default_search_conditions(term, basic_conditions, columns)
|
39
|
+
def default_search_conditions(term, basic_conditions, columns, options = {})
|
34
40
|
term_filter = ''
|
35
41
|
conditions = []
|
36
42
|
|
@@ -45,7 +51,13 @@ module AutoAwesomplete
|
|
45
51
|
|
46
52
|
columns.each_with_index do |column, idx|
|
47
53
|
term_filter += ' OR ' if idx > 0
|
48
|
-
|
54
|
+
|
55
|
+
if options[:case_sensitive]
|
56
|
+
term_filter += "#{column} LIKE ?"
|
57
|
+
else
|
58
|
+
term_filter += "LOWER(#{column}) LIKE LOWER(?)"
|
59
|
+
end
|
60
|
+
|
49
61
|
conditions << "%#{word}%"
|
50
62
|
end
|
51
63
|
end
|
@@ -58,12 +70,15 @@ module AutoAwesomplete
|
|
58
70
|
|
59
71
|
def get_awesomplete_label(item, options)
|
60
72
|
label_method = options[:label_method]
|
61
|
-
|
73
|
+
text_columns = options[:default_text_columns]
|
74
|
+
if text_columns.is_a?(String)
|
75
|
+
text_columns = text_columns.split(',').map(&:squish)
|
76
|
+
end
|
62
77
|
|
63
78
|
if label_method.present? && item.respond_to?(label_method)
|
64
79
|
item.public_send(label_method)
|
65
|
-
elsif
|
66
|
-
item.attributes[
|
80
|
+
elsif text_columns.present?
|
81
|
+
text_columns.map { |attr| item.attributes[attr.to_s] }.join(' ')
|
67
82
|
else
|
68
83
|
item.to_s
|
69
84
|
end
|
@@ -3,17 +3,49 @@ module AutoAwesomplete
|
|
3
3
|
class Default < Base
|
4
4
|
class << self
|
5
5
|
def search_default(term, page, options)
|
6
|
-
|
7
|
-
|
8
|
-
rescue NameError
|
9
|
-
return {error: "not found class '#{options[:default_class_name]}'"}
|
6
|
+
if !@searchable || @text_columns.blank?
|
7
|
+
raise_not_implemented
|
10
8
|
end
|
11
9
|
|
12
|
-
default_values =
|
10
|
+
default_values =
|
11
|
+
default_finder(
|
12
|
+
@searchable,
|
13
|
+
term,
|
14
|
+
page: page,
|
15
|
+
columns: @text_columns,
|
16
|
+
case_sensitive: @case_sensitive.nil? ? options[:case_sensitive] : @case_sensitive
|
17
|
+
)
|
13
18
|
default_values.map do |default_value|
|
14
|
-
get_awesomplete_label(
|
19
|
+
get_awesomplete_label(
|
20
|
+
default_value,
|
21
|
+
default_text_columns: @text_columns,
|
22
|
+
label_method: @label_method
|
23
|
+
)
|
15
24
|
end
|
16
25
|
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def searchable(class_or_relation)
|
30
|
+
@searchable = class_or_relation
|
31
|
+
end
|
32
|
+
|
33
|
+
def text_columns(*column_names)
|
34
|
+
@text_columns = column_names
|
35
|
+
end
|
36
|
+
|
37
|
+
def label_method(method_sym)
|
38
|
+
@label_method = method_sym
|
39
|
+
end
|
40
|
+
|
41
|
+
def case_sensitive(casi)
|
42
|
+
@case_sensitive = casi
|
43
|
+
end
|
44
|
+
|
45
|
+
def raise_not_implemented
|
46
|
+
raise NotImplementedError,
|
47
|
+
'You should implement your own SearchAdapter. Use: `rails generate auto_awesomplete:search_adapter`'
|
48
|
+
end
|
17
49
|
end
|
18
50
|
end
|
19
51
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module AutoAwesomplete
|
2
|
+
module Generators
|
3
|
+
class SearchAdapterGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../templates', __FILE__)
|
5
|
+
|
6
|
+
class_option :destination_path,
|
7
|
+
type: :string,
|
8
|
+
default: 'app/awesomplete_search_adapters',
|
9
|
+
desc: 'Path for storing SearchAdapter classes',
|
10
|
+
banner: 'lib/search_adapters'
|
11
|
+
class_option :text_columns,
|
12
|
+
type: :array,
|
13
|
+
desc: 'Column for searching by',
|
14
|
+
banner: 'lastname firstname',
|
15
|
+
required: true
|
16
|
+
class_option :label_method,
|
17
|
+
type: :string,
|
18
|
+
desc: 'Instance method of model for converting into Hash for transporting into awesomplete',
|
19
|
+
banner: 'to_awesomplete'
|
20
|
+
class_option :case_sensitive,
|
21
|
+
type: :boolean,
|
22
|
+
desc: 'Is adapter request case sensitive or not',
|
23
|
+
banner: 'case_sensitive'
|
24
|
+
|
25
|
+
desc 'Creates SearchAdapter classes for your models'
|
26
|
+
def create_search_adapter
|
27
|
+
template 'search_adapter.rb.erb',
|
28
|
+
"#{options[:destination_path]}/#{class_path.push(file_name).join('/')}_search_adapter.rb"
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def text_columns
|
34
|
+
options[:text_columns].map do |c|
|
35
|
+
if c.underscore == c
|
36
|
+
":#{c}"
|
37
|
+
else
|
38
|
+
"\"#{c}\""
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def label_method
|
44
|
+
options[:label_method]
|
45
|
+
end
|
46
|
+
|
47
|
+
def case_sensitive
|
48
|
+
options[:case_sensitive]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class <%= name.classify %>SearchAdapter < AutoAwesomplete::SearchAdapter::Default
|
2
|
+
searchable <%= name.classify %>
|
3
|
+
text_columns <%= text_columns.join(', ') %>
|
4
|
+
<% if label_method.present? %>label_method :<%= label_method %><% end %>
|
5
|
+
<% if case_sensitive.present? %>case_sensitive <%= case_sensitive %><% end %>
|
6
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auto_awesomplete
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Lisichkin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-09-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -93,6 +93,8 @@ files:
|
|
93
93
|
- lib/auto_awesomplete/search_adapter/base.rb
|
94
94
|
- lib/auto_awesomplete/search_adapter/default.rb
|
95
95
|
- lib/auto_awesomplete/version.rb
|
96
|
+
- lib/generators/auto_awesomplete/search_adapter_generator.rb
|
97
|
+
- lib/generators/auto_awesomplete/templates/search_adapter.rb.erb
|
96
98
|
- vendor/assets/javascripts/auto_awesomplete/ajax.js.coffee
|
97
99
|
homepage: https://github.com/Tab10id/auto_awesomplete
|
98
100
|
licenses:
|