auto_select2 0.4.1 → 0.5.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.
- checksums.yaml +7 -0
- data/README.md +25 -12
- data/app/controllers/select2_autocompletes_controller.rb +0 -2
- data/lib/auto_select2/select2_search_adapter/base.rb +1 -1
- data/lib/auto_select2/select2_search_adapter/default.rb +31 -12
- data/lib/auto_select2/version.rb +1 -1
- data/lib/generators/auto_select2/search_adapter_generator.rb +53 -0
- data/lib/generators/auto_select2/templates/search_adapter.rb.erb +6 -0
- metadata +27 -38
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 409c72f7b130d808dfbb5592ec99d9c5fe754552
|
4
|
+
data.tar.gz: 1296325a730e078b9515d6515a21811a732d10e5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e998e6f5233e72020ce24d207d804d57d0b7bfb163976897e2a197dab39e3eecd61dd1bacdf67181ef51d8ea0886b51959d71c6993373de1eb9b84c3ffd0429d
|
7
|
+
data.tar.gz: 5d255209a21df33b4bc1760fd90174b1b081e6c29c05ceb1219de41ddceb68ce710b405a29350e6d945e0baa066c1746bfd531fac9ae7019e41dbed523353c4a
|
data/README.md
CHANGED
@@ -115,12 +115,10 @@ For initialize static select2 you must set `auto-static-select2` css-class for s
|
|
115
115
|
### Ajax select2 usage
|
116
116
|
|
117
117
|
For initialize ajax select 2 you must set `auto-ajax-select2` css-class for hidden-input element.
|
118
|
-
Then you
|
119
|
-
`default_id_column` as params for `:href` within data-attribute `s2-options` (look at the end of this section).
|
120
|
-
Other way for custom selection: create `SearchAdapter`. This adapter has following requirements:
|
118
|
+
Then you need to create a `SearchAdapter`. This adapter has following requirements:
|
121
119
|
|
122
120
|
* class must be inherited from `AutoSelect2::Select2SearchAdapter::Base`
|
123
|
-
* file must be put in folder `app/select2_search_adapter`
|
121
|
+
* file must be put in any folder which included into autoload path, preferably in `app/select2_search_adapter`
|
124
122
|
* name of a adapter class must end with `SearchAdapter`
|
125
123
|
* must has function `search_default(term, page, options)`
|
126
124
|
(description of the function and return value goes below)
|
@@ -140,7 +138,7 @@ Returned value of `search_default` function must be follow:
|
|
140
138
|
total: count
|
141
139
|
}
|
142
140
|
|
143
|
-
Here in total must be specified amount of all select variants. For example you have select
|
141
|
+
Here in "total" must be specified amount of all select variants. For example you have select
|
144
142
|
element with 42 variants. Function `search_default` return part of it in `items` and in
|
145
143
|
`total` each time you must set 42.
|
146
144
|
|
@@ -154,16 +152,19 @@ More about this function you can find in [example project](https://github.com/Lo
|
|
154
152
|
in example below and in source code.
|
155
153
|
|
156
154
|
Finally hidden-input must has `:href` parameter in data-attribute `s2-options`. This
|
157
|
-
parameter specify url for ajax load select options. You can use helper
|
155
|
+
parameter specify url for ajax load select options. You can use path-helper `select2_autocompletes_path` for this purpose.
|
158
156
|
|
159
|
-
|
160
|
-
|
157
|
+
### Example of minimalistic SearchAdapter
|
158
|
+
|
159
|
+
class SystemRoleSearchAdapter < AutoSelect2::Select2SearchAdapter::Default
|
160
|
+
searchable_class SystemRole
|
161
|
+
id_column :id
|
162
|
+
text_columns: :name
|
163
|
+
hash_method :to_select2 # optional
|
164
|
+
end
|
161
165
|
|
162
|
-
|
163
|
-
default_text_column: :name,
|
164
|
-
default_id_column: :id)
|
166
|
+
More complex example:
|
165
167
|
|
166
|
-
### Example of minimalistic SearchAdapter
|
167
168
|
class SystemRoleSearchAdapter < AutoSelect2::Select2SearchAdapter::Base
|
168
169
|
class << self
|
169
170
|
def search_default(term, page, options)
|
@@ -183,6 +184,18 @@ or
|
|
183
184
|
end
|
184
185
|
end
|
185
186
|
|
187
|
+
### Generator
|
188
|
+
|
189
|
+
Gem provide a rails generator for creating a simple SearchAdapter like a first one from previous section. Run follows command:
|
190
|
+
|
191
|
+
rails generate auto_select2:search_adapter TargetModelName --id-column=name_of_id_column --text-columns=name_of_columns_for_searching_by
|
192
|
+
|
193
|
+
Available options for generator:
|
194
|
+
* id-column - name of model column with identifier;
|
195
|
+
* text-columns - column for searching by (available multiple values, for example "--text-columns=name description" without coma);
|
196
|
+
* hash-method - instance method of model for converting into Hash for transporting into select2 (optional);
|
197
|
+
* destination-path - path for storing SearchAdapter classes (optional, default: 'app/select2_search_adapters').
|
198
|
+
|
186
199
|
### More about SearchAdapter
|
187
200
|
|
188
201
|
`SearchAdapter` has some additional functions. First, you can define multiple search
|
@@ -3,8 +3,6 @@ class Select2AutocompletesController < ApplicationController
|
|
3
3
|
begin
|
4
4
|
if params[:class_name].present?
|
5
5
|
adapter = "::#{params[:class_name].camelize}SearchAdapter".constantize
|
6
|
-
elsif params[:default_class_name].present?
|
7
|
-
adapter = ::AutoSelect2::Select2SearchAdapter::Default
|
8
6
|
else
|
9
7
|
render json: {error: "not enough search parameters'"}.to_json,
|
10
8
|
status: 500
|
@@ -93,7 +93,7 @@ module AutoSelect2
|
|
93
93
|
if item.respond_to?(:to_select2)
|
94
94
|
item.to_select2
|
95
95
|
else
|
96
|
-
label_method = text_columns.
|
96
|
+
label_method = text_columns.first || :name
|
97
97
|
if item.respond_to?(label_method)
|
98
98
|
{ text: item.public_send(label_method), id: item.public_send(id_column) }
|
99
99
|
else
|
@@ -3,35 +3,54 @@ module AutoSelect2
|
|
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]}'"}.to_json
|
6
|
+
if @searchable_class.blank? || @id_column.blank? || @text_columns.blank?
|
7
|
+
raise_not_implemented
|
10
8
|
end
|
11
|
-
|
12
9
|
if options[:init].nil?
|
13
|
-
default_values = default_finder(
|
14
|
-
|
15
|
-
default_count = default_count(default_arel, term, column: options[:default_text_column])
|
10
|
+
default_values = default_finder(@searchable_class, term, page: page, column: @text_columns)
|
11
|
+
default_count = default_count(@searchable_class, term, column: @text_columns)
|
16
12
|
{
|
17
13
|
items: default_values.map do |default_value|
|
18
14
|
get_select2_hash(
|
19
15
|
default_value,
|
20
|
-
|
21
|
-
|
22
|
-
|
16
|
+
@select2_hash_method,
|
17
|
+
@id_column,
|
18
|
+
@text_columns
|
23
19
|
)
|
24
20
|
end,
|
25
21
|
total: default_count
|
26
22
|
}
|
27
23
|
else
|
28
24
|
get_init_values(
|
29
|
-
|
25
|
+
@searchable_class,
|
30
26
|
options[:item_ids],
|
31
27
|
options
|
32
28
|
)
|
33
29
|
end
|
34
30
|
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def searchable_class(klass)
|
35
|
+
@searchable_class = klass
|
36
|
+
end
|
37
|
+
|
38
|
+
def id_column(id_column)
|
39
|
+
@id_column = id_column
|
40
|
+
end
|
41
|
+
|
42
|
+
def text_columns(*column_names)
|
43
|
+
@text_columns = column_names
|
44
|
+
end
|
45
|
+
|
46
|
+
def hash_method(method_sym)
|
47
|
+
@select2_hash_method = method_sym
|
48
|
+
end
|
49
|
+
|
50
|
+
def raise_not_implemented
|
51
|
+
raise NotImplementedError,
|
52
|
+
'You need to implement your own SearchAdapter. Use: `rails generate auto_select2:search_adapter`'
|
53
|
+
end
|
35
54
|
end
|
36
55
|
end
|
37
56
|
end
|
data/lib/auto_select2/version.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
module AutoSelect2
|
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/select2_search_adapters',
|
9
|
+
desc: 'Path for storing SearchAdapter classes',
|
10
|
+
banner: 'lib/search_adapters'
|
11
|
+
class_option :id_column,
|
12
|
+
type: :string,
|
13
|
+
desc: 'Name of model column with identifier (i.e. id)',
|
14
|
+
banner: 'id',
|
15
|
+
required: true
|
16
|
+
class_option :text_columns,
|
17
|
+
type: :array,
|
18
|
+
desc: 'Column for searching by',
|
19
|
+
banner: 'lastname firstname',
|
20
|
+
required: true
|
21
|
+
class_option :hash_method,
|
22
|
+
type: :string,
|
23
|
+
desc: 'Instance method of model for converting into Hash for transporting into select2',
|
24
|
+
banner: 'to_select2'
|
25
|
+
|
26
|
+
desc 'Creates SearchAdapter classes for your models'
|
27
|
+
def create_search_adapter
|
28
|
+
template 'search_adapter.rb.erb',
|
29
|
+
"#{options[:destination_path]}/#{class_path.push(file_name).join('/')}_search_adapter.rb"
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def id_column
|
35
|
+
options[:id_column]
|
36
|
+
end
|
37
|
+
|
38
|
+
def text_columns
|
39
|
+
options[:text_columns].map do |c|
|
40
|
+
if c.underscore == c
|
41
|
+
":#{c}"
|
42
|
+
else
|
43
|
+
"\"#{c}\""
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def hash_method
|
49
|
+
options[:hash_method]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class <%= name.classify %>SearchAdapter < AutoSelect2::Select2SearchAdapter::Default
|
2
|
+
searchable_class <%= name.classify %>
|
3
|
+
id_column :<%= id_column %>
|
4
|
+
text_columns <%= text_columns.join(', ') %>
|
5
|
+
<% if hash_method.present? %>hash_method :<%= hash_method %><% end %>
|
6
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auto_select2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dmitriy Lisichkin
|
@@ -10,107 +9,96 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date: 2015-11-
|
12
|
+
date: 2015-11-25 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: railties
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
20
|
version: '3.1'
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- -
|
25
|
+
- - ">="
|
29
26
|
- !ruby/object:Gem::Version
|
30
27
|
version: '3.1'
|
31
28
|
- !ruby/object:Gem::Dependency
|
32
29
|
name: select2-rails
|
33
30
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
31
|
requirements:
|
36
|
-
- -
|
32
|
+
- - ">="
|
37
33
|
- !ruby/object:Gem::Version
|
38
34
|
version: '0'
|
39
35
|
type: :runtime
|
40
36
|
prerelease: false
|
41
37
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
38
|
requirements:
|
44
|
-
- -
|
39
|
+
- - ">="
|
45
40
|
- !ruby/object:Gem::Version
|
46
41
|
version: '0'
|
47
42
|
- !ruby/object:Gem::Dependency
|
48
43
|
name: coffee-rails
|
49
44
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
45
|
requirements:
|
52
|
-
- -
|
46
|
+
- - ">="
|
53
47
|
- !ruby/object:Gem::Version
|
54
48
|
version: '0'
|
55
49
|
type: :runtime
|
56
50
|
prerelease: false
|
57
51
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
52
|
requirements:
|
60
|
-
- -
|
53
|
+
- - ">="
|
61
54
|
- !ruby/object:Gem::Version
|
62
55
|
version: '0'
|
63
56
|
- !ruby/object:Gem::Dependency
|
64
57
|
name: bundler
|
65
58
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
59
|
requirements:
|
68
|
-
- - ~>
|
60
|
+
- - "~>"
|
69
61
|
- !ruby/object:Gem::Version
|
70
62
|
version: '1.5'
|
71
63
|
type: :development
|
72
64
|
prerelease: false
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
66
|
requirements:
|
76
|
-
- - ~>
|
67
|
+
- - "~>"
|
77
68
|
- !ruby/object:Gem::Version
|
78
69
|
version: '1.5'
|
79
70
|
- !ruby/object:Gem::Dependency
|
80
71
|
name: rake
|
81
72
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
73
|
requirements:
|
84
|
-
- -
|
74
|
+
- - ">="
|
85
75
|
- !ruby/object:Gem::Version
|
86
76
|
version: '0'
|
87
77
|
type: :development
|
88
78
|
prerelease: false
|
89
79
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
80
|
requirements:
|
92
|
-
- -
|
81
|
+
- - ">="
|
93
82
|
- !ruby/object:Gem::Version
|
94
83
|
version: '0'
|
95
84
|
- !ruby/object:Gem::Dependency
|
96
85
|
name: rails
|
97
86
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
87
|
requirements:
|
100
|
-
- - ~>
|
88
|
+
- - "~>"
|
101
89
|
- !ruby/object:Gem::Version
|
102
90
|
version: 3.2.12
|
103
91
|
type: :development
|
104
92
|
prerelease: false
|
105
93
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
94
|
requirements:
|
108
|
-
- - ~>
|
95
|
+
- - "~>"
|
109
96
|
- !ruby/object:Gem::Version
|
110
97
|
version: 3.2.12
|
111
|
-
description:
|
112
|
-
|
113
|
-
|
98
|
+
description: |2
|
99
|
+
Gem provide scripts and helpers for initialize different select2 elements:
|
100
|
+
static, ajax and multi-ajax. Moreover this gem is foundation for other gems.
|
101
|
+
For example for AutoSelect2Tab.
|
114
102
|
email:
|
115
103
|
- dima@sb42.ru
|
116
104
|
- loriowar@gmail.com
|
@@ -118,8 +106,8 @@ executables: []
|
|
118
106
|
extensions: []
|
119
107
|
extra_rdoc_files: []
|
120
108
|
files:
|
121
|
-
- .gitignore
|
122
|
-
- .gitmodules
|
109
|
+
- ".gitignore"
|
110
|
+
- ".gitmodules"
|
123
111
|
- Gemfile
|
124
112
|
- LICENSE.txt
|
125
113
|
- README.md
|
@@ -135,6 +123,8 @@ files:
|
|
135
123
|
- lib/auto_select2/select2_search_adapter/base.rb
|
136
124
|
- lib/auto_select2/select2_search_adapter/default.rb
|
137
125
|
- lib/auto_select2/version.rb
|
126
|
+
- lib/generators/auto_select2/search_adapter_generator.rb
|
127
|
+
- lib/generators/auto_select2/templates/search_adapter.rb.erb
|
138
128
|
- vendor/assets/javascripts/auto_select2/ajax_select2.js.coffee
|
139
129
|
- vendor/assets/javascripts/auto_select2/data_select2.js.coffee
|
140
130
|
- vendor/assets/javascripts/auto_select2/multi_ajax_select2_value_parser.js.coffee
|
@@ -142,26 +132,25 @@ files:
|
|
142
132
|
homepage: https://github.com/Loriowar/auto_select2
|
143
133
|
licenses:
|
144
134
|
- MIT
|
135
|
+
metadata: {}
|
145
136
|
post_install_message:
|
146
137
|
rdoc_options: []
|
147
138
|
require_paths:
|
148
139
|
- lib
|
149
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
-
none: false
|
151
141
|
requirements:
|
152
|
-
- -
|
142
|
+
- - ">="
|
153
143
|
- !ruby/object:Gem::Version
|
154
144
|
version: '0'
|
155
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
146
|
requirements:
|
158
|
-
- -
|
147
|
+
- - ">="
|
159
148
|
- !ruby/object:Gem::Version
|
160
149
|
version: '0'
|
161
150
|
requirements: []
|
162
151
|
rubyforge_project:
|
163
|
-
rubygems_version:
|
152
|
+
rubygems_version: 2.4.6
|
164
153
|
signing_key:
|
165
|
-
specification_version:
|
154
|
+
specification_version: 4
|
166
155
|
summary: Base methods for wrapping a Select2 and easy initialize it.
|
167
156
|
test_files: []
|