ajax-datatables-rails 1.2.0 → 1.3.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +120 -0
  3. data/.rubocop.yml +3 -1
  4. data/Appraisals +7 -13
  5. data/CHANGELOG.md +23 -2
  6. data/README.md +51 -70
  7. data/ajax-datatables-rails.gemspec +11 -5
  8. data/doc/migrate.md +44 -0
  9. data/doc/webpack.md +4 -1
  10. data/gemfiles/{rails_5.2.3.gemfile → rails_5.2.4.gemfile} +1 -1
  11. data/gemfiles/{rails_6.0.1.gemfile → rails_6.0.3.gemfile} +1 -1
  12. data/gemfiles/{rails_5.0.7.gemfile → rails_6.1.0.gemfile} +3 -3
  13. data/lib/ajax-datatables-rails.rb +0 -16
  14. data/lib/ajax-datatables-rails/base.rb +38 -13
  15. data/lib/ajax-datatables-rails/datatable.rb +6 -0
  16. data/lib/ajax-datatables-rails/datatable/column.rb +59 -21
  17. data/lib/ajax-datatables-rails/datatable/column/date_filter.rb +1 -1
  18. data/lib/ajax-datatables-rails/datatable/column/search.rb +2 -2
  19. data/lib/ajax-datatables-rails/datatable/datatable.rb +17 -3
  20. data/lib/ajax-datatables-rails/datatable/simple_order.rb +7 -5
  21. data/lib/ajax-datatables-rails/error.rb +9 -0
  22. data/lib/ajax-datatables-rails/orm.rb +6 -0
  23. data/lib/ajax-datatables-rails/orm/active_record.rb +9 -10
  24. data/lib/ajax-datatables-rails/version.rb +1 -1
  25. data/spec/ajax-datatables-rails/base_spec.rb +77 -120
  26. data/spec/ajax-datatables-rails/datatable/column_spec.rb +30 -10
  27. data/spec/ajax-datatables-rails/datatable/datatable_spec.rb +61 -22
  28. data/spec/ajax-datatables-rails/datatable/simple_order_spec.rb +11 -9
  29. data/spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb +352 -257
  30. data/spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb +4 -4
  31. data/spec/install_oracle.sh +4 -4
  32. data/spec/spec_helper.rb +10 -19
  33. data/spec/support/datatables/complex_datatable.rb +29 -0
  34. data/spec/support/datatables/complex_datatable_array.rb +14 -0
  35. data/spec/support/{datatable_cond_date.rb → datatables/datatable_cond_date.rb} +0 -0
  36. data/spec/support/{datatable_cond_numeric.rb → datatables/datatable_cond_numeric.rb} +0 -0
  37. data/spec/support/{datatable_cond_proc.rb → datatables/datatable_cond_proc.rb} +0 -0
  38. data/spec/support/{datatable_cond_string.rb → datatables/datatable_cond_string.rb} +0 -0
  39. data/spec/support/datatables/datatable_cond_unknown.rb +5 -0
  40. data/spec/support/{datatable_order_nulls_last.rb → datatables/datatable_order_nulls_last.rb} +0 -0
  41. data/spec/support/{test_helpers.rb → helpers/params.rb} +8 -46
  42. data/spec/support/{test_models.rb → models/user.rb} +0 -0
  43. metadata +53 -49
  44. data/.travis.yml +0 -57
  45. data/gemfiles/rails_5.1.7.gemfile +0 -11
  46. data/lib/ajax-datatables-rails/configuration.rb +0 -10
  47. data/lib/generators/datatable/config_generator.rb +0 -19
  48. data/lib/generators/datatable/templates/ajax_datatables_rails_config.rb +0 -9
  49. data/spec/ajax-datatables-rails/configuration_spec.rb +0 -34
  50. data/spec/ajax-datatables-rails/extended_spec.rb +0 -19
@@ -45,8 +45,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
45
45
  end
46
46
 
47
47
  describe '#sort_records with nulls last using global config' do
48
- before { AjaxDatatablesRails.config.nulls_last = true }
49
- after { AjaxDatatablesRails.config.nulls_last = false }
48
+ before { datatable.nulls_last = true }
49
+ after { datatable.nulls_last = false }
50
50
 
51
51
  it 'can handle multiple sorting columns' do
52
52
  skip('unsupported database adapter') if ENV['DB_ADAPTER'] == 'oracle_enhanced'
