module Dusen::Util

Public Instance Methods

append_scope_conditions(scope, conditions) click to toggle source
# File lib/dusen/util.rb, line 50
def append_scope_conditions(scope, conditions)
  if scope.respond_to?(:where)
    # Rails 3
    scope.where(conditions)
  else
    # Rails 2
    scope.scoped(:conditions => conditions)
  end
end
boolean_fulltext_query(phrases) click to toggle source
# File lib/dusen/util.rb, line 29
def boolean_fulltext_query(phrases)
  phrases.collect do |word|
    escaped_word = Dusen::Util.escape_for_boolean_fulltext_query(word)
    if escaped_word =~ /\s/
      %{+"#{escaped_word}"} # no prefixed wildcard possible for phrases
    else
      %{+#{escaped_word}*}
    end
  end.join(' ')
end
drop_all_tables() click to toggle source
# File lib/dusen/util.rb, line 70
def drop_all_tables
  connection = ::ActiveRecord::Base.connection
  connection.tables.each do |table|
    connection.drop_table table
  end
end
escape_for_boolean_fulltext_query(phrase) click to toggle source
# File lib/dusen/util.rb, line 25
def escape_for_boolean_fulltext_query(phrase)
  escape_with_backslash(phrase, ['+', '-', '<', '>', '(', ')', '~', '*', '"'])
end
escape_for_like_query(phrase) click to toggle source
# File lib/dusen/util.rb, line 20
def escape_for_like_query(phrase)
  # phrase.gsub("%", "\\%").gsub("_", "\\_")
  escape_with_backslash(phrase, ['%', '_'])
end
escape_with_backslash(phrase, characters) click to toggle source
# File lib/dusen/util.rb, line 11
def escape_with_backslash(phrase, characters)
  characters << '\\'
  pattern = /[#{characters.collect(&Regexp.method(:quote)).join('')}]/
  # debugger
  phrase.gsub(pattern) do |match|
    "\\#{match}"
  end
end
like_expression(phrase) click to toggle source
# File lib/dusen/util.rb, line 7
def like_expression(phrase)
  "%#{escape_for_like_query(phrase)}%"
end
migrate_test_database() click to toggle source
# File lib/dusen/util.rb, line 77
def migrate_test_database
  print "\033[30m" # dark gray text
  drop_all_tables
  ::ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate")
  print "\033[0m"
end
normalize_word_boundaries(text) click to toggle source
# File lib/dusen/util.rb, line 84
def normalize_word_boundaries(text)
  unwanted_mysql_boundary = /[\.;\-]/
  text.gsub(unwanted_mysql_boundary, '')
end
qualify_column_name(model, column_name) click to toggle source
# File lib/dusen/util.rb, line 40
def qualify_column_name(model, column_name)
  column_name = column_name.to_s
  unless column_name.include?('.')
    quoted_table_name = model.connection.quote_table_name(model.table_name)
    quoted_column_name = model.connection.quote_column_name(column_name)
    column_name = "#{quoted_table_name}.#{quoted_column_name}"
  end
  column_name
end
select_scope_fields(scope, fields) click to toggle source
# File lib/dusen/util.rb, line 60
def select_scope_fields(scope, fields)
  if scope.respond_to?(:select)
    # Rails 3
    scope.select(fields)
  else
    # Rails 2
    scope.scoped(:select => fields)
  end
end