activeadmin-ajax_filter 0.4.4 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bb0afa3a4e5afe9d4b5137f9eabbd6233fd18ec8d251965a79c3ebe79888ffb
4
- data.tar.gz: 4170070696e21ee6e4cebdab98cacb591beccf5e35eaa5615b0b5066a2046c13
3
+ metadata.gz: 6f9fa8d4a1c3de2cacf75f9e29a0e8adddef65db1eb09704f4b079bdac96670c
4
+ data.tar.gz: f9398372f1435943d3716dbf5498ceeb705dd2e59b2f2ab980a3658f0e57d488
5
5
  SHA512:
6
- metadata.gz: e402c2aa57874a952fe3184cdfcb62f9b7a17558e089f75bde282b7b422a61a815f65776c4d90bee7932aed71eaa3a97dc3e7b2c2b7186a1e2048b2943837376
7
- data.tar.gz: 329120cec955864e4ca477417dbab495ff95379f4498112e912b02da72bdc433e2ff4c371e1ec01ede9ad195e6914b18504d4e8f698ecc340ff65c008e9b5483
6
+ metadata.gz: f244bf70e1fb6dc726e865e0b7fec4766a75af1b72c1cac071a240a59f353a9b775450474161da3191b818c0506cbcea04d94e8458e131d64a090a7e2626be1f
7
+ data.tar.gz: 93fa5babb8c7b4b840865b26c7a31cbe23d2f3070c7843e0be9238a8e5eb7745b683186acdd871c4b8a8e7f34465bfa7a28d7b6def4f603ccad9c6f0e612d175
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  /spec/dummy/log/*.log
12
12
  /tmp/
13
13
  *.sqlite3
14
+ *.gem
@@ -1 +1 @@
1
- 2.6.1
1
+ 2.6.5
@@ -1,9 +1,8 @@
1
1
  sudo: false
2
2
  language: ruby
3
+ cache: bundler
3
4
 
4
5
  rvm:
5
- - 2.3
6
- - 2.4
7
6
  - 2.5
8
7
  - 2.6
9
8
  - ruby-head
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- activeadmin-ajax_filter (0.4.4)
4
+ activeadmin-ajax_filter (0.4.6)
5
5
  activeadmin (>= 1.0)
6
6
  coffee-rails (>= 4.1.0)
7
7
  has_scope (>= 0.6.0)
@@ -11,21 +11,21 @@ PATH
11
11
  GEM
12
12
  remote: https://rubygems.org/
13
13
  specs:
14
- actionmailer (4.2.11)
15
- actionpack (= 4.2.11)
16
- actionview (= 4.2.11)
17
- activejob (= 4.2.11)
14
+ actionmailer (4.2.11.1)
15
+ actionpack (= 4.2.11.1)
16
+ actionview (= 4.2.11.1)
17
+ activejob (= 4.2.11.1)
18
18
  mail (~> 2.5, >= 2.5.4)
19
19
  rails-dom-testing (~> 1.0, >= 1.0.5)
20
- actionpack (4.2.11)
21
- actionview (= 4.2.11)
22
- activesupport (= 4.2.11)
20
+ actionpack (4.2.11.1)
21
+ actionview (= 4.2.11.1)
22
+ activesupport (= 4.2.11.1)
23
23
  rack (~> 1.6)
24
24
  rack-test (~> 0.6.2)
25
25
  rails-dom-testing (~> 1.0, >= 1.0.5)
26
26
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
27
- actionview (4.2.11)
28
- activesupport (= 4.2.11)
27
+ actionview (4.2.11.1)
28
+ activesupport (= 4.2.11.1)
29
29
  builder (~> 3.1)
30
30
  erubis (~> 2.7.0)
31
31
  rails-dom-testing (~> 1.0, >= 1.0.5)
@@ -42,17 +42,17 @@ GEM
42
42
  ransack (>= 1.8.7)
43
43
  sass (~> 3.1)
44
44
  sprockets (< 4.1)
45
- activejob (4.2.11)
46
- activesupport (= 4.2.11)
45
+ activejob (4.2.11.1)
46
+ activesupport (= 4.2.11.1)
47
47
  globalid (>= 0.3.0)
48
- activemodel (4.2.11)
49
- activesupport (= 4.2.11)
48
+ activemodel (4.2.11.1)
49
+ activesupport (= 4.2.11.1)
50
50
  builder (~> 3.1)
51
- activerecord (4.2.11)
52
- activemodel (= 4.2.11)
53
- activesupport (= 4.2.11)
51
+ activerecord (4.2.11.1)
52
+ activemodel (= 4.2.11.1)
53
+ activesupport (= 4.2.11.1)
54
54
  arel (~> 6.0)
55
- activesupport (4.2.11)
55
+ activesupport (4.2.11.1)
56
56
  i18n (~> 0.7)
57
57
  minitest (~> 5.1)
58
58
  thread_safe (~> 0.3, >= 0.3.4)
@@ -61,7 +61,7 @@ GEM
61
61
  arbre (1.2.1)
62
62
  activesupport (>= 3.0.0)
63
63
  arel (6.0.4)
64
- builder (3.2.3)
64
+ builder (3.2.4)
65
65
  capybara (2.7.1)
66
66
  addressable
67
67
  mime-types (>= 1.16)
@@ -72,6 +72,7 @@ GEM
72
72
  cliver (0.3.2)
73
73
  codeclimate-test-reporter (0.4.8)
74
74
  simplecov (>= 0.7.1, < 1.0.0)
75
+ coderay (1.1.2)
75
76
  coffee-rails (4.2.2)
76
77
  coffee-script (>= 2.2.0)
77
78
  railties (>= 4.0.0)
@@ -79,8 +80,8 @@ GEM
79
80
  coffee-script-source
80
81
  execjs
81
82
  coffee-script-source (1.12.2)
82
- concurrent-ruby (1.1.4)
83
- crass (1.0.4)
83
+ concurrent-ruby (1.1.6)
84
+ crass (1.0.6)
84
85
  database_cleaner (1.5.3)
85
86
  diff-lcs (1.2.5)
86
87
  docile (1.1.5)
@@ -112,56 +113,60 @@ GEM
112
113
  has_scope (~> 0.6)
113
114
  railties (>= 4.2, < 5.3)
114
115
  responders
115
- jquery-rails (4.3.5)
116
+ jquery-rails (4.4.0)
116
117
  rails-dom-testing (>= 1, < 3)
117
118
  railties (>= 4.2.0)
118
119
  thor (>= 0.14, < 2.0)
119
120
  json (1.8.6)
120
- kaminari (1.1.1)
121
+ kaminari (1.2.0)
121
122
  activesupport (>= 4.1.0)
122
- kaminari-actionview (= 1.1.1)
123
- kaminari-activerecord (= 1.1.1)
124
- kaminari-core (= 1.1.1)
125
- kaminari-actionview (1.1.1)
123
+ kaminari-actionview (= 1.2.0)
124
+ kaminari-activerecord (= 1.2.0)
125
+ kaminari-core (= 1.2.0)
126
+ kaminari-actionview (1.2.0)
126
127
  actionview
127
- kaminari-core (= 1.1.1)
128
- kaminari-activerecord (1.1.1)
128
+ kaminari-core (= 1.2.0)
129
+ kaminari-activerecord (1.2.0)
129
130
  activerecord
130
- kaminari-core (= 1.1.1)
131
- kaminari-core (1.1.1)
131
+ kaminari-core (= 1.2.0)
132
+ kaminari-core (1.2.0)
132
133
  launchy (2.4.3)
133
134
  addressable (~> 2.3)
134
- loofah (2.2.3)
135
+ loofah (2.4.0)
135
136
  crass (~> 1.0.2)
136
137
  nokogiri (>= 1.5.9)
137
138
  mail (2.7.1)
138
139
  mini_mime (>= 0.1.1)
140
+ method_source (1.0.0)
139
141
  mime-types (3.2.2)
140
142
  mime-types-data (~> 3.2015)
141
143
  mime-types-data (3.2018.0812)
142
144
  mini_mime (1.0.2)
143
145
  mini_portile2 (2.4.0)
144
- minitest (5.11.3)
145
- nokogiri (1.10.4)
146
+ minitest (5.14.0)
147
+ nokogiri (1.10.9)
146
148
  mini_portile2 (~> 2.4.0)
147
149
  phantomjs (2.1.1.0)
148
150
  poltergeist (1.10.0)
149
151
  capybara (~> 2.1)
150
152
  cliver (~> 0.3.1)
151
153
  websocket-driver (>= 0.2.0)
152
- rack (1.6.11)
154
+ pry (0.13.1)
155
+ coderay (~> 1.1)
156
+ method_source (~> 1.0)
157
+ rack (1.6.13)
153
158
  rack-test (0.6.3)
154
159
  rack (>= 1.0)
155
- rails (4.2.11)
156
- actionmailer (= 4.2.11)
157
- actionpack (= 4.2.11)
158
- actionview (= 4.2.11)
159
- activejob (= 4.2.11)
160
- activemodel (= 4.2.11)
161
- activerecord (= 4.2.11)
162
- activesupport (= 4.2.11)
160
+ rails (4.2.11.1)
161
+ actionmailer (= 4.2.11.1)
162
+ actionpack (= 4.2.11.1)
163
+ actionview (= 4.2.11.1)
164
+ activejob (= 4.2.11.1)
165
+ activemodel (= 4.2.11.1)
166
+ activerecord (= 4.2.11.1)
167
+ activesupport (= 4.2.11.1)
163
168
  bundler (>= 1.3.0, < 2.0)
164
- railties (= 4.2.11)
169
+ railties (= 4.2.11.1)
165
170
  sprockets-rails
166
171
  rails-deprecated_sanitizer (1.0.3)
167
172
  activesupport (>= 4.2.0.alpha)
@@ -169,11 +174,11 @@ GEM
169
174
  activesupport (>= 4.2.0, < 5.0)
170
175
  nokogiri (~> 1.6)
171
176
  rails-deprecated_sanitizer (>= 1.0.1)
172
- rails-html-sanitizer (1.0.4)
173
- loofah (~> 2.2, >= 2.2.2)
174
- railties (4.2.11)
175
- actionpack (= 4.2.11)
176
- activesupport (= 4.2.11)
177
+ rails-html-sanitizer (1.3.0)
178
+ loofah (~> 2.3)
179
+ railties (4.2.11.1)
180
+ actionpack (= 4.2.11.1)
181
+ activesupport (= 4.2.11.1)
177
182
  rake (>= 0.8.7)
178
183
  thor (>= 0.18.1, < 2.0)
179
184
  rake (10.5.0)
@@ -182,8 +187,8 @@ GEM
182
187
  activerecord (>= 3.0, < 5.2)
183
188
  activesupport (>= 3.0, < 5.2)
184
189
  i18n
185
- rb-fsevent (0.10.3)
186
- rb-inotify (0.10.0)
190
+ rb-fsevent (0.10.4)
191
+ rb-inotify (0.10.1)
187
192
  ffi (~> 1.0)
188
193
  request_store (1.4.1)
189
194
  rack (>= 1.4)
@@ -216,6 +221,14 @@ GEM
216
221
  sass-listen (4.0.0)
217
222
  rb-fsevent (~> 0.9, >= 0.9.4)
218
223
  rb-inotify (~> 0.9, >= 0.9.7)
224
+ sassc (2.2.1)
225
+ ffi (~> 1.9)
226
+ sassc-rails (2.1.2)
227
+ railties (>= 4.0.0)
228
+ sassc (>= 2.0)
229
+ sprockets (> 3.0)
230
+ sprockets-rails
231
+ tilt
219
232
  selectize-rails (0.12.6)
220
233
  simplecov (0.11.1)
221
234
  docile (~> 1.1.0)
@@ -233,9 +246,10 @@ GEM
233
246
  temping (3.3.0)
234
247
  activerecord (>= 3.1)
235
248
  activesupport (>= 3.1)
236
- thor (0.20.3)
249
+ thor (1.0.1)
237
250
  thread_safe (0.3.6)
238
- tzinfo (1.2.5)
251
+ tilt (2.0.10)
252
+ tzinfo (1.2.6)
239
253
  thread_safe (~> 0.1)
240
254
  websocket-driver (0.6.4)
241
255
  websocket-extensions (>= 0.1.0)
@@ -257,9 +271,11 @@ DEPENDENCIES
257
271
  launchy (~> 2.4.3)
258
272
  phantomjs (~> 2.1.1)
259
273
  poltergeist (~> 1.10.0)
274
+ pry
260
275
  rake (~> 10.0)
261
276
  rspec (~> 3.3, >= 3.3.0)
262
277
  rspec-rails (~> 3.3)
278
+ sassc-rails
263
279
  selectize-rails (>= 0.11.2)
264
280
  sqlite3 (~> 1.3, >= 1.3.11)
265
281
  temping (~> 3.3, >= 3.3.0)
data/README.md CHANGED
@@ -96,6 +96,24 @@ You can use next parameters in `data` hash:
96
96
  * `static_ransack` - hash of ransack predicates which will be applied statically and independently from current input field value
97
97
  * `min_chars_count_to_request` - minimal count of chars in the input field to make an AJAX request
98
98
 
99
+ ### Filter by belongs_to relation fields
100
+
101
+ ```ruby
102
+ class Patient < ApplicationRecord
103
+ belongs_to :user
104
+ # ...
105
+ end
106
+
107
+ f.input :patient, as: :ajax_select, collection: [], data: {
108
+ display_fields: ['id', 'user.name'],
109
+ search_fields: ['user.name'],
110
+ ordering: 'id ASC',
111
+ url: :filter_admin_patients_path
112
+ }
113
+ ```
114
+ Ordering by related fields doesn't work, e.g. this will not work: `ordering: 'user.name ASC'`
115
+
116
+
99
117
  ## Caveats
100
118
 
101
119
  ### Ransack _cont on Integer column
@@ -24,6 +24,7 @@ Gem::Specification.new do |gem|
24
24
  gem.add_dependency 'coffee-rails', '>= 4.1.0'
25
25
  gem.add_dependency 'selectize-rails', '>= 0.12.6'
26
26
  gem.add_dependency 'has_scope', '>= 0.6.0' # Force Ruby 2.1.5 support
27
+ gem.add_development_dependency 'sassc-rails'
27
28
  gem.add_development_dependency 'bundler', '~> 1.10'
28
29
  gem.add_development_dependency 'rake', '~> 10.0'
29
30
  gem.add_development_dependency 'rspec', '~> 3.3', '>= 3.3.0'
@@ -38,4 +39,5 @@ Gem::Specification.new do |gem|
38
39
  gem.add_development_dependency 'selectize-rails', '>= 0.11.2'
39
40
  gem.add_development_dependency 'database_cleaner', '~> 1.5.0'
40
41
  gem.add_development_dependency 'launchy', '~> 2.4.3'
42
+ gem.add_development_dependency 'pry'
41
43
  end
@@ -30,6 +30,7 @@ $ ->
30
30
  q: q
31
31
  limit: select.data('limit')
32
32
  order: ordering
33
+ searchFields: searchFields
33
34
  error: ->
34
35
  callback()
35
36
  success: (res) ->
@@ -87,16 +88,17 @@ $ ->
87
88
  onInitialize: ->
88
89
  selectize = this
89
90
  selectedValue = select.data('selected-value')
90
- selectedRansack = "#{valueField}_eq"
91
+ selectedRansack = "#{valueField}_in"
91
92
 
92
93
  if selectedValue
93
94
  q = {}
94
- q[selectedRansack] = selectedValue
95
+ q[selectedRansack] = String(selectedValue).split(' ')
95
96
 
96
97
  loadOptions(q, (res)->
97
98
  if res && res.length
98
- selectize.addOption(res[0])
99
- selectize.addItem(res[0][valueField])
99
+ for item in res
100
+ selectize.addOption(item)
101
+ selectize.addItem(item[valueField])
100
102
  )
101
103
 
102
104
  ajaxFields.forEach (field) ->
@@ -14,10 +14,32 @@ module ActiveAdmin
14
14
  def included(dsl)
15
15
  dsl.instance_eval do
16
16
  collection_action :filter, method: :get do
17
- render plain: apply_collection_decorator(
18
- find_collection(except: [:pagination, :collection_decorator])
19
- .order(params[:order]).limit(params[:limit] || 10),
20
- ).to_json
17
+ scope = find_collection(except: [:pagination, :collection_decorator])
18
+ .order(params[:order])
19
+ .limit(params[:limit] || 10)
20
+ .distinct
21
+
22
+ search_fields = Array(params[:searchFields])
23
+
24
+ related_table_search_fields = search_fields
25
+ .select { |f| f.include?('.') }
26
+ .map { |f| f.split('.') }
27
+
28
+ related_table_search_fields.each do |related_table, _|
29
+ scope = scope.preload(related_table)
30
+ end
31
+
32
+ res = apply_collection_decorator(scope).map do |item|
33
+ item_json = item.as_json
34
+
35
+ related_table_search_fields.each do |related_table, search_field|
36
+ item_json[related_table + '.' + search_field] = item.send(related_table).send(search_field)
37
+ end
38
+
39
+ item_json
40
+ end
41
+
42
+ render plain: res.to_json
21
43
  end
22
44
  end
23
45
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveAdmin
2
2
  module AjaxFilter
3
- VERSION = '0.4.4'
3
+ VERSION = '0.4.6'
4
4
  end
5
5
  end
@@ -40,7 +40,7 @@ module ActiveAdmin
40
40
  end
41
41
 
42
42
  def display_fields
43
- ajax_data[:display_fields] || search_fields[0]
43
+ ajax_data[:display_fields] || search_fields.take(1)
44
44
  end
45
45
 
46
46
  def search_fields
@@ -52,11 +52,11 @@ module ActiveAdmin
52
52
  end
53
53
 
54
54
  def ordering
55
- ajax_data[:ordering] || "#{search_fields.first} ASC"
55
+ ajax_data[:ordering] || "#{display_fields.first} ASC"
56
56
  end
57
57
 
58
58
  def ransack
59
- ajax_data[:ransack] || "#{search_fields.join('_or_')}_cont"
59
+ ajax_data[:ransack] || "#{ransackify(search_fields).join('_or_')}_cont"
60
60
  end
61
61
 
62
62
  def static_ransack
@@ -67,6 +67,11 @@ module ActiveAdmin
67
67
  ajax_data[:min_chars_count_to_request] || 1
68
68
  end
69
69
 
70
+ def ransackify(field_names)
71
+ # Map fields refer to related tables user.name -> user_name
72
+ field_names.map { |f| f.to_s.sub('.', '_') }
73
+ end
74
+
70
75
  def url
71
76
  case (url = ajax_data[:url])
72
77
  when nil then "#{method.to_s.pluralize}/filter"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeadmin-ajax_filter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Emelyanov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-26 00:00:00.000000000 Z
11
+ date: 2020-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeadmin
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.6.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: sassc-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: bundler
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -294,6 +308,20 @@ dependencies:
294
308
  - - "~>"
295
309
  - !ruby/object:Gem::Version
296
310
  version: 2.4.3
311
+ - !ruby/object:Gem::Dependency
312
+ name: pry
313
+ requirement: !ruby/object:Gem::Requirement
314
+ requirements:
315
+ - - ">="
316
+ - !ruby/object:Gem::Version
317
+ version: '0'
318
+ type: :development
319
+ prerelease: false
320
+ version_requirements: !ruby/object:Gem::Requirement
321
+ requirements:
322
+ - - ">="
323
+ - !ruby/object:Gem::Version
324
+ version: '0'
297
325
  description: Allows to define form inputs and filters by relation for ActiveAdmin
298
326
  resource pages using Ransacker to dynamicaly load items while user is typing symbols
299
327
  in filter
@@ -344,7 +372,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
344
372
  - !ruby/object:Gem::Version
345
373
  version: '0'
346
374
  requirements: []
347
- rubygems_version: 3.0.1
375
+ rubygems_version: 3.0.3
348
376
  signing_key:
349
377
  specification_version: 4
350
378
  summary: AJAX filters for ActiveAdmin