@@ -56,7 +56,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
56
56
  datatable.params[:order]['0'] = { column: '0', dir: 'asc' }
57
57
  datatable.params[:order]['1'] = { column: '1', dir: 'desc' }
58
58
  expect(datatable.sort_records(records).to_sql).to include(
59
- "ORDER BY users.username ASC #{nulls_last_sql}, users.email DESC #{nulls_last_sql}"
59
+ "ORDER BY users.username ASC #{nulls_last_sql(datatable)}, users.email DESC #{nulls_last_sql(datatable)}"
60
60
  )
61
61
  end
62
62
  end
@@ -70,7 +70,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
70
70
  nulls_last_datatable.params[:order]['0'] = { column: '0', dir: 'asc' }
71
71
  nulls_last_datatable.params[:order]['1'] = { column: '1', dir: 'desc' }
72
72
  expect(nulls_last_datatable.sort_records(records).to_sql).to include(
73
- "ORDER BY users.username ASC, users.email DESC #{nulls_last_sql}"
73
+ "ORDER BY users.username ASC, users.email DESC #{nulls_last_sql(datatable)}"
74
74
  )
75
75
  end
76
76
  end
@@ -4,8 +4,8 @@ wget 'https://github.com/cbandy/travis-oracle/archive/v2.0.3.tar.gz'
4
4
  mkdir -p ~/.travis/oracle
5
5
  tar xz --strip-components 1 -C ~/.travis/oracle -f v2.0.3.tar.gz
6
6
 
7
- if [ -n $CUSTOM_ORACLE_FILE ]; then
8
- wget -q $CUSTOM_ORACLE_FILE -O ~/.travis/oracle/oracle-xe-11.2.0-1.0.x86_64.rpm.zip
7
+ if [ -n ${CUSTOM_ORACLE_FILE} ]; then
8
+ wget -q ${CUSTOM_ORACLE_FILE} -O ~/.travis/oracle/oracle-xe-11.2.0-1.0.x86_64.rpm.zip
9
9
  else
10
10
  ~/.travis/oracle/download.sh
11
11
  fi
@@ -13,6 +13,6 @@ fi
13
13
  ~/.travis/oracle/install.sh
14
14
 
15
15
  # in dev env: sqlplus system/password@localhost/XE
16
- "$ORACLE_HOME/bin/sqlplus" -L -S / AS SYSDBA <<SQL
17
- ALTER USER $USER IDENTIFIED BY $USER;
16
+ "${ORACLE_HOME}/bin/sqlplus" -L -S / AS SYSDBA <<SQL
17
+ ALTER USER ${USER} IDENTIFIED BY ${USER};
18
18
  SQL
@@ -1,5 +1,6 @@
1
1
  require 'simplecov'
2
2
  require 'rspec'
3
+ require 'rspec/retry'
3
4
  require 'database_cleaner'
4
5
  require 'factory_bot'
5
6
  require 'faker'
@@ -21,12 +22,6 @@ RSpec.configure do |config|
21
22
  FactoryBot.find_definitions
22
23
  end
23
24
 
24
- config.after(:each) do
25
- AjaxDatatablesRails.configure do |c|
26
- c.db_adapter = ActiveRecord::Base.connection.adapter_name.downcase.to_sym
27
- end
28
- end
29
-
30
25
  config.color = true
31
26
  config.fail_fast = false
32
27
 
@@ -52,6 +47,12 @@ RSpec.configure do |config|
52
47
  config.after(:each) do
53
48
  DatabaseCleaner.clean
54
49
  end
50
+
51
+ if ENV.key?('GITHUB_ACTIONS')
52
+ config.around(:each) do |ex|
53
+ ex.run_with_retry retry: 3
54
+ end
55
+ end
55
56
  end
56
57
 
57
58
  require 'ajax-datatables-rails'
@@ -64,21 +65,11 @@ options = {
64
65
  encoding: 'utf8'
65
66
  }
66
67
 
67
- options = options.merge(username: 'root') if adapter == 'mysql2'
68
+ options = options.merge(host: '127.0.0.1', port: 5432, username: 'postgres', password: 'postgres') if adapter == 'postgresql'
69
+ options = options.merge(host: '127.0.0.1', port: 3306, username: 'root', password: 'root') if adapter == 'mysql2'
68
70
  options = options.merge(username: ENV['USER'], password: ENV['USER'], database: 'xe', host: '127.0.0.1/xe') if adapter == 'oracle_enhanced'
