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 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: