ajax-datatables-rails 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.codeclimate.yml +5 -23
- data/.github/workflows/ci.yml +16 -8
- data/.gitignore +6 -3
- data/.rubocop.yml +1 -1
- data/Appraisals +18 -25
- data/CHANGELOG.md +14 -0
- data/Gemfile +2 -0
- data/README.md +15 -15
- data/ajax-datatables-rails.gemspec +5 -2
- data/appraisal.yml +56 -0
- data/bin/bundle +114 -0
- data/bin/rackup +27 -0
- data/config.ru +7 -0
- data/doc/migrate.md +1 -1
- data/gemfiles/rails_5.2.8.gemfile +21 -0
- data/gemfiles/rails_6.0.6.gemfile +21 -0
- data/gemfiles/rails_6.1.7.gemfile +21 -0
- data/gemfiles/rails_7.0.4.gemfile +21 -0
- data/lib/ajax-datatables-rails/base.rb +21 -1
- data/lib/ajax-datatables-rails/datatable/column/search.rb +8 -8
- data/lib/ajax-datatables-rails/datatable/column.rb +10 -9
- data/lib/ajax-datatables-rails/datatable/datatable.rb +0 -1
- data/lib/ajax-datatables-rails/version.rb +1 -1
- data/spec/ajax-datatables-rails/base_spec.rb +39 -19
- data/spec/ajax-datatables-rails/datatable/column_spec.rb +30 -33
- data/spec/ajax-datatables-rails/datatable/datatable_spec.rb +12 -10
- data/spec/ajax-datatables-rails/datatable/simple_order_spec.rb +5 -3
- data/spec/ajax-datatables-rails/datatable/simple_search_spec.rb +4 -2
- data/spec/ajax-datatables-rails/orm/active_record_filter_records_spec.rb +109 -120
- data/spec/ajax-datatables-rails/orm/active_record_paginate_records_spec.rb +6 -4
- data/spec/ajax-datatables-rails/orm/active_record_sort_records_spec.rb +7 -5
- data/spec/dummy/app/assets/config/manifest.js +0 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/config/storage.yml +3 -0
- data/spec/{support → dummy/db}/schema.rb +3 -4
- data/spec/dummy/log/.gitignore +1 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/user.rb +3 -1
- data/spec/spec_helper.rb +32 -19
- data/spec/support/datatables/complex_datatable.rb +4 -0
- data/spec/support/datatables/complex_datatable_array.rb +2 -0
- data/spec/support/datatables/datatable_cond_date.rb +2 -0
- data/spec/support/datatables/datatable_cond_numeric.rb +2 -0
- data/spec/support/datatables/datatable_cond_proc.rb +2 -0
- data/spec/support/datatables/datatable_cond_string.rb +4 -2
- data/spec/support/datatables/datatable_cond_unknown.rb +2 -0
- data/spec/support/datatables/datatable_custom_column.rb +17 -0
- data/spec/support/datatables/datatable_order_nulls_last.rb +2 -0
- data/spec/support/helpers/params.rb +14 -6
- data/spec/support/models/user.rb +5 -0
- metadata +65 -12
- data/gemfiles/rails_5.2.4.gemfile +0 -11
- data/gemfiles/rails_6.0.3.gemfile +0 -11
- data/gemfiles/rails_6.1.0.gemfile +0 -11
- data/spec/ajax-datatables-rails/orm/active_record_spec.rb +0 -24
@@ -36,11 +36,11 @@ module AjaxDatatablesRails
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def model
|
39
|
-
@model ||= source.split('.').first.constantize
|
39
|
+
@model ||= custom_field? ? source : source.split('.').first.constantize
|
40
40
|
end
|
41
41
|
|
42
42
|
def field
|
43
|
-
@field ||= source.split('.').last.to_sym
|
43
|
+
@field ||= custom_field? ? source : source.split('.').last.to_sym
|
44
44
|
end
|
45
45
|
|
46
46
|
def custom_field?
|
@@ -66,13 +66,14 @@ module AjaxDatatablesRails
|
|
66
66
|
TYPE_CAST_SQLSERVER = 'VARCHAR(4000)'
|
67
67
|
|
68
68
|
DB_ADAPTER_TYPE_CAST = {
|
69
|
-
mysql:
|
70
|
-
mysql2:
|
71
|
-
sqlite:
|
72
|
-
sqlite3:
|
73
|
-
oracle:
|
74
|
-
oracleenhanced:
|
75
|
-
|
69
|
+
mysql: TYPE_CAST_MYSQL,
|
70
|
+
mysql2: TYPE_CAST_MYSQL,
|
71
|
+
sqlite: TYPE_CAST_SQLITE,
|
72
|
+
sqlite3: TYPE_CAST_SQLITE,
|
73
|
+
oracle: TYPE_CAST_ORACLE,
|
74
|
+
oracleenhanced: TYPE_CAST_ORACLE,
|
75
|
+
oracle_enhanced: TYPE_CAST_ORACLE,
|
76
|
+
sqlserver: TYPE_CAST_SQLSERVER,
|
76
77
|
}.freeze
|
77
78
|
|
78
79
|
private_constant :TYPE_CAST_DEFAULT
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::Base do
|
5
|
+
RSpec.describe AjaxDatatablesRails::Base do
|
4
6
|
|
5
7
|
describe 'an instance' do
|
6
8
|
it 'requires a hash of params' do
|
@@ -15,9 +17,11 @@ describe AjaxDatatablesRails::Base do
|
|
15
17
|
|
16
18
|
describe 'User API' do
|
17
19
|
describe '#view_columns' do
|
18
|
-
|
19
|
-
|
20
|
-
|
20
|
+
context 'when method is not defined by the user' do
|
21
|
+
it 'raises an error' do
|
22
|
+
datatable = described_class.new(sample_params)
|
23
|
+
expect { datatable.view_columns }.to raise_error NotImplementedError
|
24
|
+
end
|
21
25
|
end
|
22
26
|
|
23
27
|
context 'child class implements view_columns' do
|
@@ -29,22 +33,26 @@ describe AjaxDatatablesRails::Base do
|
|
29
33
|
end
|
30
34
|
|
31
35
|
describe '#get_raw_records' do
|
32
|
-
|
33
|
-
|
34
|
-
|
36
|
+
context 'when method is not defined by the user' do
|
37
|
+
it 'raises an error' do
|
38
|
+
datatable = described_class.new(sample_params)
|
39
|
+
expect { datatable.get_raw_records }.to raise_error NotImplementedError
|
40
|
+
end
|
35
41
|
end
|
36
42
|
end
|
37
43
|
|
38
44
|
describe '#data' do
|
39
|
-
|
40
|
-
|
41
|
-
|
45
|
+
context 'when method is not defined by the user' do
|
46
|
+
it 'raises an error' do
|
47
|
+
datatable = described_class.new(sample_params)
|
48
|
+
expect { datatable.data }.to raise_error NotImplementedError
|
49
|
+
end
|
42
50
|
end
|
43
51
|
|
44
52
|
context 'when data is defined as a hash' do
|
45
53
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
46
54
|
|
47
|
-
it '
|
55
|
+
it 'returns an array of hashes' do
|
48
56
|
create_list(:user, 5)
|
49
57
|
expect(datatable.data).to be_a(Array)
|
50
58
|
expect(datatable.data.size).to eq 5
|
@@ -52,7 +60,7 @@ describe AjaxDatatablesRails::Base do
|
|
52
60
|
expect(item).to be_a(Hash)
|
53
61
|
end
|
54
62
|
|
55
|
-
it '
|
63
|
+
it 'htmls escape data' do
|
56
64
|
create(:user, first_name: 'Name "><img src=x onerror=alert("first_name")>', last_name: 'Name "><img src=x onerror=alert("last_name")>')
|
57
65
|
data = datatable.send(:sanitize_data, datatable.data)
|
58
66
|
item = data.first
|
@@ -64,7 +72,7 @@ describe AjaxDatatablesRails::Base do
|
|
64
72
|
context 'when data is defined as a array' do
|
65
73
|
let(:datatable) { ComplexDatatableArray.new(sample_params) }
|
66
74
|
|
67
|
-
it '
|
75
|
+
it 'returns an array of arrays' do
|
68
76
|
create_list(:user, 5)
|
69
77
|
expect(datatable.data).to be_a(Array)
|
70
78
|
expect(datatable.data.size).to eq 5
|
@@ -72,7 +80,7 @@ describe AjaxDatatablesRails::Base do
|
|
72
80
|
expect(item).to be_a(Array)
|
73
81
|
end
|
74
82
|
|
75
|
-
it '
|
83
|
+
it 'htmls escape data' do
|
76
84
|
create(:user, first_name: 'Name "><img src=x onerror=alert("first_name")>', last_name: 'Name "><img src=x onerror=alert("last_name")>')
|
77
85
|
data = datatable.send(:sanitize_data, datatable.data)
|
78
86
|
item = data.first
|
@@ -131,6 +139,18 @@ describe AjaxDatatablesRails::Base do
|
|
131
139
|
datatable.new(sample_params)
|
132
140
|
end
|
133
141
|
|
142
|
+
describe '#fetch_records' do
|
143
|
+
it 'calls #get_raw_records' do
|
144
|
+
expect(datatable).to receive(:get_raw_records) { User.all }
|
145
|
+
datatable.fetch_records
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'returns a collection of records' do
|
149
|
+
expect(datatable).to receive(:get_raw_records) { User.all }
|
150
|
+
expect(datatable.fetch_records).to be_a(ActiveRecord::Relation)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
134
154
|
describe '#filter_records' do
|
135
155
|
it {
|
136
156
|
expect { datatable.filter_records([]) }.to raise_error(NotImplementedError).with_message('FOO')
|
@@ -156,7 +176,7 @@ describe AjaxDatatablesRails::Base do
|
|
156
176
|
describe '#as_json' do
|
157
177
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
158
178
|
|
159
|
-
it '
|
179
|
+
it 'returns a hash' do
|
160
180
|
create_list(:user, 5)
|
161
181
|
data = datatable.as_json
|
162
182
|
expect(data[:recordsTotal]).to eq 5
|
@@ -166,9 +186,9 @@ describe AjaxDatatablesRails::Base do
|
|
166
186
|
end
|
167
187
|
|
168
188
|
context 'with additional_data' do
|
169
|
-
it '
|
189
|
+
it 'returns a hash' do
|
170
190
|
create_list(:user, 5)
|
171
|
-
expect(datatable).to receive(:additional_data){ { foo: 'bar' } }
|
191
|
+
expect(datatable).to receive(:additional_data) { { foo: 'bar' } }
|
172
192
|
data = datatable.as_json
|
173
193
|
expect(data[:recordsTotal]).to eq 5
|
174
194
|
expect(data[:recordsFiltered]).to eq 5
|
@@ -184,7 +204,7 @@ describe AjaxDatatablesRails::Base do
|
|
184
204
|
describe '#column_id' do
|
185
205
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
186
206
|
|
187
|
-
it '
|
207
|
+
it 'returns column id from view_columns hash' do
|
188
208
|
expect(datatable.column_id(:username)).to eq(0)
|
189
209
|
expect(datatable.column_id('username')).to eq(0)
|
190
210
|
end
|
@@ -194,7 +214,7 @@ describe AjaxDatatablesRails::Base do
|
|
194
214
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
195
215
|
before { datatable.params[:columns]['0'][:search][:value] = 'doe' }
|
196
216
|
|
197
|
-
it '
|
217
|
+
it 'returns column data from params' do
|
198
218
|
expect(datatable.column_data(:username)).to eq('doe')
|
199
219
|
expect(datatable.column_data('username')).to eq('doe')
|
200
220
|
end
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::Datatable::Column do
|
5
|
+
RSpec.describe AjaxDatatablesRails::Datatable::Column do
|
4
6
|
|
5
7
|
let(:datatable) { ComplexDatatable.new(sample_params) }
|
6
8
|
|
@@ -8,50 +10,49 @@ describe AjaxDatatablesRails::Datatable::Column do
|
|
8
10
|
|
9
11
|
let(:column) { datatable.datatable.columns.first }
|
10
12
|
|
11
|
-
before
|
12
|
-
datatable.params[:columns] = {'0'=>{'data'=>'username', 'name'=>'', 'searchable'=>'true', 'orderable'=>'true', 'search'=>{'value'=>'searchvalue', 'regex'=>'false'}}}
|
13
|
-
end
|
13
|
+
before { datatable.params[:columns]['0'][:search][:value] = 'searchvalue' }
|
14
14
|
|
15
|
-
it '
|
15
|
+
it 'is orderable' do
|
16
16
|
expect(column.orderable?).to eq(true)
|
17
17
|
end
|
18
18
|
|
19
|
-
it '
|
19
|
+
it 'sorts nulls last' do
|
20
20
|
expect(column.nulls_last?).to eq(false)
|
21
21
|
end
|
22
22
|
|
23
|
-
it '
|
23
|
+
it 'is searchable' do
|
24
24
|
expect(column.searchable?).to eq(true)
|
25
25
|
end
|
26
26
|
|
27
|
-
it '
|
27
|
+
it 'is searched' do
|
28
28
|
expect(column.searched?).to eq(true)
|
29
29
|
end
|
30
30
|
|
31
|
-
it '
|
31
|
+
it 'has connected to id column' do
|
32
32
|
expect(column.data).to eq('username')
|
33
33
|
end
|
34
34
|
|
35
35
|
describe '#data' do
|
36
|
-
it '
|
36
|
+
it 'returns the data from params' do
|
37
37
|
expect(column.data).to eq 'username'
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
describe '#source' do
|
42
|
-
it '
|
42
|
+
it 'returns the data source from view_column' do
|
43
43
|
expect(column.source).to eq 'User.username'
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
describe '#table' do
|
48
48
|
context 'with ActiveRecord ORM' do
|
49
|
-
it '
|
49
|
+
it 'returns the corresponding AR table' do
|
50
50
|
expect(column.table).to eq User.arel_table
|
51
51
|
end
|
52
52
|
end
|
53
|
+
|
53
54
|
context 'with other ORM' do
|
54
|
-
it '
|
55
|
+
it 'returns the corresponding model' do
|
55
56
|
expect(User).to receive(:respond_to?).with(:arel_table).and_return(false)
|
56
57
|
expect(column.table).to eq User
|
57
58
|
end
|
@@ -59,19 +60,19 @@ describe AjaxDatatablesRails::Datatable::Column do
|
|
59
60
|
end
|
60
61
|
|
61
62
|
describe '#model' do
|
62
|
-
it '
|
63
|
+
it 'returns the corresponding AR model' do
|
63
64
|
expect(column.model).to eq User
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
67
68
|
describe '#field' do
|
68
|
-
it '
|
69
|
+
it 'returns the corresponding field in DB' do
|
69
70
|
expect(column.field).to eq :username
|
70
71
|
end
|
71
72
|
end
|
72
73
|
|
73
74
|
describe '#custom_field?' do
|
74
|
-
it '
|
75
|
+
it 'returns false if field is bound to an AR field' do
|
75
76
|
expect(column.custom_field?).to be false
|
76
77
|
end
|
77
78
|
end
|
@@ -81,47 +82,47 @@ describe AjaxDatatablesRails::Datatable::Column do
|
|
81
82
|
expect(column.search).to be_a(AjaxDatatablesRails::Datatable::SimpleSearch)
|
82
83
|
end
|
83
84
|
|
84
|
-
it '
|
85
|
+
it 'has search value' do
|
85
86
|
expect(column.search.value).to eq('searchvalue')
|
86
87
|
end
|
87
88
|
|
88
|
-
it '
|
89
|
+
it 'does not regex' do
|
89
90
|
expect(column.search.regexp?).to eq false
|
90
91
|
end
|
91
92
|
end
|
92
93
|
|
93
94
|
describe '#cond' do
|
94
|
-
it '
|
95
|
+
it 'is :like by default' do
|
95
96
|
expect(column.cond).to eq(:like)
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
99
100
|
describe '#source' do
|
100
|
-
it '
|
101
|
+
it 'is :like by default' do
|
101
102
|
expect(column.source).to eq('User.username')
|
102
103
|
end
|
103
104
|
end
|
104
105
|
|
105
106
|
describe '#search_query' do
|
106
|
-
it '
|
107
|
+
it 'bulds search query' do
|
107
108
|
expect(column.search_query.to_sql).to include('%searchvalue%')
|
108
109
|
end
|
109
110
|
end
|
110
111
|
|
111
112
|
describe '#sort_query' do
|
112
|
-
it '
|
113
|
+
it 'builds sort query' do
|
113
114
|
expect(column.sort_query).to eq('users.username')
|
114
115
|
end
|
115
116
|
end
|
116
117
|
|
117
118
|
describe '#use_regex?' do
|
118
|
-
it '
|
119
|
+
it 'is true by default' do
|
119
120
|
expect(column.use_regex?).to be true
|
120
121
|
end
|
121
122
|
end
|
122
123
|
|
123
124
|
describe '#delimiter' do
|
124
|
-
it '
|
125
|
+
it 'is - by default' do
|
125
126
|
expect(column.delimiter).to eq('-')
|
126
127
|
end
|
127
128
|
end
|
@@ -131,7 +132,7 @@ describe AjaxDatatablesRails::Datatable::Column do
|
|
131
132
|
let(:datatable) { DatatableWithFormater.new(sample_params) }
|
132
133
|
let(:column) { datatable.datatable.columns.find { |c| c.data == 'last_name' } }
|
133
134
|
|
134
|
-
it '
|
135
|
+
it 'is a proc' do
|
135
136
|
expect(column.formatter).to be_a(Proc)
|
136
137
|
end
|
137
138
|
end
|
@@ -140,7 +141,7 @@ describe AjaxDatatablesRails::Datatable::Column do
|
|
140
141
|
let(:datatable) { DatatableCondProc.new(sample_params) }
|
141
142
|
let(:column) { datatable.datatable.columns.find { |c| c.data == 'username' } }
|
142
143
|
|
143
|
-
it '
|
144
|
+
it 'is a proc' do
|
144
145
|
config = column.instance_variable_get('@view_column')
|
145
146
|
filter = config[:cond]
|
146
147
|
expect(filter).to be_a(Proc)
|
@@ -204,19 +205,15 @@ describe AjaxDatatablesRails::Datatable::Column do
|
|
204
205
|
end
|
205
206
|
|
206
207
|
describe 'when empty column' do
|
207
|
-
before
|
208
|
-
datatable.params[:columns] = {'0'=>{'data'=>'', 'name'=>'', 'searchable'=>'true', 'orderable'=>'true', 'search'=>{'value'=>'searchvalue', 'regex'=>'false'}}}
|
209
|
-
end
|
208
|
+
before { datatable.params[:columns]['0'][:data] = '' }
|
210
209
|
|
211
210
|
it 'raises error' do
|
212
|
-
expect { datatable.to_json }.to raise_error(AjaxDatatablesRails::Error::InvalidSearchColumn).with_message(
|
211
|
+
expect { datatable.to_json }.to raise_error(AjaxDatatablesRails::Error::InvalidSearchColumn).with_message('Unknown column. Check that `data` field is filled on JS side with the column name')
|
213
212
|
end
|
214
213
|
end
|
215
214
|
|
216
215
|
describe 'when unknown column' do
|
217
|
-
before
|
218
|
-
datatable.params[:columns] = {'0'=>{'data'=>'foo', 'name'=>'', 'searchable'=>'true', 'orderable'=>'true', 'search'=>{'value'=>'searchvalue', 'regex'=>'false'}}}
|
219
|
-
end
|
216
|
+
before { datatable.params[:columns]['0'][:data] = 'foo' }
|
220
217
|
|
221
218
|
it 'raises error' do
|
222
219
|
expect { datatable.to_json }.to raise_error(AjaxDatatablesRails::Error::InvalidSearchColumn).with_message("Check that column 'foo' exists in view_columns")
|
@@ -1,23 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::Datatable::Datatable do
|
5
|
+
RSpec.describe AjaxDatatablesRails::Datatable::Datatable do
|
4
6
|
|
5
7
|
let(:datatable) { ComplexDatatable.new(sample_params).datatable }
|
6
8
|
let(:datatable_json) { ComplexDatatable.new(sample_params_json).datatable }
|
7
|
-
let(:order_option) { {'0'=>{'column'=>'0', 'dir'=>'asc'}, '1'=>{'column'=>'1', 'dir'=>'desc'}} }
|
8
|
-
let(:order_option_json) { [{'column'=>'0', 'dir'=>'asc'}, {'column'=>'1', 'dir'=>'desc'}] }
|
9
|
+
let(:order_option) { { '0' => { 'column' => '0', 'dir' => 'asc' }, '1' => { 'column' => '1', 'dir' => 'desc' } } }
|
10
|
+
let(:order_option_json) { [{ 'column' => '0', 'dir' => 'asc' }, { 'column' => '1', 'dir' => 'desc' }] }
|
9
11
|
|
10
12
|
shared_examples 'order methods' do
|
11
|
-
it '
|
13
|
+
it 'is orderable' do
|
12
14
|
expect(datatable.orderable?).to eq(true)
|
13
15
|
end
|
14
16
|
|
15
|
-
it '
|
17
|
+
it 'is not orderable' do
|
16
18
|
datatable.options[:order] = nil
|
17
19
|
expect(datatable.orderable?).to eq(false)
|
18
20
|
end
|
19
21
|
|
20
|
-
it '
|
22
|
+
it 'has 2 orderable columns' do
|
21
23
|
datatable.options[:order] = order_option
|
22
24
|
expect(datatable.orders.count).to eq(2)
|
23
25
|
end
|
@@ -38,8 +40,8 @@ describe AjaxDatatablesRails::Datatable::Datatable do
|
|
38
40
|
end
|
39
41
|
|
40
42
|
shared_examples 'columns methods' do
|
41
|
-
it '
|
42
|
-
expect(datatable.columns.count).to eq(
|
43
|
+
it 'has 7 columns' do
|
44
|
+
expect(datatable.columns.count).to eq(7)
|
43
45
|
end
|
44
46
|
|
45
47
|
it 'child class' do
|
@@ -60,12 +62,12 @@ describe AjaxDatatablesRails::Datatable::Datatable do
|
|
60
62
|
end
|
61
63
|
|
62
64
|
describe 'search methods' do
|
63
|
-
it '
|
65
|
+
it 'is searchable' do
|
64
66
|
datatable.options[:search][:value] = 'atom'
|
65
67
|
expect(datatable.searchable?).to eq(true)
|
66
68
|
end
|
67
69
|
|
68
|
-
it '
|
70
|
+
it 'is not searchable' do
|
69
71
|
datatable.options[:search][:value] = nil
|
70
72
|
expect(datatable.searchable?).to eq(false)
|
71
73
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::Datatable::SimpleOrder do
|
5
|
+
RSpec.describe AjaxDatatablesRails::Datatable::SimpleOrder do
|
4
6
|
|
5
7
|
let(:parent) { ComplexDatatable.new(sample_params) }
|
6
8
|
let(:datatable) { parent.datatable }
|
7
|
-
let(:options) { ActiveSupport::HashWithIndifferentAccess.new({'column' => '1', 'dir' => 'desc'}) }
|
9
|
+
let(:options) { ActiveSupport::HashWithIndifferentAccess.new({ 'column' => '1', 'dir' => 'desc' }) }
|
8
10
|
let(:simple_order) { AjaxDatatablesRails::Datatable::SimpleOrder.new(datatable, options) }
|
9
11
|
|
10
12
|
describe 'option methods' do
|
@@ -19,7 +21,7 @@ describe AjaxDatatablesRails::Datatable::SimpleOrder do
|
|
19
21
|
after { parent.nulls_last = false }
|
20
22
|
|
21
23
|
it 'sql query' do
|
22
|
-
skip('unsupported database adapter') if
|
24
|
+
skip('unsupported database adapter') if RunningSpec.oracle?
|
23
25
|
|
24
26
|
expect(simple_order.query('email')).to eq(
|
25
27
|
"email DESC #{nulls_last_sql(parent)}"
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
|
-
describe AjaxDatatablesRails::Datatable::SimpleSearch do
|
5
|
+
RSpec.describe AjaxDatatablesRails::Datatable::SimpleSearch do
|
4
6
|
|
5
|
-
let(:options) { ActiveSupport::HashWithIndifferentAccess.new({'value' => 'search value', 'regex' => 'true'}) }
|
7
|
+
let(:options) { ActiveSupport::HashWithIndifferentAccess.new({ 'value' => 'search value', 'regex' => 'true' }) }
|
6
8
|
let(:simple_search) { AjaxDatatablesRails::Datatable::SimpleSearch.new(options) }
|
7
9
|
|
8
10
|
describe 'option methods' do
|