69
71
  options = options.merge(database: ':memory:') if adapter == 'sqlite3'
70
72
 
71
73
  ActiveRecord::Base.establish_connection(options)
72
74
 
73
- AjaxDatatablesRails.configure do |c|
74
- c.db_adapter = ActiveRecord::Base.connection.adapter_name.downcase.to_sym
75
- end
76
-
77
- load File.dirname(__FILE__) + '/support/schema.rb'
78
- load File.dirname(__FILE__) + '/support/test_helpers.rb'
79
- load File.dirname(__FILE__) + '/support/datatable_cond_date.rb'
80
- load File.dirname(__FILE__) + '/support/datatable_cond_numeric.rb'
81
- load File.dirname(__FILE__) + '/support/datatable_cond_proc.rb'
82
- load File.dirname(__FILE__) + '/support/datatable_cond_string.rb'
83
- load File.dirname(__FILE__) + '/support/datatable_order_nulls_last.rb'
84
- require File.dirname(__FILE__) + '/support/test_models.rb'
75
+ Dir[File.dirname(__FILE__) + '/support/**/*.rb'].sort.each { |f| require f }
@@ -0,0 +1,29 @@
1
+ class ComplexDatatable < AjaxDatatablesRails::ActiveRecord
2
+ def view_columns
3
+ @view_columns ||= {
4
+ username: { source: 'User.username' },
5
+ email: { source: 'User.email' },
6
+ first_name: { source: 'User.first_name' },
7
+ last_name: { source: 'User.last_name' },
8
+ post_id: { source: 'User.post_id', orderable: false },
9
+ created_at: { source: 'User.created_at' },
10
+ }
11
+ end
12
+
13
+ def data
14
+ records.map do |record|
15
+ {
16
+ username: record.username,
17
+ email: record.email,
18
+ first_name: record.first_name,
19
+ last_name: record.last_name,
20
+ post_id: record.post_id,
21
+ created_at: record.created_at,
22
+ }
23
+ end
24
+ end
25
+
26
+ def get_raw_records
27
+ User.all
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ class ComplexDatatableArray < ComplexDatatable
2
+ def data
3
+ records.map do |record|
4
+ [
5
+ record.username,
6
+ record.email,
7
+ record.first_name,
8
+ record.last_name,
9
+ record.post_id,
10
+ record.created_at,
11
+ ]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class DatatableCondUnknown < ComplexDatatable
2
+ def view_columns
3
+ super.deep_merge(username: { cond: :foo })
4
+ end
5
+ end
@@ -51,55 +51,17 @@ def sample_params
51
51
  }
52
52
  )
53
53
  end
54
- # rubocop:enable Metrics/MethodLength
55
-
56
- class ComplexDatatable < AjaxDatatablesRails::ActiveRecord
57
- def view_columns
58
- @view_columns ||= {
59
- username: { source: 'User.username' },
60
- email: { source: 'User.email' },
61
- first_name: { source: 'User.first_name' },
62
- last_name: { source: 'User.last_name' },
63
- post_id: { source: 'User.post_id', orderable: false },
64
- created_at: { source: 'User.created_at' },
65
- }
66
- end
67
-
68
- def data
69
- records.map do |record|
70
- {
71
- username: record.username,
72
- email: record.email,
73
- first_name: record.first_name,
74
- last_name: record.last_name,
75
- post_id: record.post_id,
76
- created_at: record.created_at,
77
- }
78
- end
79
- end
80
54
 
81
- def get_raw_records
82
- User.all
83
- end
84
- end
85
-
86
- class ComplexDatatableArray < ComplexDatatable
87
- def data
88
- records.map do |record|
89
- [
90
- record.username,
91
- record.email,
92
- record.first_name,
93
- record.last_name,
94
- record.post_id,
95
- record.created_at,
96
- ]
97
- end
98
- end
55
+ def sample_params_json
56
+ hash_params = sample_params.to_unsafe_h
57
+ hash_params["columns"] = hash_params["columns"].values
58
+ hash_params["order"] = hash_params["order"].values
59
+ ActionController::Parameters.new(hash_params)
99
60
  end
61
+ # rubocop:enable Metrics/MethodLength
100
62
 
101
- def nulls_last_sql
102
- case AjaxDatatablesRails.config.db_adapter
63
+ def nulls_last_sql(datatable)
64
+ case datatable.db_adapter
103
65
  when :pg, :postgresql, :postgres, :oracle
104
66
  "NULLS LAST"
