ajax-datatables-rails 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -3
  3. data/.travis.yml +23 -19
  4. data/Appraisals +23 -8
  5. data/CHANGELOG.md +12 -0
  6. data/Gemfile +0 -5
  7. data/README.md +59 -40
  8. data/Rakefile +1 -0
  9. data/ajax-datatables-rails.gemspec +12 -18
  10. data/doc/webpack.md +3 -1
  11. data/gemfiles/{rails_4.2.10.gemfile → rails_4.2.11.gemfile} +3 -6
  12. data/gemfiles/rails_5.0.7.gemfile +2 -4
  13. data/gemfiles/{rails_5.1.6.gemfile → rails_5.1.7.gemfile} +3 -5
  14. data/gemfiles/{rails_5.2.0.gemfile → rails_5.2.3.gemfile} +3 -5
  15. data/gemfiles/rails_6.0.1.gemfile +11 -0
  16. data/lib/ajax-datatables-rails/base.rb +11 -2
  17. data/lib/ajax-datatables-rails/datatable/column.rb +7 -5
  18. data/lib/ajax-datatables-rails/datatable/column/date_filter.rb +1 -0
  19. data/lib/ajax-datatables-rails/datatable/column/search.rb +2 -0
  20. data/lib/ajax-datatables-rails/datatable/datatable.rb +2 -0
  21. data/lib/ajax-datatables-rails/datatable/simple_order.rb +14 -5
  22. data/lib/ajax-datatables-rails/orm/active_record.rb +2 -2
  23. data/lib/ajax-datatables-rails/version.rb +1 -1
  24. data/spec/ajax-datatables-rails/base_spec.rb +21 -2
  25. data/spec/ajax-datatables-rails/datatable/column_spec.rb +7 -2
  26. data/spec/ajax-datatables-rails/datatable/simple_order_spec.rb +25 -6
  27. data/spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb +38 -4
  28. data/spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb +4 -4
  29. data/spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb +6 -4
  30. data/spec/install_oracle.sh +7 -1
  31. data/spec/support/datatable_cond_string.rb +6 -0
  32. data/spec/support/test_helpers.rb +11 -0
  33. metadata +25 -75
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48269680add42469ca399b87c62e395e7496c576ff1e5e350c67156d2b9daf6e
4
- data.tar.gz: 2f1798f22e4cbe46709b54ec31a589c00a076e0a989b67d8aa76f7a550e9531f
3
+ metadata.gz: b690e6b2bd562caa937795e7aeab2a0cff933087cc48d6949a74feefe94b8715
4
+ data.tar.gz: 20c23647a4dfbc9d98e342d05d15a831af37aeba0b4ec3d1bba60353988a6c46
5
5
  SHA512:
6
- metadata.gz: 1821dac17ccb0ecc2e5b81ceffd2e3401a7ebe004e388378ab118046bafcf9634dbcb2dbb28a18a1e7482d21abfd28cf0e3868265a1ed88f0b648e81a701a6e9
7
- data.tar.gz: d6ed01a390d8f9c16861d7258a57e65ac40ce5b1fd8bd74f43185e8ad27009393017d64bd33e43e2c649ee59394abc41591a74dff4767d56ddba61435f10de7f
6
+ metadata.gz: 8eed46ec32eca34390aba3612445be363c20e576b451116c870c5f14dadffe6422c1956368e74f4d7a141e5f36f31c621390fa2299880988c1479f850c3d105c
7
+ data.tar.gz: 3ec8bbc383634e76dbce2df04f428cae377f9b26ca698ec71a7eae097c9156ba7fcd75eab90f18823660801600e39c75ef4bbdb91f65c13ae65802561f3d4d79
@@ -9,7 +9,7 @@ AllCops:
9
9
  Documentation:
10
10
  Enabled: false
11
11
 
12
- Gemspec/OrderedDependencies:
12
+ Layout/AlignHash:
13
13
  Enabled: false
14
14
 
15
15
  Layout/EmptyLines:
@@ -45,5 +45,8 @@ Metrics/ClassLength:
45
45
  Naming/AccessorMethodName:
46
46
  Enabled: false
47
47
 
48
- Style/NumericPredicate:
49
- Enabled: false
48
+ Style/TrailingCommaInArrayLiteral:
49
+ EnforcedStyleForMultiline: comma
50
+
51
+ Style/TrailingCommaInHashLiteral:
52
+ EnforcedStyleForMultiline: comma
@@ -1,31 +1,24 @@
1
- dist: trusty
2
1
  language: ruby
3
- sudo: required
4
2
  cache: bundler
3
+ sudo: required
5
4
  rvm:
6
- - 2.3.7
7
- - 2.4.4
8
- - 2.5.1
5
+ - 2.6.5
6
+ - 2.5.7
7
+ - 2.4.9
8
+ - 2.3.8
9
+ - ruby-head
9
10
  gemfile:
10
- - gemfiles/rails_4.2.10.gemfile
11
+ - gemfiles/rails_4.2.11.gemfile
11
12
  - gemfiles/rails_5.0.7.gemfile
12
- - gemfiles/rails_5.1.6.gemfile
13
- - gemfiles/rails_5.2.0.gemfile
14
- after_success:
15
- - bundle exec codeclimate-test-reporter
13
+ - gemfiles/rails_5.1.7.gemfile
14
+ - gemfiles/rails_5.2.3.gemfile
15
+ - gemfiles/rails_6.0.1.gemfile
16
16
  services:
17
17
  - postgresql
18
18
  - mysql
19
19
  addons:
20
20
  postgresql: '9.6'
21
- apt:
22
- packages:
23
- - mysql-server-5.6
24
- - mysql-client-core-5.6
25
- - mysql-client-5.6
26
21
  before_install:
27
- - gem update --system
28
- - gem install bundler
29
22
  - sh -c "if [ '$DB_ADAPTER' = 'mysql2' ]; then mysql -e 'create database ajax_datatables_rails;'; fi"
30
23
  - sh -c "if [ '$DB_ADAPTER' = 'postgresql' ]; then psql -c 'create database ajax_datatables_rails;' -U postgres; fi"
31
24
  - sh -c "if [ '$DB_ADAPTER' = 'oracle_enhanced' ]; then ./spec/install_oracle.sh; fi"
@@ -41,5 +34,16 @@ env:
41
34
  - DB_ADAPTER=sqlite3
42
35
  - DB_ADAPTER=oracle_enhanced
43
36
  matrix:
