class Thoth::SearchController

Public Instance Methods

index() click to toggle source
# File lib/thoth/controller/search.rb, line 39
def index
  redirect_referrer if request[:q].nil? || request[:q].empty?
  @query = request[:q].strip
  redirect_referrer if @query.empty?

  count  = request[:count] ? request[:count].strip.to_i : 10
  start  = request[:start] ? request[:start].strip.to_i : 1

  count = 5   if count < 5
  count = 100 if count > 100
  start = 1   if start < 1
  start = 990 if start > 990

  @title = "Search results for #{@query}"

  @data = yahoo_search(
    "#{@query} -inurl:/tag -inurl:/archive -inurl:/search",
    :adult_ok => 1,
    :results  => count,
    :site     => Config.site['url'].gsub(/^https?:\/\/([^\/]+)\/?$/i){$1},
    :start    => start
  )

  # Set up pagination links.
  if @data[:available] > @data[:returned]
    if @data[:start] > 1
      prev_start = start - count
      prev_start = 1 if prev_start < 1

      @prev_url = "#{rs()}?q=#{u(@query)}&count=#{count}&start=" <<
          prev_start.to_s
    end

    if @data[:available] > (@data[:start] + @data[:returned])
      next_start = start + @data[:returned]
      next_start = 1001 - count if next_start > (1001 - count)

      @next_url = "#{rs()}?q=#{u(@query)}&count=#{count}&start=" <<
          next_start.to_s
    end
  end

rescue SearchError => e
  @error = e.message
  @data  = {:results => []}
end