105
67
  when :mysql, :mysql2, :sqlite, :sqlite3
metadata CHANGED
@@ -1,30 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ajax-datatables-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Quenneville
8
8
  - Antonio Antillon
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-19 00:00:00.000000000 Z
12
+ date: 2021-01-04 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: railties
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - ">="
19
- - !ruby/object:Gem::Version
20
- version: '5.0'
21
- type: :runtime
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- version: '5.0'
28
14
  - !ruby/object:Gem::Dependency
29
15
  name: zeitwerk
30
16
  requirement: !ruby/object:Gem::Requirement
@@ -141,16 +127,16 @@ dependencies:
141
127
  name: pg
142
128
  requirement: !ruby/object:Gem::Requirement
143
129
  requirements:
144
- - - "<"
130
+ - - ">="
145
131
  - !ruby/object:Gem::Version
146
- version: '1.0'
132
+ version: '0'
147
133
  type: :development
148
134
  prerelease: false
149
135
  version_requirements: !ruby/object:Gem::Requirement
150
136
  requirements:
151
- - - "<"
137
+ - - ">="
152
138
  - !ruby/object:Gem::Version
153
- version: '1.0'
139
+ version: '0'
154
140
  - !ruby/object:Gem::Dependency
155
141
  name: pry
156
142
  requirement: !ruby/object:Gem::Requirement
@@ -171,14 +157,14 @@ dependencies:
171
157
  requirements:
172
158
  - - ">="
173
159
  - !ruby/object:Gem::Version
174
- version: '5.0'
160
+ version: '5.2'
175
161
  type: :development
176
162
  prerelease: false
177
163
  version_requirements: !ruby/object:Gem::Requirement
178
164
  requirements:
179
165
  - - ">="
180
166
  - !ruby/object:Gem::Version
181
- version: '5.0'
167
+ version: '5.2'
182
168
  - !ruby/object:Gem::Dependency
183
169
  name: rake
184
170
  requirement: !ruby/object:Gem::Requirement
@@ -207,6 +193,20 @@ dependencies:
207
193
  - - ">="
208
194
  - !ruby/object:Gem::Version
209
195
  version: '0'
196
+ - !ruby/object:Gem::Dependency
197
+ name: rspec-retry
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
210
  - !ruby/object:Gem::Dependency
211
211
  name: rubocop
212
212
  requirement: !ruby/object:Gem::Requirement
@@ -225,16 +225,16 @@ dependencies:
225
225
  name: simplecov
226
226
  requirement: !ruby/object:Gem::Requirement
227
227
  requirements:
228
- - - "~>"
228
+ - - ">="
229
229
  - !ruby/object:Gem::Version
230
- version: 0.17.1
230
+ version: '0'
231
231
  type: :development
232
232
  prerelease: false
233
233
  version_requirements: !ruby/object:Gem::Requirement
234
234
  requirements:
235
- - - "~>"
235
+ - - ">="
236
236
  - !ruby/object:Gem::Version
237
- version: 0.17.1
237
+ version: '0'
238
238
  description: A wrapper around datatable's ajax methods that allow synchronization
239
239
  with server-side pagination in a rails app
240
240
  email:
@@ -245,10 +245,10 @@ extensions: []
245
245
  extra_rdoc_files: []
246
246
  files:
247
247
  - ".codeclimate.yml"
248
+ - ".github/workflows/ci.yml"
248
249
  - ".gitignore"
249
250
  - ".rspec"
250
251
  - ".rubocop.yml"
251
- - ".travis.yml"
252
252
  - Appraisals
253
253
  - CHANGELOG.md
254
254
  - Gemfile
@@ -265,14 +265,13 @@ files:
265
265
  - bin/rubocop
266
266
  - doc/migrate.md
267
267
  - doc/webpack.md
268
- - gemfiles/rails_5.0.7.gemfile
269
- - gemfiles/rails_5.1.7.gemfile
270
- - gemfiles/rails_5.2.3.gemfile
271
- - gemfiles/rails_6.0.1.gemfile
268
+ - gemfiles/rails_5.2.4.gemfile
269
+ - gemfiles/rails_6.0.3.gemfile
270
+ - gemfiles/rails_6.1.0.gemfile
272
271
  - lib/ajax-datatables-rails.rb
273
272
  - lib/ajax-datatables-rails/active_record.rb
274
273
  - lib/ajax-datatables-rails/base.rb