44
- allow_failures:
45
- - env: DB_ADAPTER=oracle_enhanced
37
+ exclude:
38
+ - rvm: ruby-head
39
+ gemfile: gemfiles/rails_4.2.11.gemfile
40
+ - rvm: 2.3.8
41
+ gemfile: gemfiles/rails_6.0.1.gemfile
42
+ - rvm: 2.4.9
43
+ gemfile: gemfiles/rails_6.0.1.gemfile
44
+ before_script:
45
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
46
+ - chmod +x ./cc-test-reporter
47
+ - ./cc-test-reporter before-build
48
+ after_script:
49
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/Appraisals CHANGED
@@ -1,21 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RAILS_VERSIONS = {
4
- '4.2.10' => {
5
- 'activerecord-oracle_enhanced-adapter' => '~> 1.6.0'
4
+ '4.2.11' => {
5
+ 'activerecord-oracle_enhanced-adapter' => '~> 1.6.0',
6
+ 'sqlite3' => '~> 1.3.0',
7
+ 'mysql2' => '0.4.10',
8
+ 'ruby-oci8' => '',
6
9
  },
7
10
  '5.0.7' => {
8
11
  'activerecord-oracle_enhanced-adapter' => '~> 1.7.0',
9
- 'ruby-oci8' => ''
12
+ 'sqlite3' => '~> 1.3.0',
13
+ 'mysql2' => '',
14
+ 'ruby-oci8' => '',
10
15
  },
11
- '5.1.6' => {
16
+ '5.1.7' => {
12
17
  'activerecord-oracle_enhanced-adapter' => '~> 1.8.0',
13
- 'ruby-oci8' => ''
18
+ 'sqlite3' => '~> 1.3.0',
19
+ 'mysql2' => '',
20
+ 'ruby-oci8' => '',
14
21
  },
15
- '5.2.0' => {
22
+ '5.2.3' => {
16
23
  'activerecord-oracle_enhanced-adapter' => '~> 5.2.0',
17
- 'ruby-oci8' => ''
18
- }
24
+ 'sqlite3' => '~> 1.3.0',
25
+ 'mysql2' => '',
26
+ 'ruby-oci8' => '',
27
+ },
28
+ '6.0.1' => {
29
+ 'activerecord-oracle_enhanced-adapter' => '~> 6.0.0',
30
+ 'sqlite3' => '~> 1.4.0',
31
+ 'mysql2' => '',
32
+ 'ruby-oci8' => '',
33
+ },
19
34
  }.freeze
20
35
 
21
36
  RAILS_VERSIONS.each do |version, gems|
@@ -1,5 +1,17 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.1.0 (to come)
4
+
5
+ * Add rudimentary support for Microsoft SQL Server
6
+ * Fixes errors when options[param] is nil [PR 315](https://github.com/jbox-web/ajax-datatables-rails/pull/315) (thanks @allard)
7
+ * Improve query performance when nulls_last option is enabled [PR 317](https://github.com/jbox-web/ajax-datatables-rails/pull/317) (thanks @natebird)
8
+ * Add :string_in cond [PR 323](https://github.com/jbox-web/ajax-datatables-rails/pull/323) (thanks @donnguyen)
9
+ * Rename `sanitize` private method [PR 326](https://github.com/jbox-web/ajax-datatables-rails/pull/326) (thanks @epipheus)
10
+ * Update documentation
11
+ * Test with latest Rails (6.x) and Ruby versions (2.6)
12
+
13
+ This is the last version to support Rails 4.x and Ruby 2.3.x.
14
+
3
15
  ## 1.0.0 (2018-08-28)
4
16
 
5
17
  * Breaking change: Remove dependency on view_context [Issue #288](https://github.com/jbox-web/ajax-datatables-rails/issues/288)
data/Gemfile CHANGED
@@ -3,8 +3,3 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
-
7
- # CodeClimate Test Coverage
8
- group :test do
9
- gem 'codeclimate-test-reporter', '~> 1.0.0'
10
- end
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![GitHub license](https://img.shields.io/github/license/jbox-web/ajax-datatables-rails.svg)](https://github.com/jbox-web/ajax-datatables-rails/blob/master/LICENSE)
4
4
  [![Gem](https://img.shields.io/gem/v/ajax-datatables-rails.svg)](https://rubygems.org/gems/ajax-datatables-rails)
5
5
  [![Gem](https://img.shields.io/gem/dtv/ajax-datatables-rails.svg)](https://rubygems.org/gems/ajax-datatables-rails)
6
- [![Build Status](https://travis-ci.org/jbox-web/ajax-datatables-rails.svg?branch=master)](https://travis-ci.org/jbox-web/ajax-datatables-rails)
6
+ [![Build Status](https://travis-ci.com/jbox-web/ajax-datatables-rails.svg?branch=master)](https://travis-ci.com/jbox-web/ajax-datatables-rails)
7
7
  [![Code Climate](https://codeclimate.com/github/jbox-web/ajax-datatables-rails/badges/gpa.svg)](https://codeclimate.com/github/jbox-web/ajax-datatables-rails)
8
8
  [![Test Coverage](https://codeclimate.com/github/jbox-web/ajax-datatables-rails/badges/coverage.svg)](https://codeclimate.com/github/jbox-web/ajax-datatables-rails/coverage)
9
9
 
@@ -11,8 +11,8 @@
11
11
 
12
12
  It's tested against :
13
13
 
14
- * Rails 4.2.10 / 5.0.7 / 5.1.6 / 5.2.0
15
- * Ruby 2.3.7 / 2.4.4 / 2.5.1
14
+ * Rails 4.2.11 / 5.0.7 / 5.1.7 / 5.2.3 / 6.0.1
15
+ * Ruby 2.3.8 / 2.4.9 / 2.5.7 / 2.6.5
16
16
  * Postgresql 9.6
17
17
  * MySQL 5.6
18
18
  * Oracle XE 11.2 (thanks to [travis-oracle](https://github.com/cbandy/travis-oracle))
@@ -215,7 +215,7 @@ end
215
215
 
216
216
  `cond` can be :
217
217
 
218
- * `:like`, `:start_with`, `:end_with`, `:string_eq` for string or full text search
218
+ * `:like`, `:start_with`, `:end_with`, `:string_eq`, `:string_in` for string or full text search
219
219
  * `:eq`, `:not_eq`, `:lt`, `:gt`, `:lteq`, `:gteq`, `:in` for numeric
220
220
  * `:date_range` for date range (only for Rails > 4.2.x, see [here](#daterange-search))
221
221
  * `:null_value` for nil field
@@ -337,6 +337,8 @@ Don't forget to make sure the proper route has been added to `config/routes.rb`.
337
337
 
338
338
  [See here](#pass-options-to-the-datatable-class) if you need to inject params in the `UserDatatable`.
339
339
 
340
+ **Note :** If you have more than **2** datatables in your application, don't forget to read [this](#use-http-post-method-medium).
341
+
340
342
  ### 5) Wire up the Javascript
341
343
 
342
344
  Finally, the javascript to tie this all together. In the appropriate `coffee` file:
@@ -348,7 +350,8 @@ $ ->
348
350
  $('#users-datatable').dataTable
349
351
  processing: true
350
352
  serverSide: true
351
- ajax: $('#users-datatable').data('source')
353
+ ajax:
354
+ url: $('#users-datatable').data('source')
352
355
  pagingType: 'full_numbers'
353
356
  columns: [
354
357
  {data: 'id'}
@@ -371,7 +374,9 @@ jQuery(document).ready(function() {
371
374
  $('#users-datatable').dataTable({
372
375
  "processing": true,
373
376
  "serverSide": true,
374
- "ajax": $('#users-datatable').data('source'),
377
+ "ajax": {
378
+ "url": $('#users-datatable').data('source')
379
+ },
375
380
  "pagingType": "full_numbers",
376
381
  "columns": [
377
382
  {"data": "id"},
@@ -451,7 +456,8 @@ It also helps in separating view/presentation logic from filtering logic (the on
451
456
  Example :
452
457
 
453
458
  ```ruby
454
- ...
459
+ class UserDatatable < AjaxDatatablesRails::ActiveRecord
460
+ ...
455
461
  def data
456
462
  records.map do |record|
457
463
  {
@@ -464,7 +470,8 @@ Example :
464
470
  }
465
471
  end
466
472
  end
467
- ...
473
+ ...
474
+ end
468
475
 
469
476
  class UserDecorator < ApplicationDecorator
470
477
  delegate :last_name, :bio
@@ -653,7 +660,7 @@ This feature works with [yadcf](https://github.com/vedmack/yadcf).
653
660
 
654
661
  To enable the date range search, for example `created_at` :
655
662
 
656
- * add a 'created_at' `<th>` in your html
663
+ * add a `created_at` `<th>` in your html
657
664
  * declare your column in `view_columns` : `created_at: { source: 'Post.created_at', cond: :date_range, delimiter: '-yadcf_delim-' }`
658
665
  * add it in `data` : `created_at: record.decorate.created_at`
659
666
  * setup yadcf to make `created_at` search field a range
@@ -680,9 +687,21 @@ In the end, it's up to the developer which model(s), scope(s), relationship(s)
680
687
  (or else) to employ inside the datatable class to retrieve records from the
681
688
  database.
682
689
 
690
+ ## Tests
691
+
692
+ Datatables can be tested with Capybara provided you don't use Webrick during integration tests.
693
+
694
+ Long story short and as a rule of thumb : use the same webserver everywhere (dev, prod, staging, test, etc...).
695
+
696
+ If you use Puma (the Rails default webserver), use Puma everywhere, even in CI/test environment. The same goes for Thin.
697
+
698
+ You will avoid the usual story : it works in dev but not in test environment...
699
+
700
+ If you want to test datatables with a lot of data you might need this kind of tricks : https://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara. (thanks CharlieIGG)
701
+
683
702
  ## ProTips™
684
703
 
685
- ### Create a master parent class
704
+ ### Create a master parent class (Easy)
686
705
 
687
706
  In the same spirit of Rails `ApplicationController` and `ApplicationRecord`, you can create an `ApplicationDatatable` class (in `app/datatables/application_datatable.rb`)
688
707
  that will be inherited from other classes :
@@ -698,34 +717,7 @@ end
698
717
 
699
718
  This way it will be easier to DRY you datatables.
700
719
 
701
- ### Create indices for Postgresql
702
-
703
- In order to speed up the `ILIKE` queries that are executed when using the default configuration, you might want to consider adding some indices.
704
- For postgresql, you are advised to use the [gin/gist index type](http://www.postgresql.org/docs/current/interactive/pgtrgm.html).
705
- This makes it necessary to enable the postgrsql extension `pg_trgm`. Double check that you have this extension installed before trying to enable it.
706
- A migration for enabling the extension and creating the indices could look like this:
707
-
708
- ```ruby
709
- def change
710
- enable_extension :pg_trgm
711
- TEXT_SEARCH_ATTRIBUTES = ['your', 'attributes']
712
- TABLE = 'your_table'
713
-
714
- TEXT_SEARCH_ATTRIBUTES.each do |attr|
715
- reversible do |dir|
716
- dir.up do
717
- execute "CREATE INDEX #{TABLE}_#{attr}_gin ON #{TABLE} USING gin(#{attr} gin_trgm_ops)"
718
- end
719
-
720
- dir.down do
721
- remove_index TABLE.to_sym, name: "#{TABLE}_#{attr}_gin"
722
- end
723
- end
724
- end
725
- end
726
- ```
727
-
728
- ### Speedup JSON rendering
720
+ ### Speedup JSON rendering (Easy)
729
721
 
730
722
  Install [yajl-ruby](https://github.com/brianmario/yajl-ruby), basically :
731
723
 
@@ -741,9 +733,9 @@ $ bundle install
741
733
 
742
734
  That's all :) ([Automatically prefer Yajl or JSON backend over Yaml, if available](https://github.com/rails/rails/commit/63bb955a99eb46e257655c93dd64e86ebbf05651))
743
735
 
744
- ### Use HTTP `POST` method
736
+ ### Use HTTP `POST` method (Medium)
745
737
 
746
- Use HTTP `POST` method to avoid `414 Request-URI Too Large` error. See : [#278](https://github.com/jbox-web/ajax-datatables-rails/issues/278).
738
+ Use HTTP `POST` method to avoid `414 Request-URI Too Large` error. See : [#278](https://github.com/jbox-web/ajax-datatables-rails/issues/278) and [#308](https://github.com/jbox-web/ajax-datatables-rails/issues/308#issuecomment-424897335).
747
739
 
748
740
  You can easily define a route concern in `config/routes.rb` and reuse it when you need it :
749
741
 
@@ -806,6 +798,33 @@ $ ->
806
798
  # ...others options, see [here](#5-wire-up-the-javascript)
807
799
  ```
808
800
 
801
+ ### Create indices for Postgresql (Expert)
802
+
803
+ In order to speed up the `ILIKE` queries that are executed when using the default configuration, you might want to consider adding some indices.
804
+ For postgresql, you are advised to use the [gin/gist index type](http://www.postgresql.org/docs/current/interactive/pgtrgm.html).
805
+ This makes it necessary to enable the postgrsql extension `pg_trgm`. Double check that you have this extension installed before trying to enable it.
806
+ A migration for enabling the extension and creating the indices could look like this:
807
+
808
+ ```ruby
809
+ def change
810
+ enable_extension :pg_trgm
811
+ TEXT_SEARCH_ATTRIBUTES = ['your', 'attributes']
812
+ TABLE = 'your_table'
813
+
814
+ TEXT_SEARCH_ATTRIBUTES.each do |attr|
815
+ reversible do |dir|
816
+ dir.up do
817
+ execute "CREATE INDEX #{TABLE}_#{attr}_gin ON #{TABLE} USING gin(#{attr} gin_trgm_ops)"
818
+ end
819
+
820
+ dir.down do
821
+ remove_index TABLE.to_sym, name: "#{TABLE}_#{attr}_gin"
822
+ end
823
+ end
824
+ end
825
+ end
826
+ ```
827
+
809
828
  ## Tutorial
810
829
 
811
830
  You'll find a sample project [here](https://github.com/ajahongir/ajax-datatables-rails-v-0-4-0-how-to). Its real world example.
data/Rakefile CHANGED
@@ -10,6 +10,7 @@ task :console do
10
10
  require 'pry'
11
11
  require 'rails'
12
12
  require 'ajax-datatables-rails'
13
+ puts 'Loaded AjaxDatatablesRails'
13
14
  ARGV.clear
14
15
  Pry.start
15
16
  end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- $LOAD_PATH.push File.expand_path('lib', __dir__)
4
- require 'ajax-datatables-rails/version'
3
+ require_relative 'lib/ajax-datatables-rails/version'
5
4
 
6
5
  Gem::Specification.new do |s|
7
6
  s.name = 'ajax-datatables-rails'
@@ -14,25 +13,20 @@ Gem::Specification.new do |s|
14
13
  s.description = "A wrapper around datatable's ajax methods that allow synchronization with server-side pagination in a rails app"
15
14
  s.license = 'MIT'
16
15
 
17
- s.add_dependency 'railties', '>= 4.2'
16
+ s.files = `git ls-files`.split("\n")
17
+
18
+ s.add_runtime_dependency 'railties', '>= 4.2'
18
19
 
19
- s.add_development_dependency 'rails', '>= 4.2'
20
- s.add_development_dependency 'rake'
21
- s.add_development_dependency 'pg', '< 1.0'
22
- s.add_development_dependency 'mysql2'
23
- s.add_development_dependency 'sqlite3'
24
20
  s.add_development_dependency 'activerecord-oracle_enhanced-adapter'
25
- s.add_development_dependency 'rspec'
26
- s.add_development_dependency 'generator_spec'
27
- s.add_development_dependency 'pry'
28
- s.add_development_dependency 'simplecov'
21
+ s.add_development_dependency 'appraisal'
29
22
  s.add_development_dependency 'database_cleaner'
30
23
  s.add_development_dependency 'factory_bot'
31
24
  s.add_development_dependency 'faker'
32
- s.add_development_dependency 'appraisal'
33
-
34
- s.files = `git ls-files`.split("\n")
35
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
36
- s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
37
- s.require_paths = ['lib']
25
+ s.add_development_dependency 'generator_spec'
26
+ s.add_development_dependency 'pg', '< 1.0'
27
+ s.add_development_dependency 'pry'
28
+ s.add_development_dependency 'rails', '>= 4.2'
29
+ s.add_development_dependency 'rake'
30
+ s.add_development_dependency 'rspec'
31
+ s.add_development_dependency 'simplecov'
38
32
  end
@@ -5,7 +5,9 @@ We assume here that Bootstrap and FontAwesome are already installed with Webpack
5
5
  Inspired by https://datatables.net/download and completed :
6
6
 
7
7
  Add npm packages :
8
-
8
+ ```sh
9
+ $ yarn add imports-loader
10
+ ```
9
11
  ```sh
10
12
  $ yarn add datatables.net
11
13
  $ yarn add datatables.net-bs
@@ -2,13 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "4.2.10"
6
- gem "mysql2", "0.4.10"
5
+ gem "rails", "4.2.11"
7
6
  gem "activerecord-oracle_enhanced-adapter", "~> 1.6.0"
7
+ gem "sqlite3", "~> 1.3.0"
8
+ gem "mysql2", "0.4.10"
8
9
  gem "ruby-oci8" if ENV["DB_ADAPTER"] == "oracle_enhanced"
9
10
 
10
- group :test do
11
- gem "codeclimate-test-reporter", "~> 1.0.0"
12
- end
13
-
14
11
  gemspec path: "../"
@@ -4,10 +4,8 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "rails", "5.0.7"
6
6
  gem "activerecord-oracle_enhanced-adapter", "~> 1.7.0"
7
+ gem "sqlite3", "~> 1.3.0"
8
+ gem "mysql2"
7
9
  gem "ruby-oci8" if ENV["DB_ADAPTER"] == "oracle_enhanced"
8
10
 
9
- group :test do
10
- gem "codeclimate-test-reporter", "~> 1.0.0"
11
- end
12
-
13
11
  gemspec path: "../"
@@ -2,12 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "5.1.6"
5
+ gem "rails", "5.1.7"
6
6
  gem "activerecord-oracle_enhanced-adapter", "~> 1.8.0"
7
+ gem "sqlite3", "~> 1.3.0"
8
+ gem "mysql2"
7
9
  gem "ruby-oci8" if ENV["DB_ADAPTER"] == "oracle_enhanced"
8
10
 
9
- group :test do
10
- gem "codeclimate-test-reporter", "~> 1.0.0"
11
- end
12
-
13
11
  gemspec path: "../"
@@ -2,12 +2,10 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "rails", "5.2.0"
5
+ gem "rails", "5.2.3"
6
6
  gem "activerecord-oracle_enhanced-adapter", "~> 5.2.0"
7
+ gem "sqlite3", "~> 1.3.0"
8
+ gem "mysql2"
7
9
  gem "ruby-oci8" if ENV["DB_ADAPTER"] == "oracle_enhanced"
8
10
 
9
- group :test do
10
- gem "codeclimate-test-reporter", "~> 1.0.0"
11
- end
12
-
13
11
  gemspec path: "../"
@@ -0,0 +1,11 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rails", "6.0.1"
6
+ gem "activerecord-oracle_enhanced-adapter", "~> 6.0.0"
7
+ gem "sqlite3", "~> 1.4.0"
8
+ gem "mysql2"
9
+ gem "ruby-oci8" if ENV["DB_ADAPTER"] == "oracle_enhanced"
10
+
11
+ gemspec path: "../"
@@ -33,7 +33,7 @@ module AjaxDatatablesRails
33
33
  {
34
34
  recordsTotal: records_total_count,
35
35
  recordsFiltered: records_filtered_count,
36
- data: sanitize(data)
36
+ data: sanitize_data(data),
37
37
  }.merge(get_additional_data)
38
38
  end
39
39
 
@@ -81,7 +81,7 @@ module AjaxDatatablesRails
81
81
  end
82
82
  end
83
83
 
84
- def sanitize(data)
84
+ def sanitize_data(data)
85
85
  data.map do |record|
86
86
  if record.is_a?(Array)
87
87
  record.map { |td| ERB::Util.html_escape(td) }
@@ -111,6 +111,15 @@ module AjaxDatatablesRails
111
111
  GLOBAL_SEARCH_DELIMITER
112
112
  end
113
113
 
114
+ def column_id(name)
115
+ view_columns.keys.index(name.to_sym)
116
+ end
117
+
118
+ def column_data(column)
119
+ id = column_id(column)
120
+ params.dig('columns', id.to_s, 'search', 'value')
121
+ end
122
+
114
123
  def raw_records_error_text
115
124
  <<-ERROR
116
125
 
@@ -4,10 +4,11 @@ module AjaxDatatablesRails
4
4
  module Datatable
5
5
  class Column
6
6
 
7
- TYPE_CAST_DEFAULT = 'VARCHAR'
8
- TYPE_CAST_MYSQL = 'CHAR'
9
- TYPE_CAST_SQLITE = 'TEXT'
10
- TYPE_CAST_ORACLE = 'VARCHAR2(4000)'
7
+ TYPE_CAST_DEFAULT = 'VARCHAR'
8
+ TYPE_CAST_MYSQL = 'CHAR'
9
+ TYPE_CAST_SQLITE = 'TEXT'
10
+ TYPE_CAST_ORACLE = 'VARCHAR2(4000)'
11
+ TYPE_CAST_SQLSERVER = 'VARCHAR(4000)'
11
12
 
12
13
  DB_ADAPTER_TYPE_CAST = {
13
14
  mysql: TYPE_CAST_MYSQL,
@@ -15,7 +16,8 @@ module AjaxDatatablesRails
15
16
  sqlite: TYPE_CAST_SQLITE,
16
17
  sqlite3: TYPE_CAST_SQLITE,
17
18
  oracle: TYPE_CAST_ORACLE,
18
- oracleenhanced: TYPE_CAST_ORACLE
19
+ oracleenhanced: TYPE_CAST_ORACLE,
20
+ sqlserver: TYPE_CAST_SQLSERVER,
19
21
  }.freeze
20
22
 
21
23
  attr_reader :datatable, :index, :options
@@ -44,6 +44,7 @@ module AjaxDatatablesRails
44
44
  # Do a range search
45
45
  def date_range_search
46
46
  return nil if empty_range_search?
47
+
47
48
  table[field].between(DateRange.new(range_start_casted, range_end_casted))
48
49
  end
49
50
 
@@ -71,6 +71,8 @@ module AjaxDatatablesRails
71
71
  casted_column.matches("%#{formatted_value}%")
72
72
  when :string_eq
73
73
  raw_search(:eq)
74
+ when :string_in
75
+ raw_search(:in)
74
76
  when :date_range
75
77
  date_range_search
76
78
  end
@@ -68,6 +68,8 @@ module AjaxDatatablesRails
68
68
  end
69
69
 
70
70
  def get_param(param)
71
+ return {} if options[param].nil?
72
+
71
73
  options[param].to_unsafe_h.with_indifferent_access
72
74
  end
73
75
 
@@ -14,11 +14,7 @@ module AjaxDatatablesRails
14
14
  end
15
15
 
16
16
  def query(sort_column)
17
- if sort_nulls_last?
18
- "CASE WHEN #{sort_column} IS NULL THEN 1 ELSE 0 END, #{sort_column} #{direction}"
19
- else
20
- "#{sort_column} #{direction}"
21
- end
17
+ [sort_column, direction, nulls_last_sql].compact.join(" ")
22
18
  end
23
19
 
24
20
  def column
@@ -43,6 +39,19 @@ module AjaxDatatablesRails
43
39
  column.nulls_last? || AjaxDatatablesRails.config.nulls_last == true
44
40
  end
45
41
 
42
+ def nulls_last_sql
43
+ return unless sort_nulls_last?
44
+
45
+ case AjaxDatatablesRails.config.db_adapter
46
+ when :pg, :postgresql, :postgres, :oracle
47
+ "NULLS LAST"
48
+ when :mysql, :mysql2, :sqlite, :sqlite3
49
+ "IS NULL"
50
+ else
51
+ raise 'unsupported database adapter'
52
+ end
53
+ end
54
+
46
55
  end
47
56
  end
48
57
  end
@@ -12,7 +12,7 @@ module AjaxDatatablesRails
12
12
  records.where(build_conditions)
13
13
  end
14
14
 
15
- # rubocop:disable Style/EachWithObject
15
+ # rubocop:disable Style/EachWithObject, Style/SafeNavigation
16
16
  def sort_records(records)
17
17
  sort_by = datatable.orders.inject([]) do |queries, order|
18
18
  column = order.column
@@ -21,7 +21,7 @@ module AjaxDatatablesRails
21
21
  end
22
22
  records.order(Arel.sql(sort_by.join(', ')))
23
23
  end
24
- # rubocop:enable Style/EachWithObject
24
+ # rubocop:enable Style/EachWithObject, Style/SafeNavigation
25
25
 
26
26
  def paginate_records(records)
27
27
  records.offset(datatable.offset).limit(datatable.per_page)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AjaxDatatablesRails
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -54,7 +54,7 @@ describe AjaxDatatablesRails::Base do
54
54
 
55
55
  it 'should html escape data' do
56
56
  create(:user, first_name: 'Name "><img src=x onerror=alert("first_name")>', last_name: 'Name "><img src=x onerror=alert("last_name")>')
57
- data = datatable.send(:sanitize, datatable.data)
57
+ data = datatable.send(:sanitize_data, datatable.data)
58
58
  item = data.first
59
59
  expect(item[:first_name]).to eq 'Name &quot;&gt;&lt;img src=x onerror=alert(&quot;first_name&quot;)&gt;'
60
60
  expect(item[:last_name]).to eq 'Name &quot;&gt;&lt;img src=x onerror=alert(&quot;last_name&quot;)&gt;'
@@ -74,7 +74,7 @@ describe AjaxDatatablesRails::Base do
74
74
 
75
75
  it 'should html escape data' do
76
76
  create(:user, first_name: 'Name "><img src=x onerror=alert("first_name")>', last_name: 'Name "><img src=x onerror=alert("last_name")>')
77
- data = datatable.send(:sanitize, datatable.data)
77
+ data = datatable.send(:sanitize_data, datatable.data)
78
78
  item = data.first
79
79
  expect(item[2]).to eq 'Name &quot;&gt;&lt;img src=x onerror=alert(&quot;first_name&quot;)&gt;'
80
80
  expect(item[3]).to eq 'Name &quot;&gt;&lt;img src=x onerror=alert(&quot;last_name&quot;)&gt;'
@@ -222,6 +222,25 @@ describe AjaxDatatablesRails::Base do
222
222
  expect(datatable.datatable.send(:per_page)).to eq(20)
223
223
  end
224
224
  end
225
+
226
+ describe '#column_id' do
227
+ let(:datatable) { ComplexDatatable.new(sample_params) }
228
+
229
+ it 'should return column id from view_columns hash' do
230
+ expect(datatable.send(:column_id, :username)).to eq(0)
231
+ expect(datatable.send(:column_id, 'username')).to eq(0)
232
+ end
233
+ end
234
+
235
+ describe '#column_data' do
236
+ let(:datatable) { ComplexDatatable.new(sample_params) }
237
+ before { datatable.params[:columns]['0'][:search][:value] = 'doe' }
238
+
239
+ it 'should return column data from params' do
240
+ expect(datatable.send(:column_data, :username)).to eq('doe')
241
+ expect(datatable.send(:column_data, 'username')).to eq('doe')
242
+ end
243
+ end
225
244
  end
226
245
  end
227
246
  end
@@ -167,12 +167,12 @@ describe AjaxDatatablesRails::Datatable::Column do
167
167
  expect(column.send(:type_cast)).to eq('VARCHAR')
168
168
  end
169
169
 
170
- it 'returns VARCHAR if :db_adapter is :oracle' do
170
+ it 'returns VARCHAR2(4000) if :db_adapter is :oracle' do
171
171
  allow_any_instance_of(AjaxDatatablesRails::Configuration).to receive(:db_adapter) { :oracle }
172
172
  expect(column.send(:type_cast)).to eq('VARCHAR2(4000)')
173
173
  end
174
174
 
175
- it 'returns VARCHAR if :db_adapter is :oracleenhanced' do
175
+ it 'returns VARCHAR2(4000) if :db_adapter is :oracleenhanced' do
176
176
  allow_any_instance_of(AjaxDatatablesRails::Configuration).to receive(:db_adapter) { :oracleenhanced }
177
177
  expect(column.send(:type_cast)).to eq('VARCHAR2(4000)')
178
178
  end
@@ -196,5 +196,10 @@ describe AjaxDatatablesRails::Datatable::Column do
196
196
  allow_any_instance_of(AjaxDatatablesRails::Configuration).to receive(:db_adapter) { :sqlite3 }
197
197
  expect(column.send(:type_cast)).to eq('TEXT')
198
198
  end
199
+
200
+ it 'returns VARCHAR(4000) if :db_adapter is :sqlserver' do
201
+ allow_any_instance_of(AjaxDatatablesRails::Configuration).to receive(:db_adapter) { :sqlserver }
202
+ expect(column.send(:type_cast)).to eq('VARCHAR(4000)')
203
+ end
199
204
  end
200
205
  end
@@ -18,8 +18,10 @@ describe AjaxDatatablesRails::Datatable::SimpleOrder do
18
18
  after { AjaxDatatablesRails.config.nulls_last = false }
19
19
 
20
20
  it 'sql query' do
21
+ skip('unsupported database adapter') if ENV['DB_ADAPTER'] == 'oracle_enhanced'
22
+
21
23
  expect(simple_order.query('email')).to eq(
22
- 'CASE WHEN email IS NULL THEN 1 ELSE 0 END, email DESC'
24
+ "email DESC #{nulls_last_sql}"
23
25
  )
24
26
  end
25
27
  end
@@ -28,12 +30,29 @@ describe AjaxDatatablesRails::Datatable::SimpleOrder do
28
30
  let(:sorted_datatable) { DatatableOrderNullsLast.new(sample_params).datatable }
29
31
  let(:nulls_last_order) { AjaxDatatablesRails::Datatable::SimpleOrder.new(sorted_datatable, options) }
30
32
 
31
- it 'sql query' do
32
- expect(nulls_last_order.query('email')).to eq(
33
- 'CASE WHEN email IS NULL THEN 1 ELSE 0 END, email DESC'
34
- )
33
+ context 'with postgres database adapter' do
34
+ before { AjaxDatatablesRails.config.db_adapter = :pg }
35
+
36
+ it 'sql query' do
37
+ expect(nulls_last_order.query('email')).to eq('email DESC NULLS LAST')
38
+ end
39
+ end
40
+
41
+ context 'with sqlite database adapter' do
42
+ before { AjaxDatatablesRails.config.db_adapter = :sqlite }
43
+
44
+ it 'sql query' do
45
+ expect(nulls_last_order.query('email')).to eq('email DESC IS NULL')
46
+ end
47
+ end
48
+
49
+ context 'with mysql database adapter' do
50
+ before { AjaxDatatablesRails.config.db_adapter = :mysql }
51
+
52
+ it 'sql query' do
53
+ expect(nulls_last_order.query('email')).to eq('email DESC IS NULL')
54
+ end
35
55
  end
36
56
  end
37
57
  end
38
-
39
58
  end
@@ -126,7 +126,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
126
126
  expect(result).to be_a(Arel::Nodes::And)
127
127
  end
128
128
 
129
- if AjaxDatatablesRails.config.db_adapter == :postgresql
129
+ if ENV['DB_ADAPTER'] == 'postgresql'
130
130
  context 'when db_adapter is postgresql' do
131
131
  it 'can call #to_sql on returned object' do
132
132
  result = datatable.build_conditions_for_selected_columns
@@ -138,7 +138,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
138
138
  end
139
139
  end
140
140
 
141
- if AjaxDatatablesRails.config.db_adapter.in? %i[oracle oracleenhanced]
141
+ if ENV['DB_ADAPTER'] == 'oracle_enhanced'
142
142
  context 'when db_adapter is oracle' do
143
143
  it 'can call #to_sql on returned object' do
144
144
  result = datatable.build_conditions_for_selected_columns
@@ -150,7 +150,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
150
150
  end
151
151
  end
152
152
 
153
- if AjaxDatatablesRails.config.db_adapter.in? %i[mysql2 sqlite3]
153
+ if ENV['DB_ADAPTER'] == 'mysql2'
154
154
  context 'when db_adapter is mysql2' do
155
155
  it 'can call #to_sql on returned object' do
156
156
  result = datatable.build_conditions_for_selected_columns
@@ -288,7 +288,7 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
288
288
  create(:user, last_name: 'MARY')
289
289
  end
290
290
 
291
- if AjaxDatatablesRails.config.db_adapter == :oracleenhanced
291
+ if ENV['DB_ADAPTER'] == 'oracle_enhanced'
292
292
  context 'when db_adapter is oracleenhanced' do
293
293
  it 'should filter records matching' do
294
294
  datatable.params[:columns]['3'][:search][:value] = 'RY'
@@ -339,6 +339,40 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
339
339
  end
340
340
  end
341
341
 
342
+ describe 'it can filter records with condition :string_in' do
343
+ let(:datatable) { DatatableCondStringIn.new(sample_params) }
344
+
345
+ before(:each) do
346
+ create(:user, email: 'john@foo.com')
347
+ create(:user, email: 'mary@bar.com')
348
+ create(:user, email: 'henry@baz.com')
349
+ end
350
+
351
+ it 'should filter records matching' do
352
+ datatable.params[:columns]['1'][:search][:value] = 'john@foo.com'
353
+ expect(datatable.data.size).to eq 1
354
+ item = datatable.data.first
355
+ expect(item[:email]).to eq 'john@foo.com'
356
+ end
357
+
358
+ it 'should filter records matching with multiple' do
359
+ datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry@baz.com'
360
+ expect(datatable.data.size).to eq 2
361
+ items = datatable.data.sort_by { |h| h[:email] }
362
+ item_first = items.first
363
+ item_last = items.last
364
+ expect(item_first[:email]).to eq 'henry@baz.com'
365
+ expect(item_last[:email]).to eq 'john@foo.com'
366
+ end
367
+
368
+ it 'should filter records matching with multiple contains not found' do
369
+ datatable.params[:columns]['1'][:search][:value] = 'john@foo.com|henry_not@baz.com'
370
+ expect(datatable.data.size).to eq 1
371
+ item = datatable.data.first
372
+ expect(item[:email]).to eq 'john@foo.com'
373
+ end
374
+ end
375
+
342
376
  describe 'it can filter records with condition :null_value' do
343
377
  let(:datatable) { DatatableCondNullValue.new(sample_params) }
344
378
 
@@ -16,8 +16,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
16
16
  end
17
17
 
18
18
  it 'paginates records properly' do
19
- if AjaxDatatablesRails.config.db_adapter.in? %i[oracle oracleenhanced]
20
- if Rails.version.in? %w[4.0.13 4.1.16 4.2.10]
19
+ if ENV['DB_ADAPTER'] == 'oracle_enhanced'
20
+ if Rails.version.in? %w[4.2.11]
21
21
  expect(datatable.paginate_records(records).to_sql).to include(
22
22
  'rownum <= 10'
23
23
  )
@@ -34,8 +34,8 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
34
34
 
35
35
  datatable.params[:start] = '26'
36
36
  datatable.params[:length] = '25'
37
- if AjaxDatatablesRails.config.db_adapter.in? %i[oracle oracleenhanced]
38
- if Rails.version.in? %w[4.0.13 4.1.16 4.2.10]
37
+ if ENV['DB_ADAPTER'] == 'oracle_enhanced'
38
+ if Rails.version.in? %w[4.2.11]
39
39
  expect(datatable.paginate_records(records).to_sql).to include(
40
40
  'rownum <= 51'
41
41
  )
@@ -49,26 +49,28 @@ describe AjaxDatatablesRails::ORM::ActiveRecord do
49
49
  after { AjaxDatatablesRails.config.nulls_last = false }
50
50
 
51
51
  it 'can handle multiple sorting columns' do
52
+ skip('unsupported database adapter') if ENV['DB_ADAPTER'] == 'oracle_enhanced'
53
+
52
54
  # set to order by Users username in ascending order, and
53
55
  # by Users email in descending order
54
56
  datatable.params[:order]['0'] = { column: '0', dir: 'asc' }
55
57
  datatable.params[:order]['1'] = { column: '1', dir: 'desc' }
56
58
  expect(datatable.sort_records(records).to_sql).to include(
57
- 'ORDER BY CASE WHEN users.username IS NULL THEN 1 ELSE 0 END, users.username ASC, ' +
58
- 'CASE WHEN users.email IS NULL THEN 1 ELSE 0 END, users.email DESC'
59
+ "ORDER BY users.username ASC #{nulls_last_sql}, users.email DESC #{nulls_last_sql}"
59
60
  )
60
61
  end
61
62
  end
62
63
 
63
64
  describe '#sort_records with nulls last using column config' do
64
65
  it 'can handle multiple sorting columns' do
66
+ skip('unsupported database adapter') if ENV['DB_ADAPTER'] == 'oracle_enhanced'
67
+
65
68
  # set to order by Users username in ascending order, and
66
69
  # by Users email in descending order
67
70
  nulls_last_datatable.params[:order]['0'] = { column: '0', dir: 'asc' }
68
71
  nulls_last_datatable.params[:order]['1'] = { column: '1', dir: 'desc' }
69
72
  expect(nulls_last_datatable.sort_records(records).to_sql).to include(
70
- 'ORDER BY users.username ASC, ' +
71
- 'CASE WHEN users.email IS NULL THEN 1 ELSE 0 END, users.email DESC'
73
+ "ORDER BY users.username ASC, users.email DESC #{nulls_last_sql}"
72
74
  )
73
75
  end
74
76
  end
@@ -4,9 +4,15 @@ 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
- ~/.travis/oracle/download.sh
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
+ else
10
+ ~/.travis/oracle/download.sh
11
+ fi
12
+
8
13
  ~/.travis/oracle/install.sh
9
14
 
15
+ # in dev env: sqlplus system/password@localhost/XE
10
16
  "$ORACLE_HOME/bin/sqlplus" -L -S / AS SYSDBA <<SQL
11
17
  ALTER USER $USER IDENTIFIED BY $USER;
12
18
  SQL
@@ -22,6 +22,12 @@ class DatatableCondStringEq < ComplexDatatable
22
22
  end
23
23
  end
24
24
 
25
+ class DatatableCondStringIn < ComplexDatatable
26
+ def view_columns
27
+ super.deep_merge(email: { cond: :string_in, formatter: -> (o) { o.split("|") } })
28
+ end
29
+ end
30
+
25
31
  class DatatableCondNullValue < ComplexDatatable
26
32
  def view_columns
27
33
  super.deep_merge(email: { cond: :null_value })
@@ -97,3 +97,14 @@ class ComplexDatatableArray < ComplexDatatable
97
97
  end
98
98
  end
99
99
  end
100
+
101
+ def nulls_last_sql
102
+ case AjaxDatatablesRails.config.db_adapter
103
+ when :pg, :postgresql, :postgres, :oracle
104
+ "NULLS LAST"
105
+ when :mysql, :mysql2, :sqlite, :sqlite3
106
+ "IS NULL"
107
+ else
108
+ raise 'unsupported database adapter'
109
+ end
110
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ajax-datatables-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Quenneville
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-08-25 00:00:00.000000000 Z
12
+ date: 2019-12-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -26,21 +26,7 @@ dependencies:
26
26
  - !ruby/object:Gem::Version
27
27
  version: '4.2'
28
28
  - !ruby/object:Gem::Dependency
29
- name: rails
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '4.2'
35
- type: :development
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '4.2'
42
- - !ruby/object:Gem::Dependency
43
- name: rake
29
+ name: activerecord-oracle_enhanced-adapter
44
30
  requirement: !ruby/object:Gem::Requirement
45
31
  requirements:
46
32
  - - ">="
@@ -54,21 +40,7 @@ dependencies:
54
40
  - !ruby/object:Gem::Version
55
41
  version: '0'
56
42
  - !ruby/object:Gem::Dependency
57
- name: pg
58
- requirement: !ruby/object:Gem::Requirement
59
- requirements:
60
- - - "<"
61
- - !ruby/object:Gem::Version
62
- version: '1.0'
63
- type: :development
64
- prerelease: false
65
- version_requirements: !ruby/object:Gem::Requirement
66
- requirements:
67
- - - "<"
68
- - !ruby/object:Gem::Version
69
- version: '1.0'
70
- - !ruby/object:Gem::Dependency
71
- name: mysql2
43
+ name: appraisal
72
44
  requirement: !ruby/object:Gem::Requirement
73
45
  requirements:
74
46
  - - ">="
@@ -82,7 +54,7 @@ dependencies:
82
54
  - !ruby/object:Gem::Version
83
55
  version: '0'
84
56
  - !ruby/object:Gem::Dependency
85
- name: sqlite3
57
+ name: database_cleaner
86
58
  requirement: !ruby/object:Gem::Requirement
87
59
  requirements:
88
60
  - - ">="
@@ -96,7 +68,7 @@ dependencies:
96
68
  - !ruby/object:Gem::Version
97
69
  version: '0'
98
70
  - !ruby/object:Gem::Dependency
99
- name: activerecord-oracle_enhanced-adapter
71
+ name: factory_bot
100
72
  requirement: !ruby/object:Gem::Requirement
101
73
  requirements:
102
74
  - - ">="
@@ -110,7 +82,7 @@ dependencies:
110
82
  - !ruby/object:Gem::Version
111
83
  version: '0'
112
84
  - !ruby/object:Gem::Dependency
113
- name: rspec
85
+ name: faker
114
86
  requirement: !ruby/object:Gem::Requirement
115
87
  requirements:
116
88
  - - ">="
@@ -138,21 +110,21 @@ dependencies:
138
110
  - !ruby/object:Gem::Version
139
111
  version: '0'
140
112
  - !ruby/object:Gem::Dependency
141
- name: pry
113
+ name: pg
142
114
  requirement: !ruby/object:Gem::Requirement
143
115
  requirements:
144
- - - ">="
116
+ - - "<"
145
117
  - !ruby/object:Gem::Version
146
- version: '0'
118
+ version: '1.0'
147
119
  type: :development
148
120
  prerelease: false
149
121
  version_requirements: !ruby/object:Gem::Requirement
150
122
  requirements:
151
- - - ">="
123
+ - - "<"
152
124
  - !ruby/object:Gem::Version
153
- version: '0'
125
+ version: '1.0'
154
126
  - !ruby/object:Gem::Dependency
155
- name: simplecov
127
+ name: pry
156
128
  requirement: !ruby/object:Gem::Requirement
157
129
  requirements:
158
130
  - - ">="
@@ -166,21 +138,21 @@ dependencies:
166
138
  - !ruby/object:Gem::Version
167
139
  version: '0'
168
140
  - !ruby/object:Gem::Dependency
169
- name: database_cleaner
141
+ name: rails
170
142
  requirement: !ruby/object:Gem::Requirement
171
143
  requirements:
172
144
  - - ">="
173
145
  - !ruby/object:Gem::Version
174
- version: '0'
146
+ version: '4.2'
175
147
  type: :development
176
148
  prerelease: false
177
149
  version_requirements: !ruby/object:Gem::Requirement
178
150
  requirements:
179
151
  - - ">="
180
152
  - !ruby/object:Gem::Version
181
- version: '0'
153
+ version: '4.2'
182
154
  - !ruby/object:Gem::Dependency
183
- name: factory_bot
155
+ name: rake
184
156
  requirement: !ruby/object:Gem::Requirement
185
157
  requirements:
186
158
  - - ">="
@@ -194,7 +166,7 @@ dependencies:
194
166
  - !ruby/object:Gem::Version
195
167
  version: '0'
196
168
  - !ruby/object:Gem::Dependency
197
- name: faker
169
+ name: rspec
198
170
  requirement: !ruby/object:Gem::Requirement
199
171
  requirements:
200
172
  - - ">="
@@ -208,7 +180,7 @@ dependencies:
208
180
  - !ruby/object:Gem::Version
209
181
  version: '0'
210
182
  - !ruby/object:Gem::Dependency
211
- name: appraisal
183
+ name: simplecov
212
184
  requirement: !ruby/object:Gem::Requirement
213
185
  requirements:
214
186
  - - ">="
@@ -244,10 +216,11 @@ files:
244
216
  - ajax-datatables-rails.gemspec
245
217
  - doc/migrate.md
246
218
  - doc/webpack.md
247
- - gemfiles/rails_4.2.10.gemfile
219
+ - gemfiles/rails_4.2.11.gemfile
248
220
  - gemfiles/rails_5.0.7.gemfile
249
- - gemfiles/rails_5.1.6.gemfile
250
- - gemfiles/rails_5.2.0.gemfile
221
+ - gemfiles/rails_5.1.7.gemfile
222
+ - gemfiles/rails_5.2.3.gemfile
223
+ - gemfiles/rails_6.0.1.gemfile
251
224
  - lib/ajax-datatables-rails.rb
252
225
  - lib/ajax-datatables-rails/active_record.rb
253
226
  - lib/ajax-datatables-rails/base.rb
@@ -307,31 +280,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
307
280
  - !ruby/object:Gem::Version
308
281
  version: '0'
309
282
  requirements: []
310
- rubyforge_project:
311
- rubygems_version: 2.7.7
283
+ rubygems_version: 3.0.3
312
284
  signing_key:
313
285
  specification_version: 4
314
286
  summary: A gem that simplifies using datatables and hundreds of records via ajax
315
- test_files:
316
- - spec/ajax-datatables-rails/base_spec.rb
317
- - spec/ajax-datatables-rails/configuration_spec.rb
318
- - spec/ajax-datatables-rails/datatable/column_spec.rb
319
- - spec/ajax-datatables-rails/datatable/datatable_spec.rb
320
- - spec/ajax-datatables-rails/datatable/simple_order_spec.rb
321
- - spec/ajax-datatables-rails/datatable/simple_search_spec.rb
322
- - spec/ajax-datatables-rails/extended_spec.rb
323
- - spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb
324
- - spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb
325
- - spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb
326
- - spec/ajax-datatables-rails/orm/active_record_spec.rb
327
- - spec/factories/user.rb
328
- - spec/install_oracle.sh
329
- - spec/spec_helper.rb
330
- - spec/support/datatable_cond_date.rb
331
- - spec/support/datatable_cond_numeric.rb
332
- - spec/support/datatable_cond_proc.rb
333
- - spec/support/datatable_cond_string.rb
334
- - spec/support/datatable_order_nulls_last.rb
335
- - spec/support/schema.rb
336
- - spec/support/test_helpers.rb
337
- - spec/support/test_models.rb
287
+ test_files: []