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