275
- - lib/ajax-datatables-rails/configuration.rb
274
+ - lib/ajax-datatables-rails/datatable.rb
276
275
  - lib/ajax-datatables-rails/datatable/column.rb
277
276
  - lib/ajax-datatables-rails/datatable/column/date_filter.rb
278
277
  - lib/ajax-datatables-rails/datatable/column/order.rb
@@ -280,19 +279,17 @@ files:
280
279
  - lib/ajax-datatables-rails/datatable/datatable.rb
281
280
  - lib/ajax-datatables-rails/datatable/simple_order.rb
282
281
  - lib/ajax-datatables-rails/datatable/simple_search.rb
282
+ - lib/ajax-datatables-rails/error.rb
283
+ - lib/ajax-datatables-rails/orm.rb
283
284
  - lib/ajax-datatables-rails/orm/active_record.rb
284
285
  - lib/ajax-datatables-rails/version.rb
285
- - lib/generators/datatable/config_generator.rb
286
- - lib/generators/datatable/templates/ajax_datatables_rails_config.rb
287
286
  - lib/generators/rails/datatable_generator.rb
288
287
  - lib/generators/rails/templates/datatable.rb
289
288
  - spec/ajax-datatables-rails/base_spec.rb
290
- - spec/ajax-datatables-rails/configuration_spec.rb
291
289
  - spec/ajax-datatables-rails/datatable/column_spec.rb
292
290
  - spec/ajax-datatables-rails/datatable/datatable_spec.rb
293
291
  - spec/ajax-datatables-rails/datatable/simple_order_spec.rb
294
292
  - spec/ajax-datatables-rails/datatable/simple_search_spec.rb
295
- - spec/ajax-datatables-rails/extended_spec.rb
296
293
  - spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb
297
294
  - spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb
298
295
  - spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb
@@ -300,19 +297,26 @@ files:
300
297
  - spec/factories/user.rb
301
298
  - spec/install_oracle.sh
302
299
  - spec/spec_helper.rb
303
- - spec/support/datatable_cond_date.rb
304
- - spec/support/datatable_cond_numeric.rb
305
- - spec/support/datatable_cond_proc.rb
306
- - spec/support/datatable_cond_string.rb
307
- - spec/support/datatable_order_nulls_last.rb
300
+ - spec/support/datatables/complex_datatable.rb
301
+ - spec/support/datatables/complex_datatable_array.rb
302
+ - spec/support/datatables/datatable_cond_date.rb
303
+ - spec/support/datatables/datatable_cond_numeric.rb
304
+ - spec/support/datatables/datatable_cond_proc.rb
305
+ - spec/support/datatables/datatable_cond_string.rb
306
+ - spec/support/datatables/datatable_cond_unknown.rb
307
+ - spec/support/datatables/datatable_order_nulls_last.rb
308
+ - spec/support/helpers/params.rb
309
+ - spec/support/models/user.rb
308
310
  - spec/support/schema.rb
309
- - spec/support/test_helpers.rb
310
- - spec/support/test_models.rb
311
311
  homepage: https://github.com/jbox-web/ajax-datatables-rails
312
312
  licenses:
313
313
  - MIT
314
- metadata: {}
315
- post_install_message:
314
+ metadata:
315
+ homepage_uri: https://github.com/jbox-web/ajax-datatables-rails
316
+ changelog_uri: https://github.com/jbox-web/ajax-datatables-rails/blob/master/CHANGELOG.md
317
+ source_code_uri: https://github.com/jbox-web/ajax-datatables-rails
318
+ bug_tracker_uri: https://github.com/jbox-web/ajax-datatables-rails/issues
319
+ post_install_message:
316
320
  rdoc_options: []
317
321
  require_paths:
318
322
  - lib
@@ -320,15 +324,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
320
324
  requirements:
321
325
  - - ">="
322
326
  - !ruby/object:Gem::Version
323
- version: 2.4.4
327
+ version: 2.5.0
324
328
  required_rubygems_version: !ruby/object:Gem::Requirement
325
329
  requirements:
326
330
  - - ">="
327
331
  - !ruby/object:Gem::Version
328
332
  version: '0'
329
333
  requirements: []
330
- rubygems_version: 3.1.2
331
- signing_key:
334
+ rubygems_version: 3.2.3
335
+ signing_key:
332
336
  specification_version: 4
333
337
  summary: A gem that simplifies using datatables and hundreds of records via ajax
334
338
  test_files: []