class Tablets::Utils::SearchConditionBuilder
Resposible for building database specific search conditions
Attributes
column[R]
query[R]
Public Class Methods
new(column, query)
click to toggle source
Initializes builder
# File lib/tablets/utils/search_condition_builder.rb, line 11 def initialize(column, query) @column = column @query = query end
Public Instance Methods
build()
click to toggle source
Builds search condition for specific db type
# File lib/tablets/utils/search_condition_builder.rb, line 17 def build sanitize "(#{prepared_column} #{like} ?)", "%#{query}%" end
Private Instance Methods
cast(column)
click to toggle source
Cast column to string
# File lib/tablets/utils/search_condition_builder.rb, line 34 def cast(column) "CAST (#{column} AS #{string_type})" end
db_adapter()
click to toggle source
Retrieves rails database adapter
# File lib/tablets/utils/search_condition_builder.rb, line 64 def db_adapter @db_adapter ||= ActiveRecord::Base.configurations[Rails.env]['adapter'].to_sym end
like()
click to toggle source
Returns database specific like operator
# File lib/tablets/utils/search_condition_builder.rb, line 46 def like case db_adapter when :postgresql then 'ILIKE' when :mysql2 then 'LIKE' when :sqlite3 then 'LIKE' end end
prepared_column()
click to toggle source
Returns column prepared for using in SQL statement
# File lib/tablets/utils/search_condition_builder.rb, line 29 def prepared_column cast quote @column end
quote(column)
click to toggle source
Quotes column name
# File lib/tablets/utils/search_condition_builder.rb, line 39 def quote(column) column.split('.').map do |component| ActiveRecord::Base.connection.quote_column_name component end.join('.') end
sanitize(sql, *params)
click to toggle source
Sanitizes sql expression with params
# File lib/tablets/utils/search_condition_builder.rb, line 24 def sanitize(sql, *params) ActiveRecord::Base.send(:sanitize_sql_array, [sql, *params]) end
string_type()
click to toggle source
Returns database specific string type
# File lib/tablets/utils/search_condition_builder.rb, line 55 def string_type case db_adapter when :postgresql then 'VARCHAR' when :mysql2 then 'CHAR' when :sqlite3 then 'TEXT' end end