module Acts::DataTable::MultiColumnScopes
Public Class Methods
build_scope_name(*args)
click to toggle source
# File lib/acts_as_data_table/multi_column_scopes.rb, line 111 def self.build_scope_name(*args) args.join('_').to_sym end
database_cast(content)
click to toggle source
Performs a cast to text-like for various database types
# File lib/acts_as_data_table/multi_column_scopes.rb, line 102 def self.database_cast(content) case ActiveRecord::Base.connection.adapter_name when 'MySQL' "CAST(#{content} AS CHAR(10000) CHARACTER SET utf8)" else "CAST(#{content} AS TEXT)" end end
included(base)
click to toggle source
# File lib/acts_as_data_table/multi_column_scopes.rb, line 4 def self.included(base) base.send :extend, ClassMethods end
process_column_arg(arg, includes, model = self)
click to toggle source
Processes a single argument for has_multi_column_scope. Handles
- simple values (e.g. :first_name), - arrays which will be concatenated with a space character (e.g. [:first_name, :last_name]) - hashes which represent associations on the main model (e.g. :student => [:mat_num])
# File lib/acts_as_data_table/multi_column_scopes.rb, line 76 def self.process_column_arg(arg, includes, model = self) if arg.is_a?(Hash) res = [] arg.each do |association, columns| includes << association Array(columns).each do |column| res << process_column_arg(column, includes, association.to_s.singularize.classify.constantize) end end res elsif arg.is_a?(Array) columns = arg.map {|a| process_column_arg(a, includes, model)} columns = columns.map {|c| "TRIM(#{c})"} "CONCAT(#{columns.join(", ' ', ")})" else if model.column_names.include?(arg.to_s) [model.table_name, arg.to_s].join('.') else raise ArgumentError.new "The table '#{model.table_name}' does not have a column named '#{arg}'" end end end