Class: CloudSearch::Searcher

Inherits:
Object
  • Object
show all
Defined in:
lib/cloud_search/searcher.rb

Instance Method Summary collapse

Instance Method Details

#at_page(page) ⇒ Object



52
53
54
55
# File 'lib/cloud_search/searcher.rb', line 52

def at_page(page)
  @page_number = (page && page < 1) ? 1 : page
  self
end

#items_per_pageObject



48
49
50
# File 'lib/cloud_search/searcher.rb', line 48

def items_per_page
  @items_per_page or 10
end

#page_numberObject



57
58
59
# File 'lib/cloud_search/searcher.rb', line 57

def page_number
  @page_number or 1
end

#queryObject



34
35
36
# File 'lib/cloud_search/searcher.rb', line 34

def query
  @query or ''
end

#searchObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/cloud_search/searcher.rb', line 4

def search
  response = SearchResponse.new

  EM.run do
    http = EM::HttpRequest.new(url).get

    http.callback do
      response.http_code = http.response_header.status
      response.body = JSON.parse(http.response)

      EM.stop
    end

    http.errback do
      response.http_code = http.error
      response.body = http.response

      EM.stop
    end
  end

  response.items_per_page = items_per_page
  response
end

#startObject



61
62
63
64
# File 'lib/cloud_search/searcher.rb', line 61

def start
  return 0 if page_number <= 1
  (items_per_page * page_number) - 1
end

#urlObject



66
67
68
69
70
71
# File 'lib/cloud_search/searcher.rb', line 66

def url
  "#{CloudSearch.config.search_url}/search".tap do |u|
    u.concat("?q=#{CGI.escape(query)}&size=#{items_per_page}&start=#{start}")
    u.concat("&return-fields=#{CGI.escape(@fields.join(","))}") unless @fields.nil? or @fields.empty?
  end
end

#with_fields(*fields) ⇒ Object



38
39
40
41
# File 'lib/cloud_search/searcher.rb', line 38

def with_fields(*fields)
  @fields = fields
  self
end

#with_items_per_page(items_per_page) ⇒ Object



43
44
45
46
# File 'lib/cloud_search/searcher.rb', line 43

def with_items_per_page(items_per_page)
  @items_per_page = items_per_page
  self
end

#with_query(query) ⇒ Object



29
30
31
32
# File 'lib/cloud_search/searcher.rb', line 29

def with_query(query)
  @query = query
  self
end