class Madmin::Search
Attributes
query[R]
Public Class Methods
new(scoped_resource, resource, term)
click to toggle source
# File lib/madmin/search.rb, line 7 def initialize(scoped_resource, resource, term) @resource = resource @scoped_resource = scoped_resource @query = term end
Public Instance Methods
run()
click to toggle source
# File lib/madmin/search.rb, line 13 def run if query.blank? @scoped_resource.all else search_results(@scoped_resource) end end
Private Instance Methods
column_to_query(attr)
click to toggle source
# File lib/madmin/search.rb, line 56 def column_to_query(attr) ActiveRecord::Base.connection.quote_column_name(attr) end
query_table_name(attr)
click to toggle source
# File lib/madmin/search.rb, line 52 def query_table_name(attr) ActiveRecord::Base.connection.quote_column_name(@scoped_resource.table_name) end
query_template()
click to toggle source
# File lib/madmin/search.rb, line 27 def query_template search_attributes.map do |attr| table_name = query_table_name(attr) searchable_fields(attr).map do |field| column_name = column_to_query(field) "LOWER(CAST(#{table_name}.#{column_name} AS CHAR(256))) LIKE ?" end.join(" OR ") end.join(" OR ") end
query_values()
click to toggle source
# File lib/madmin/search.rb, line 41 def query_values fields_count = search_attributes.sum do |attr| searchable_fields(attr).count end ["%#{@query.mb_chars.downcase}%"] * fields_count end
search_attributes()
click to toggle source
# File lib/madmin/search.rb, line 48 def search_attributes @resource.searchable_attributes end
search_results(resources)
click to toggle source
# File lib/madmin/search.rb, line 23 def search_results(resources) resources.where(query_template, *query_values) end
searchable_fields(attr)
click to toggle source
# File lib/madmin/search.rb, line 37 def searchable_fields(attr) [attr[:name]] end