auto_select2 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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 have two ways. Easy way for simple selection: specify `default_class_name`, `default_text_column` and
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
- select2_autocompletes_path(class_name: :my_class_name)
160
- or
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
- select2_autocompletes_path(default_class_name: my_class,
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.to_s.split(/[\s,]+/).first || :name
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
- begin
7
- default_arel = options[:default_class_name].camelize.constantize
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(default_arel, term, page: page,
14
- column: options[:default_text_column])
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
- options[:hash_method],
21
- options[:default_id_column],
22
- options[:default_text_column]
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
- default_arel,
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
@@ -1,3 +1,3 @@
1
1
  module AutoSelect2
2
- VERSION = '0.4.1'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -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.4.1
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-18 00:00:00.000000000 Z
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: ! " Gem provide scripts and helpers for initialize different select2
112
- elements:\n static, ajax and multi-ajax. Moreover this gem is foundation for
113
- other gems.\n For example for AutoSelect2Tab.\n"
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: 1.8.23
152
+ rubygems_version: 2.4.6
164
153
  signing_key:
165
- specification_version: 3
154
+ specification_version: 4
166
155
  summary: Base methods for wrapping a Select2 and easy initialize it.
167
156
  test_files: []