Skip to content

Commit eb6efac

Browse files
author
M. Saiqul Haq
committed
fix SQL syntax error on AjaxDatatablesRails#search_condition if
db_adapter is mysql add initializer generator for configure global setting configuration
1 parent b8c50d7 commit eb6efac

File tree

6 files changed

+95
-2
lines changed

6 files changed

+95
-2
lines changed

lib/ajax-datatables-rails.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
require 'ajax-datatables-rails/version'
2+
require 'ajax-datatables-rails/config'
23
require 'ajax-datatables-rails/base'
34
require 'ajax-datatables-rails/extensions/simple_paginator'
45
require 'ajax-datatables-rails/extensions/kaminari'
56
require 'ajax-datatables-rails/extensions/will_paginate'
67

78
module AjaxDatatablesRails
8-
end
9+
end

lib/ajax-datatables-rails/base.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ def initialize(view, options = {})
1111
@options = options
1212
end
1313

14+
def config
15+
@config ||= AjaxDatatablesRails.config
16+
end
17+
1418
def sortable_columns
1519
@sortable_columns ||= []
1620
end
@@ -101,7 +105,18 @@ def build_conditions_for(query)
101105
def search_condition(column, value)
102106
model, column = column.split('.')
103107
model = model.singularize.titleize.gsub( / /, '' ).constantize
104-
casted_column = ::Arel::Nodes::NamedFunction.new('CAST', [model.arel_table[column.to_sym].as('VARCHAR')])
108+
109+
# because particular commit is based on postgre, so that's why use VARCHAR
110+
# but we we need to use CHAR typecast on mysql db adapter
111+
# or maybe it should
112+
# if :pg
113+
# elsif :mysql
114+
# else
115+
if @config.db_adapter == :pg
116+
casted_column = ::Arel::Nodes::NamedFunction.new('CAST', [model.arel_table[column.to_sym].as('VARCHAR')])
117+
else
118+
casted_column = ::Arel::Nodes::NamedFunction.new('CAST', [model.arel_table[column.to_sym].as('CHAR')])
119+
end
105120
casted_column.matches("%#{value}%")
106121
end
107122

lib/ajax-datatables-rails/config.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require 'active_support/configurable'
2+
3+
module AjaxDatatablesRails
4+
5+
# configure AjaxDatatablesRails global settings
6+
# AjaxDatatablesRails.configure do |config|
7+
# config.db_adapter = :pg
8+
# end
9+
def self.configure &block
10+
yield @config ||= AjaxDatatablesRails::Configuration.new
11+
end
12+
13+
# AjaxDatatablesRails global settings
14+
def self.config
15+
@config ||= AjaxDatatablesRails::Configuration.new
16+
end
17+
18+
class Configuration
19+
include ActiveSupport::Configurable
20+
21+
# default db_adapter is pg (postgresql)
22+
config_accessor(:db_adapter) { :pg }
23+
end
24+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module Rails
2+
module Generators
3+
class DatatableInitializerGenerator < ::Rails::Generators::Base
4+
source_root File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
5+
desc <<DESC
6+
Description:
7+
Creates an initializer file for AjaxDatatablesRails configuration at config/initializers.
8+
DESC
9+
10+
def copy_config_file
11+
template 'ajax_datatables_rails_config.rb', 'config/initializers/ajax_datatables_rails.rb'
12+
end
13+
end
14+
end
15+
end
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
AjaxDatatablesRails.configure do |config|
2+
#config.db_adapter = :pg
3+
end

spec/ajax-datatables-rails/ajax_datatables_rails_spec.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,3 +221,38 @@ def self.arel_table
221221
end
222222
end
223223
end
224+
225+
226+
describe AjaxDatatablesRails::Configuration do
227+
let(:config) { AjaxDatatablesRails::Configuration.new }
228+
229+
describe "default config" do
230+
it "default db_adapter should :pg (postgresql)" do
231+
expect(config.db_adapter).to eq(:pg)
232+
end
233+
end
234+
235+
describe "custom config" do
236+
it 'should accept db_adapter custom value' do
237+
config.db_adapter = :mysql2
238+
expect(config.db_adapter).to eq(:mysql2)
239+
end
240+
end
241+
end
242+
243+
describe AjaxDatatablesRails do
244+
describe "configurations" do
245+
context "configurable from outside" do
246+
before(:each) do
247+
AjaxDatatablesRails.configure do |config|
248+
config.db_adapter = :mysql2
249+
end
250+
end
251+
252+
it "should have custom value" do
253+
expect(AjaxDatatablesRails.config.db_adapter).to eq(:mysql2)
254+
end
255+
end
256+
257+
end
258+
end

0 commit comments

Comments
 (0)