Class: GdsApi::Search

Inherits:
Base
  • Object
show all
Defined in:
lib/gds_api/search.rb

Instance Attribute Summary

Attributes inherited from Base

#options

Instance Method Summary collapse

Methods inherited from Base

#client, #create_client, #get_list, #initialize, #url_for_slug

Constructor Details

This class inherits a constructor from GdsApi::Base

Instance Method Details

#base_urlObject



41
42
43
# File 'lib/gds_api/search.rb', line 41

def base_url
  endpoint
end

#search(args, additional_headers = {}) ⇒ Object

Perform a search.

Parameters:

  • args (Hash)

    A valid search query. See search-api documentation for options.

See Also:



12
13
14
15
# File 'lib/gds_api/search.rb', line 12

def search(args, additional_headers = {})
  request_url = "#{base_url}/search.json?#{Rack::Utils.build_nested_query(args)}"
  get_json(request_url, additional_headers)
end

#search_enum(args, page_size: 100, additional_headers: {}) ⇒ Object

Perform a search, returning the results as an enumerator.

The enumerator abstracts away search-api’s pagination and fetches new pages when necessary.

Parameters:

  • args (Hash)

    A valid search query. See search-api documentation for options.

  • page_size (Integer) (defaults to: 100)

    Number of results in each page.

See Also:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/gds_api/search.rb', line 26

def search_enum(args, page_size: 100, additional_headers: {})
  Enumerator.new do |yielder|
    (0..Float::INFINITY).step(page_size).each do |index|
      search_params = args.merge(start: index.to_i, count: page_size)
      results = search(search_params, additional_headers).to_h.fetch("results", [])
      results.each do |result|
        yielder << result
      end
      if results.count < page_size
        break
      end
    end
  end
end