auto_awesomplete 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of auto_awesomplete might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40cc0f7e3e197e8de6d6bf81f35e886ff23a3d08
4
- data.tar.gz: 05d0162800498929f5782d13fca7d35db58b2ec7
3
+ metadata.gz: de1d19e8705e57a160f1f213468a5b0de061b499
4
+ data.tar.gz: 042048a03ad6ae8b610b18e45115a472c0d5e9f1
5
5
  SHA512:
6
- metadata.gz: 2dc960a1e442f20cd2d884fe69a544a527caba43ce971e0e017c1ec1b1babd693d35ecf5ff6d106d0e1fa63561cf412839ad2f935700b0ce8f2c89d51e5e3ff1
7
- data.tar.gz: f31bd30434aafb95c2dffd8259599fe5c535aee00b4ec5bc3674f8b1fecdfecd24ad0db45a977347c0b4de945130cc4ff3891a0a9b3ea08f9432ce3c88192228
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[:column].present? ? options[:column] : 'name'
21
- conditions = default_search_conditions(term, options[:basic_conditions], columns)
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
- term_filter += "#{column} LIKE ?"
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
- text_column = options[:default_text_column]
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 text_column.present? && text_column.is_a?(String)
66
- item.attributes[text_column]
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
- begin
7
- default_arel = options[:default_class_name].camelize.constantize
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 = default_finder(default_arel, term, page: page, column: options[:default_text_column])
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(default_value, options)
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
@@ -1,3 +1,3 @@
1
1
  module AutoAwesomplete
2
- VERSION = '0.0.3'
2
+ VERSION = '0.1.0'
3
3
  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
@@ -32,7 +32,7 @@
32
32
  jQuery ($) ->
33
33
  autoAwesomplete.ajaxInit()
34
34
 
35
- $body = $('body')
35
+ $body = $(document)
36
36
  $body.on 'ajaxSuccess', ->
37
37
  autoAwesomplete.ajaxInit()
38
38
  return
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.3
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: 2015-09-07 00:00:00.000000000 Z
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: