ajax-datatables-rails 1.4.0 → 1.5.0

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: a8603311c92aa4db99c7b94103de8ed606a61ffafaf630724517d479cd478331
4
- data.tar.gz: 2baccc608a73493ecb7c28570075a9dda5919c91010db322e98a9c8d7032b4be
3
+ metadata.gz: df0c98573d156527bb34590ddac2fb860c53c578b3be69306d71db1123c0c1df
4
+ data.tar.gz: bef2b0041b0755590c3d98607f9234514e289ce654cb4b34399b0f50211c8500
5
5
  SHA512:
6
- metadata.gz: e2097c47d5af467755b87bd09abe9551b1eeb6334476358508bc4615657b66c0ae2b38b7a4416475e3783f3e88f99d35be984c6c9a9e55e6ded40ee382f2ffbe
7
- data.tar.gz: 4fbbaf7373f5acb5548ff354e5d191e195598302756e6051bd37a2876fee4e4f8450d3b535c7e98fd5654923740286d6c67b29d4570868d816200e7568cf2ecc
6
+ metadata.gz: dcb780dd2416b592daadce7774a2002e37e81535399638012a7ae958c5385a31b79a544a72c80b914f0f2d3ab42dc9b483ac5c2953de7e82270971b3982f245e
7
+ data.tar.gz: c52b3cdb779556d89251b4434419aa269966d80e56c97479a87986c96d7889005d9222a4b6bbdf604ca120a320c2ce26efefcfdb58f1ffac099bc8f06cc17719
@@ -13,7 +13,7 @@ on:
13
13
 
14
14
  jobs:
15
15
  rspec:
16
- runs-on: ubuntu-20.04
16
+ runs-on: ubuntu-latest
17
17
 
18
18
  env:
19
19
  ORACLE_COOKIE: sqldev
@@ -23,7 +23,7 @@ jobs:
23
23
 
24
24
  services:
25
25
  postgres:
26
- image: 'postgres:13'
26
+ image: 'postgres:16'
27
27
  ports: ['5432:5432']
28
28
  env:
29
29
  POSTGRES_PASSWORD: postgres
@@ -52,28 +52,35 @@ jobs:
52
52
  fail-fast: false
53
53
  matrix:
54
54
  ruby:
55
+ - '3.3'
56
+ - '3.2'
55
57
  - '3.1'
56
58
  - '3.0'
57
59
  - '2.7'
60
+ - 'head'
58
61
  rails:
59
- - rails_5.2.8
60
- - rails_6.0.6
62
+ - rails_7.1.0
63
+ - rails_7.0.8
61
64
  - rails_6.1.7
62
- - rails_7.0.4
65
+ - rails_6.0.6
63
66
  adapter:
64
67
  - sqlite3
65
68
  - postgresql
66
69
  - mysql2
67
70
  - oracle_enhanced
71
+ - postgis
72
+ # - trilogy
68
73
  exclude:
69
- - ruby: '3.0'
70
- rails: rails_5.2.8
71
- - ruby: '3.1'
72
- rails: rails_5.2.8
74
+ - rails: rails_7.1.0
75
+ adapter: oracle_enhanced
76
+
77
+ - rails: rails_7.1.0
78
+ adapter: postgis
79
+ ruby: 2.7'
73
80
 
74
81
  steps:
75
82
  - name: Checkout
76
- uses: actions/checkout@v2
83
+ uses: actions/checkout@v4
77
84
 
78
85
  - name: Setup Ruby
79
86
  uses: ruby/setup-ruby@v1
@@ -88,19 +95,19 @@ jobs:
88
95
 
89
96
  # See: https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md#mysql
90
97
  run: |
91
- if [ "${DB_ADAPTER}" = "mysql2" ]; then
98
+ if [[ "${DB_ADAPTER}" == "mysql2" ]] || [[ "${DB_ADAPTER}" == "trilogy" ]]; then
92
99
  sudo systemctl start mysql.service
93
100
  mysql -u root -proot -e 'create database ajax_datatables_rails;'
94
101
  fi
95
102
 
96
- if [ "${DB_ADAPTER}" = "oracle_enhanced" ]; then
103
+ if [[ "${DB_ADAPTER}" == "oracle_enhanced" ]]; then
97
104
  ./spec/install_oracle.sh
98
105
  # Fix error : libnnz11.so: cannot open shared object file: No such file or directory
99
106
  sudo ln -s ${ORACLE_HOME}/lib/libnnz11.so /usr/lib/libnnz11.so
100
107
  fi
101
108
 
102
109
  - name: Setup Ruby cache
103
- uses: actions/cache@v2
110
+ uses: actions/cache@v4
104
111
  with:
105
112
  path: vendor/bundle
106
113
  key: ${{ runner.os }}-gems-${{ matrix.ruby }}-${{ matrix.rails }}-${{ matrix.adapter }}-${{ hashFiles('**/Gemfile.lock') }}
@@ -109,16 +116,19 @@ jobs:
109
116
 
110
117
  - name: Bundle
111
118
  env:
119
+ RUBY_VERSION: ${{ matrix.ruby }}
112
120
  RAILS_VERSION: ${{ matrix.rails }}
113
121
  DB_ADAPTER: ${{ matrix.adapter }}
114
122
  BUNDLE_GEMFILE: gemfiles/${{ matrix.rails }}.gemfile
115
123
  run: |
116
- gem install bundler
124
+ if [[ "${RUBY_VERSION}" != "2.7" ]]; then
125
+ gem install bundler
126
+ fi
117
127
  bundle config path vendor/bundle
118
128
  bundle install --jobs 4 --retry 3
119
129
 
120
130
  - name: RSpec & publish code coverage
121
- uses: paambaati/codeclimate-action@v2.7.5
131
+ uses: paambaati/codeclimate-action@v5.0.0
122
132
  env:
123
133
  RAILS_VERSION: ${{ matrix.rails }}
124
134
  DB_ADAPTER: ${{ matrix.adapter }}
data/Appraisals CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'yaml'
4
4
 
5
- rails_versions = YAML.load(File.read('appraisal.yml'))
5
+ rails_versions = YAML.safe_load(File.read('appraisal.yml'))
6
6
 
7
7
  rails_versions.each do |version, gems|
8
8
  appraise "rails_#{version}" do
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.5.0 (2024-04-08)
4
+
5
+ * Drop support of Rails 5.2
6
+ * Add support for grouped results (merge: [#419](https://github.com/jbox-web/ajax-datatables-rails/pull/419))
7
+ * Fix server-side out of order ajax responses (merge: [#418](https://github.com/jbox-web/ajax-datatables-rails/pull/418))
8
+ * Add support for postgis adapter (merge: [#417](https://github.com/jbox-web/ajax-datatables-rails/pull/417))
9
+ * Add support for trilogy adapter (merge: [#423](https://github.com/jbox-web/ajax-datatables-rails/pull/423))
10
+ * Add support for Rails 7.1
11
+ * Add support for Ruby 3.3
12
+
13
+ This is the last version to support Rails 6.0.x and Ruby 2.7.x.
14
+
3
15
  ## 1.4.0 (2022-12-18)
4
16
 
5
17
  * Improve tests
data/Gemfile CHANGED
@@ -5,3 +5,4 @@ source 'https://rubygems.org'
5
5
  gemspec
6
6
 
7
7
  gem 'appraisal', git: 'https://github.com/n-rodriguez/appraisal.git', branch: 'wip/combustion'
8
+ gem 'combustion', git: 'https://github.com/pat/combustion.git'
data/README.md CHANGED
@@ -11,8 +11,8 @@
11
11
 
12
12
  It's tested against :
13
13
 
14
- * Rails 5.2.4 / 6.0.3 / 6.1.0
15
- * Ruby 2.5.x / 2.6.x / 2.7.x
14
+ * Rails 6.0.6 / 6.1.7 / 7.0.4
15
+ * Ruby 2.7 / 3.0 / 3.1
16
16
  * SQLite3
17
17
  * Postgresql 13
18
18
  * MySQL 8
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.files = `git ls-files`.split("\n")
25
25
 
26
- s.add_runtime_dependency 'rails', '>= 5.2'
26
+ s.add_runtime_dependency 'rails', '>= 6.0'
27
27
  s.add_runtime_dependency 'zeitwerk'
28
28
 
29
29
  s.add_development_dependency 'activerecord-oracle_enhanced-adapter'
data/appraisal.yml CHANGED
@@ -1,56 +1,131 @@
1
1
  ---
2
- 5.2.8:
2
+ 6.0.6:
3
3
  sqlite3:
4
- version: ~> 1.3.0
4
+ version: ~> 1.4.0
5
5
  install_if: '-> { ENV["DB_ADAPTER"] == "sqlite3" }'
6
6
  mysql2:
7
7
  version: ''
8
8
  install_if: '-> { ENV["DB_ADAPTER"] == "mysql2" }'
9
+ activerecord-trilogy-adapter:
10
+ version: ''
11
+ install_if: '-> { ENV["DB_ADAPTER"] == "trilogy" }'
9
12
  activerecord-oracle_enhanced-adapter:
10
- version: ~> 5.2.0
13
+ version: ~> 6.0.0
11
14
  install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
12
15
  ruby-oci8:
13
16
  version: ''
14
17
  install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
18
+ activerecord-postgis-adapter:
19
+ version: ''
20
+ install_if: '-> { ENV["DB_ADAPTER"] == "postgis" }'
21
+ base64:
22
+ version: ''
23
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
24
+ bigdecimal:
25
+ version: ''
26
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
27
+ mutex_m:
28
+ version: ''
29
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
30
+ drb:
31
+ version: ''
32
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
15
33
 
16
- 6.0.6:
34
+
35
+ 6.1.7:
17
36
  sqlite3:
18
37
  version: ~> 1.4.0
19
38
  install_if: '-> { ENV["DB_ADAPTER"] == "sqlite3" }'
20
39
  mysql2:
21
40
  version: ''
22
41
  install_if: '-> { ENV["DB_ADAPTER"] == "mysql2" }'
42
+ activerecord-trilogy-adapter:
43
+ version: ''
44
+ install_if: '-> { ENV["DB_ADAPTER"] == "trilogy" }'
23
45
  activerecord-oracle_enhanced-adapter:
24
- version: ~> 6.0.0
46
+ version: ~> 6.1.0
25
47
  install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
26
48
  ruby-oci8:
27
49
  version: ''
28
50
  install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
51
+ activerecord-postgis-adapter:
52
+ version: ''
53
+ install_if: '-> { ENV["DB_ADAPTER"] == "postgis" }'
54
+ base64:
55
+ version: ''
56
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
57
+ bigdecimal:
58
+ version: ''
59
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
60
+ mutex_m:
61
+ version: ''
62
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
63
+ drb:
64
+ version: ''
65
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
29
66
 
30
- 6.1.7:
67
+
68
+ 7.0.8:
31
69
  sqlite3:
32
70
  version: ~> 1.4.0
33
71
  install_if: '-> { ENV["DB_ADAPTER"] == "sqlite3" }'
34
72
  mysql2:
35
73
  version: ''
36
74
  install_if: '-> { ENV["DB_ADAPTER"] == "mysql2" }'
75
+ activerecord-trilogy-adapter:
76
+ version: ''
77
+ install_if: '-> { ENV["DB_ADAPTER"] == "trilogy" }'
37
78
  activerecord-oracle_enhanced-adapter:
38
- version: ~> 6.1.0
79
+ version: ~> 7.0.0
39
80
  install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
40
81
  ruby-oci8:
41
82
  version: ''
42
83
  install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
84
+ activerecord-postgis-adapter:
85
+ version: ''
86
+ install_if: '-> { ENV["DB_ADAPTER"] == "postgis" }'
87
+ base64:
88
+ version: ''
89
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
90
+ bigdecimal:
91
+ version: ''
92
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
93
+ mutex_m:
94
+ version: ''
95
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
96
+ drb:
97
+ version: ''
98
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
99
+
43
100
 
44
- 7.0.4:
101
+ 7.1.0:
45
102
  sqlite3:
46
103
  version: ~> 1.4.0
47
104
  install_if: '-> { ENV["DB_ADAPTER"] == "sqlite3" }'
48
105
  mysql2:
49
106
  version: ''
50
107
  install_if: '-> { ENV["DB_ADAPTER"] == "mysql2" }'
51
- activerecord-oracle_enhanced-adapter:
52
- version: ~> 7.0.0
53
- install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
54
- ruby-oci8:
108
+ activerecord-trilogy-adapter:
55
109
  version: ''
56
- install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
110
+ install_if: '-> { ENV["DB_ADAPTER"] == "trilogy" }'
111
+ # activerecord-oracle_enhanced-adapter:
112
+ # version: ~> 7.0.0
113
+ # install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
114
+ # ruby-oci8:
115
+ # version: ''
116
+ # install_if: '-> { ENV["DB_ADAPTER"] == "oracle_enhanced" }'
117
+ activerecord-postgis-adapter:
118
+ version: ''
119
+ install_if: '-> { ENV["DB_ADAPTER"] == "postgis" }'
120
+ base64:
121
+ version: ''
122
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
123
+ bigdecimal:
124
+ version: ''
125
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
126
+ mutex_m:
127
+ version: ''
128
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
129
+ drb:
130
+ version: ''
131
+ install_if: '-> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") }'
@@ -3,6 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "appraisal", git: "https://github.com/n-rodriguez/appraisal.git", branch: "wip/combustion"
6
+ gem "combustion", git: "https://github.com/pat/combustion.git"
6
7
  gem "rails", "6.0.6"
7
8
 
8
9
  install_if -> { ENV["DB_ADAPTER"] == "sqlite3" } do
@@ -13,9 +14,24 @@ install_if -> { ENV["DB_ADAPTER"] == "mysql2" } do
13
14
  gem "mysql2"
14
15
  end
15
16
 
17
+ install_if -> { ENV["DB_ADAPTER"] == "trilogy" } do
18
+ gem "activerecord-trilogy-adapter"
19
+ end
20
+
16
21
  install_if -> { ENV["DB_ADAPTER"] == "oracle_enhanced" } do
17
22
  gem "activerecord-oracle_enhanced-adapter", "~> 6.0.0"
18
23
  gem "ruby-oci8"
19
24
  end
20
25
 
26
+ install_if -> { ENV["DB_ADAPTER"] == "postgis" } do
27
+ gem "activerecord-postgis-adapter"
28
+ end
29
+
30
+ install_if -> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") } do
31
+ gem "base64"
32
+ gem "bigdecimal"
33
+ gem "mutex_m"
34
+ gem "drb"
35
+ end
36
+
21
37
  gemspec path: "../"
@@ -3,6 +3,7 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "appraisal", git: "https://github.com/n-rodriguez/appraisal.git", branch: "wip/combustion"
6
+ gem "combustion", git: "https://github.com/pat/combustion.git"
6
7
  gem "rails", "6.1.7"
7
8
 
8
9
  install_if -> { ENV["DB_ADAPTER"] == "sqlite3" } do
@@ -13,9 +14,24 @@ install_if -> { ENV["DB_ADAPTER"] == "mysql2" } do
13
14
  gem "mysql2"
14
15
  end
15
16
 
17
+ install_if -> { ENV["DB_ADAPTER"] == "trilogy" } do
18
+ gem "activerecord-trilogy-adapter"
19
+ end
20
+
16
21
  install_if -> { ENV["DB_ADAPTER"] == "oracle_enhanced" } do
17
22
  gem "activerecord-oracle_enhanced-adapter", "~> 6.1.0"
18
23
  gem "ruby-oci8"
19
24
  end
20
25
 
26
+ install_if -> { ENV["DB_ADAPTER"] == "postgis" } do
27
+ gem "activerecord-postgis-adapter"
28
+ end
29
+
30
+ install_if -> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") } do
31
+ gem "base64"
32
+ gem "bigdecimal"
33
+ gem "mutex_m"
34
+ gem "drb"
35
+ end
36
+
21
37
  gemspec path: "../"
@@ -3,7 +3,8 @@
3
3
  source "https://rubygems.org"
4
4
 
5
5
  gem "appraisal", git: "https://github.com/n-rodriguez/appraisal.git", branch: "wip/combustion"
6
- gem "rails", "7.0.4"
6
+ gem "combustion", git: "https://github.com/pat/combustion.git"
7
+ gem "rails", "7.0.8"
7
8
 
8
9
  install_if -> { ENV["DB_ADAPTER"] == "sqlite3" } do
9
10
  gem "sqlite3", "~> 1.4.0"
@@ -13,9 +14,24 @@ install_if -> { ENV["DB_ADAPTER"] == "mysql2" } do
13
14
  gem "mysql2"
14
15
  end
15
16
 
17
+ install_if -> { ENV["DB_ADAPTER"] == "trilogy" } do
18
+ gem "activerecord-trilogy-adapter"
19
+ end
20
+
16
21
  install_if -> { ENV["DB_ADAPTER"] == "oracle_enhanced" } do
17
22
  gem "activerecord-oracle_enhanced-adapter", "~> 7.0.0"
18
23
  gem "ruby-oci8"
19
24
  end
20
25
 
26
+ install_if -> { ENV["DB_ADAPTER"] == "postgis" } do
27
+ gem "activerecord-postgis-adapter"
28
+ end
29
+
30
+ install_if -> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") } do
31
+ gem "base64"
32
+ gem "bigdecimal"
33
+ gem "mutex_m"
34
+ gem "drb"
35
+ end
36
+
21
37
  gemspec path: "../"
@@ -0,0 +1,32 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal", git: "https://github.com/n-rodriguez/appraisal.git", branch: "wip/combustion"
6
+ gem "combustion", git: "https://github.com/pat/combustion.git"
7
+ gem "rails", "7.1.0"
8
+
9
+ install_if -> { ENV["DB_ADAPTER"] == "sqlite3" } do
10
+ gem "sqlite3", "~> 1.4.0"
11
+ end
12
+
13
+ install_if -> { ENV["DB_ADAPTER"] == "mysql2" } do
14
+ gem "mysql2"
15
+ end
16
+
17
+ install_if -> { ENV["DB_ADAPTER"] == "trilogy" } do
18
+ gem "activerecord-trilogy-adapter"
19
+ end
20
+
21
+ install_if -> { ENV["DB_ADAPTER"] == "postgis" } do
22
+ gem "activerecord-postgis-adapter"
23
+ end
24
+
25
+ install_if -> { Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0") } do
26
+ gem "base64"
27
+ gem "bigdecimal"
28
+ gem "mutex_m"
29
+ gem "drb"
30
+ end
31
+
32
+ gemspec path: "../"
@@ -77,7 +77,7 @@ module AjaxDatatablesRails
77
77
  recordsTotal: records_total_count,
78
78
  recordsFiltered: records_filtered_count,
79
79
  data: sanitize_data(data),
80
- }.merge(additional_data)
80
+ }.merge(draw_id).merge(additional_data)
81
81
  end
82
82
 
83
83
  # User helper methods
@@ -137,17 +137,26 @@ module AjaxDatatablesRails
137
137
  end
138
138
 
139
139
  def records_total_count
140
- fetch_records.count(:all)
140
+ numeric_count fetch_records.count(:all)
141
141
  end
142
142
 
143
143
  def records_filtered_count
144
- filter_records(fetch_records).count(:all)
144
+ numeric_count filter_records(fetch_records).count(:all)
145
+ end
146
+
147
+ def numeric_count(count)
148
+ count.is_a?(Hash) ? count.values.size : count
145
149
  end
146
150
 
147
151
  def global_search_delimiter
148
152
  GLOBAL_SEARCH_DELIMITER
149
153
  end
150
154
 
155
+ # See: https://datatables.net/manual/server-side#Returned-data
156
+ def draw_id
157
+ params[:draw].present? ? { draw: params[:draw].to_i } : {}
158
+ end
159
+
151
160
  def raw_records_error_text
152
161
  <<-ERROR
153
162
 
@@ -68,6 +68,7 @@ module AjaxDatatablesRails
68
68
  DB_ADAPTER_TYPE_CAST = {
69
69
  mysql: TYPE_CAST_MYSQL,
70
70
  mysql2: TYPE_CAST_MYSQL,
71
+ trilogy: TYPE_CAST_MYSQL,
71
72
  sqlite: TYPE_CAST_SQLITE,
72
73
  sqlite3: TYPE_CAST_SQLITE,
73
74
  oracle: TYPE_CAST_ORACLE,
@@ -45,9 +45,9 @@ module AjaxDatatablesRails
45
45
  return unless sort_nulls_last?
46
46
 
47
47
  case @adapter
48
- when :pg, :postgresql, :postgres, :oracle
48
+ when :pg, :postgresql, :postgres, :oracle, :postgis
49
49
  'NULLS LAST'
50
- when :mysql, :mysql2, :sqlite, :sqlite3
50
+ when :mysql, :mysql2, :trilogy, :sqlite, :sqlite3
51
51
  'IS NULL'
52
52
  else
53
53
  raise "unsupported database adapter: #{@adapter}"
@@ -8,7 +8,7 @@ module AjaxDatatablesRails
8
8
 
9
9
  module VERSION
10
10
  MAJOR = 1
11
- MINOR = 4
11
+ MINOR = 5
12
12
  TINY = 0
13
13
  PRE = nil
14
14
 
@@ -181,6 +181,7 @@ RSpec.describe AjaxDatatablesRails::Base do
181
181
  data = datatable.as_json
182
182
  expect(data[:recordsTotal]).to eq 5
183
183
  expect(data[:recordsFiltered]).to eq 5
184
+ expect(data[:draw]).to eq 1
184
185
  expect(data[:data]).to be_a(Array)
185
186
  expect(data[:data].size).to eq 5
186
187
  end
@@ -192,6 +193,7 @@ RSpec.describe AjaxDatatablesRails::Base do
192
193
  data = datatable.as_json
193
194
  expect(data[:recordsTotal]).to eq 5
194
195
  expect(data[:recordsFiltered]).to eq 5
196
+ expect(data[:draw]).to eq 1
195
197
  expect(data[:data]).to be_a(Array)
196
198
  expect(data[:data].size).to eq 5
197
199
  expect(data[:foo]).to eq 'bar'
@@ -168,6 +168,11 @@ RSpec.describe AjaxDatatablesRails::Datatable::Column do
168
168
  expect(column.send(:type_cast)).to eq('VARCHAR')
169
169
  end
170
170
 
171
+ it 'returns VARCHAR if :db_adapter is :postgis' do
172
+ expect(datatable).to receive(:db_adapter) { :postgis }
173
+ expect(column.send(:type_cast)).to eq('VARCHAR')
174
+ end
175
+
171
176
  it 'returns VARCHAR2(4000) if :db_adapter is :oracle' do
172
177
  expect(datatable).to receive(:db_adapter) { :oracle }
173
178
  expect(column.send(:type_cast)).to eq('VARCHAR2(4000)')
@@ -183,6 +188,11 @@ RSpec.describe AjaxDatatablesRails::Datatable::Column do
183
188
  expect(column.send(:type_cast)).to eq('CHAR')
184
189
  end
185
190
 
191
+ it 'returns CHAR if :db_adapter is :trilogy' do
192
+ expect(datatable).to receive(:db_adapter) { :trilogy }
193
+ expect(column.send(:type_cast)).to eq('CHAR')
194
+ end
195
+
186
196
  it 'returns CHAR if :db_adapter is :mysql' do
187
197
  expect(datatable).to receive(:db_adapter) { :mysql }
188
198
  expect(column.send(:type_cast)).to eq('CHAR')
@@ -42,6 +42,14 @@ RSpec.describe AjaxDatatablesRails::Datatable::SimpleOrder do
42
42
  end
43
43
  end
44
44
 
45
+ context 'with postgis database adapter' do
46
+ before { parent.db_adapter = :postgis }
47
+
48
+ it 'sql query' do
49
+ expect(nulls_last_order.query('email')).to eq('email DESC NULLS LAST')
50
+ end
51
+ end
52
+
45
53
  context 'with sqlite database adapter' do
46
54
  before { parent.db_adapter = :sqlite }
47
55
 
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
6
+
7
+ let(:datatable) { ComplexDatatable.new(sample_params) }
8
+ let(:records) { User.all }
9
+
10
+ describe '#records_total_count' do
11
+ context 'ungrouped results' do
12
+ it 'returns the count' do
13
+ expect(datatable.send(:records_total_count)).to eq records.count
14
+ end
15
+ end
16
+
17
+ context 'grouped results' do
18
+ let(:datatable) { GroupedDatatable.new(sample_params) }
19
+
20
+ it 'returns the count' do
21
+ expect(datatable.send(:records_total_count)).to eq records.count
22
+ end
23
+ end
24
+ end
25
+
26
+
27
+ describe '#records_filtered_count' do
28
+ context 'ungrouped results' do
29
+ it 'returns the count' do
30
+ expect(datatable.send(:records_filtered_count)).to eq records.count
31
+ end
32
+ end
33
+
34
+ context 'grouped results' do
35
+ let(:datatable) { GroupedDatatable.new(sample_params) }
36
+
37
+ it 'returns the count' do
38
+ expect(datatable.send(:records_filtered_count)).to eq records.count
39
+ end
40
+ end
41
+ end
42
+ end
@@ -202,6 +202,16 @@ RSpec.describe AjaxDatatablesRails::ORM::ActiveRecord do
202
202
  )
203
203
  end
204
204
  end
205
+
206
+ context 'when db_adapter is trilogy' do
207
+ it 'can call #to_sql on returned object' do
208
+ result = datatable.build_conditions_for_selected_columns
209
+ expect(result).to respond_to(:to_sql)
210
+ expect(result.to_sql).to eq(
211
+ "CAST(`users`.`username` AS CHAR) LIKE '%doe%' AND CAST(`users`.`email` AS CHAR) LIKE '%example%'"
212
+ )
213
+ end
214
+ end
205
215
  end
206
216
  end
207
217
 
@@ -4,12 +4,12 @@ test:
4
4
  database: ajax_datatables_rails
5
5
  encoding: utf8
6
6
 
7
- <% if adapter == 'postgresql' %>
7
+ <% if adapter == 'postgresql' || adapter == 'postgis' %>
8
8
  host: '127.0.0.1'
9
9
  port: 5432
10
10
  username: 'postgres'
11
11
  password: 'postgres'
12
- <% elsif adapter == 'mysql2' %>
12
+ <% elsif adapter == 'mysql2' || adapter == 'trilogy' %>
13
13
  host: '127.0.0.1'
14
14
  port: 3306
15
15
  username: 'root'
data/spec/spec_helper.rb CHANGED
@@ -73,11 +73,11 @@ class RunningSpec
73
73
  end
74
74
 
75
75
  def self.mysql?
76
- ENV['DB_ADAPTER'] == 'mysql2'
76
+ ENV['DB_ADAPTER'] == 'mysql2' || ENV['DB_ADAPTER'] == 'trilogy'
77
77
  end
78
78
 
79
79
  def self.postgresql?
80
- ENV['DB_ADAPTER'] == 'postgresql'
80
+ ENV['DB_ADAPTER'] == 'postgresql' || ENV['DB_ADAPTER'] == 'postgis'
81
81
  end
82
82
  end
83
83
 
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ class GroupedDatatable < ComplexDatatable
4
+
5
+ def get_raw_records
6
+ User.all.group(:id)
7
+ end
8
+ end
@@ -70,9 +70,9 @@ end
70
70
 
71
71
  def nulls_last_sql(datatable)
72
72
  case datatable.db_adapter
73
- when :pg, :postgresql, :postgres, :oracle
73
+ when :pg, :postgresql, :postgres, :oracle, :postgis
74
74
  'NULLS LAST'
75
- when :mysql, :mysql2, :sqlite, :sqlite3
75
+ when :mysql, :mysql2, :trilogy, :sqlite, :sqlite3
76
76
  'IS NULL'
77
77
  else
78
78
  raise 'unsupported database adapter'
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.4.0
4
+ version: 1.5.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: 2022-12-18 00:00:00.000000000 Z
12
+ date: 2024-04-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '5.2'
20
+ version: '6.0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '5.2'
27
+ version: '6.0'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: zeitwerk
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -311,10 +311,10 @@ files:
311
311
  - config.ru
312
312
  - doc/migrate.md
313
313
  - doc/webpack.md
314
- - gemfiles/rails_5.2.8.gemfile
315
314
  - gemfiles/rails_6.0.6.gemfile
316
315
  - gemfiles/rails_6.1.7.gemfile
317
- - gemfiles/rails_7.0.4.gemfile
316
+ - gemfiles/rails_7.0.8.gemfile
317
+ - gemfiles/rails_7.1.0.gemfile
318
318
  - lib/ajax-datatables-rails.rb
319
319
  - lib/ajax-datatables-rails/active_record.rb
320
320
  - lib/ajax-datatables-rails/base.rb
@@ -337,6 +337,7 @@ files:
337
337
  - spec/ajax-datatables-rails/datatable/datatable_spec.rb
338
338
  - spec/ajax-datatables-rails/datatable/simple_order_spec.rb
339
339
  - spec/ajax-datatables-rails/datatable/simple_search_spec.rb
340
+ - spec/ajax-datatables-rails/orm/active_record_count_records_spec.rb
340
341
  - spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb
341
342
  - spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb
342
343
  - spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb
@@ -359,6 +360,7 @@ files:
359
360
  - spec/support/datatables/datatable_cond_unknown.rb
360
361
  - spec/support/datatables/datatable_custom_column.rb
361
362
  - spec/support/datatables/datatable_order_nulls_last.rb
363
+ - spec/support/datatables/grouped_datatable_array.rb
362
364
  - spec/support/helpers/params.rb
363
365
  - spec/support/models/user.rb
364
366
  homepage: https://github.com/jbox-web/ajax-datatables-rails
@@ -384,7 +386,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
384
386
  - !ruby/object:Gem::Version
385
387
  version: '0'
386
388
  requirements: []
387
- rubygems_version: 3.3.26
389
+ rubygems_version: 3.5.7
388
390
  signing_key:
389
391
  specification_version: 4
390
392
  summary: A gem that simplifies using datatables and hundreds of records via ajax
@@ -1,21 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", git: "https://github.com/n-rodriguez/appraisal.git", branch: "wip/combustion"
6
- gem "rails", "5.2.8"
7
-
8
- install_if -> { ENV["DB_ADAPTER"] == "sqlite3" } do
9
- gem "sqlite3", "~> 1.3.0"
10
- end
11
-
12
- install_if -> { ENV["DB_ADAPTER"] == "mysql2" } do
13
- gem "mysql2"
14
- end
15
-
16
- install_if -> { ENV["DB_ADAPTER"] == "oracle_enhanced" } do
17
- gem "activerecord-oracle_enhanced-adapter", "~> 5.2.0"
18
- gem "ruby-oci8"
19
- end
20
-
21
- gemspec path: "../"