auto_select2 0.1.1 → 0.1.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.

Potentially problematic release.


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

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 758183c5f2a42dbba45ee09816ac7e2a56cb2ea7
4
- data.tar.gz: 4c2c87db7827c50a0448d9854e9cbbba5998fea5
3
+ metadata.gz: a68cb3144bf87121bda7928fbd8a21924253eafb
4
+ data.tar.gz: ed7470fa356f8003f5bd3f259ee4bb73da03f908
5
5
  SHA512:
6
- metadata.gz: 651a632482e0a368881d3cbd7f026cf160f6c17698e8a113fa604911ba07296fa8c4b02b3b06a3f6a407a6a374c25a3a231c12d09956b7bdffe7c3aa9b85caac
7
- data.tar.gz: eda426df8faff2353693e4aa5b89a9aae18c8bf1c6846c176515bc6344d16143dd9f1ad26719865ee5b1af9d9570127700ed4c1e4b44c721d64ccfd67138f7fa
6
+ metadata.gz: ea72345387f6253f7ab2fe1c3b25d30ef0a0587d2358cf292747b5f71a64e188a6e5c12bb3cccce15f887efb7085d28d79fc106cd106c6a3faccb18db012ca73
7
+ data.tar.gz: 427c82d917c6accd35c66fa5fc908eb66060870ecabfd8d87f405be0eaa697095bb8e8ecc340437b88155a3b58c5c8fbafb2c3ce67f8f809895df0d5831c82f5
@@ -0,0 +1,16 @@
1
+ class Select2AutocompletesController < ApplicationController
2
+ def search
3
+ begin
4
+ adapter = "::Select2SearchAdapter::#{params[:class_name].camelize}SearchAdapter".constantize
5
+ rescue NameError
6
+ render json: {error: "not found search adapter for '#{params[:class_name]}'"}.to_json,
7
+ status: 500
8
+ return
9
+ end
10
+
11
+ term = params.delete(:term)
12
+ page = params.delete(:page)
13
+ search_method = params.delete(:search_method)
14
+ render json: adapter.search_from_autocomplete(term, page, search_method, params).to_json
15
+ end
16
+ end
data/auto_select2.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  static, ajax and multi-ajax. Moreover this gem is foundation for other gems.
15
15
  For example for AutoSelect2Tab.
16
16
  DESC
17
- spec.homepage = "http://github.com/Loriowar/auto_select2/fork"
17
+ spec.homepage = "https://github.com/Loriowar/auto_select2"
18
18
  spec.license = "MIT"
19
19
 
20
20
  spec.files = `git ls-files`.split($/)
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+ get 'select2_autocompletes/:class_name', to: 'select2_autocompletes#search',
3
+ as: 'select2_autocompletes'
4
+ end
data/lib/auto_select2.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'auto_select2/version'
2
2
  require 'auto_select2/helpers'
3
+ require 'select2_search_adapter/base'
3
4
 
4
5
  module AutoSelect2
5
6
  class Engine < ::Rails::Engine
@@ -1,3 +1,3 @@
1
1
  module AutoSelect2
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -0,0 +1,97 @@
1
+ module Select2SearchAdapter
2
+ class Base
3
+ class << self
4
+ # Amount rows per ajax-request
5
+ def limit
6
+ 25 # TODO: move to settings/config
7
+ end
8
+
9
+ def search_from_autocomplete(term, page, search_method, options)
10
+ if search_method.nil?
11
+ search_default(term, page, options)
12
+ else
13
+ self.send("search_#{search_method}", term, page, options)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def default_finder(searched_class, term, options)
20
+ column = options[:column].present? ? options[:column] : 'name'
21
+ conditions = default_search_conditions(term, options[:basic_conditions], column)
22
+ if term.nil?
23
+ [ searched_class.where(options[:basic_conditions]) ]
24
+ else
25
+ skip_count = 0
26
+ unless options.nil? || options[:page].nil?
27
+ page = options[:page].to_i > 0 ? options[:page].to_i : 1
28
+ skip_count = limit * ( page - 1 )
29
+ end
30
+ query = searched_class.where( conditions ).limit( limit ).offset(skip_count).order(column)
31
+ query = query.select(options[:select]) if options[:select].present?
32
+ options[:uniq] ? query.uniq : query
33
+ end
34
+ end
35
+
36
+ def default_count(searched_class, term, options = {})
37
+ conditions = default_search_conditions(term, options[:basic_conditions], options[:column] || 'name')
38
+ query = searched_class.where(conditions)
39
+ query = query.select(options[:select]) if options[:select].present?
40
+ query = options[:uniq] ? query.uniq : query
41
+ query.count
42
+ end
43
+
44
+ def default_search_conditions(term, basic_conditions, columns)
45
+ term_filter = ''
46
+ conditions = []
47
+ columns = [columns] unless columns.is_a?(Array)
48
+ unless term.nil?
49
+ words = term.split(' ')
50
+ words.each_with_index do |word, index|
51
+ term_filter += ' AND ' if index > 0
52
+ columns.each_with_index do |column, idx|
53
+ term_filter += ' OR ' if idx > 0
54
+ term_filter += "#{column} LIKE ?"
55
+ conditions << "%#{word}%"
56
+ end
57
+ end
58
+ term_filter = term_filter.empty? ? nil : "(#{term_filter})"
59
+ basic_conditions_part = basic_conditions.present? ? "(#{basic_conditions }) " : nil
60
+ conditions.unshift([term_filter, basic_conditions_part].compact.join(' AND '))
61
+ end
62
+ end
63
+
64
+ def get_init_values(searched_class, ids, title_method=nil)
65
+ ids = ids.split(',')
66
+ if ids.size > 1
67
+ result = []
68
+ ids.each do |id|
69
+ item = searched_class.find_by_id(id)
70
+ if item.present?
71
+ result << get_select2_hash(item, title_method, id)
72
+ end
73
+ end
74
+ result
75
+ elsif ids.size == 1
76
+ item = searched_class.find_by_id(ids[0])
77
+ if item.present?
78
+ get_select2_hash(item, title_method, ids[0])
79
+ else
80
+ nil
81
+ end
82
+ else
83
+ nil
84
+ end
85
+ end
86
+
87
+ def get_select2_hash(item, title_method, id)
88
+ if item.respond_to?(:to_select2) && title_method.nil?
89
+ item.to_select2
90
+ else
91
+ title_method ||= :name
92
+ { text: item.send(title_method), id: id }
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auto_select2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitriy Lisichkin
@@ -112,15 +112,18 @@ files:
112
112
  - LICENSE.txt
113
113
  - README.md
114
114
  - Rakefile
115
+ - app/controllers/select2_autocompletes_controller.rb
115
116
  - auto_select2.gemspec
117
+ - config/routes.rb
116
118
  - lib/auto_select2.rb
117
119
  - lib/auto_select2/helpers.rb
118
120
  - lib/auto_select2/helpers/select2_helpers.rb
119
121
  - lib/auto_select2/version.rb
122
+ - lib/select2_search_adapter/base.rb
120
123
  - vendor/assets/javascripts/auto_select2/ajax_select2.js.coffee
121
124
  - vendor/assets/javascripts/auto_select2/multi_ajax_select2_value_parser.js.coffee
122
125
  - vendor/assets/javascripts/auto_select2/static_select2.js.coffee
123
- homepage: http://github.com/Loriowar/auto_select2/fork
126
+ homepage: https://github.com/Loriowar/auto_select2
124
127
  licenses:
125
128
  - MIT
126
129
  metadata: {}