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