Module: DPN::Client::Agent::Connection

Included in:
DPN::Client::Agent
Defined in:
lib/dpn/client/agent/connection.rb

Instance Method Summary collapse

Instance Method Details

#delete(url) {|Response| ... } ⇒ Response

Make a DELETE request

Parameters:

  • url (String)

    The path, relative to base_url

Yields:

  • (Response)

    Optional block that takes the response object as a parameter.

Returns:



55
56
57
# File 'lib/dpn/client/agent/connection.rb', line 55

def delete(url, &block)
  request :delete, url, nil, nil, &block
end

#get(url, query = nil) {|Response| ... } ⇒ Response

Make a GET request

Parameters:

  • url (String)

    The path, relative to base_url

  • query (Hash) (defaults to: nil)

    Optional query parameters.

Yields:

  • (Response)

    Optional block that takes the response object as a parameter.

Returns:



23
24
25
# File 'lib/dpn/client/agent/connection.rb', line 23

def get(url, query = nil, &block)
  request :get, url, query, nil, &block
end

#paginate(url, query, page_size) {|Response| ... } ⇒ Object

Make one or more GET requests, fetching the next page of results one page at a time, so long as the response indicates there is another page.

Parameters:

  • url (String)

    The path, relative to base_url

  • query (Hash)

    Optional query parameters.

  • page_size (Fixnum)

    The number of results to request from each page.

Yields:

  • (Response)

    Mandatory block that takes a page of results (the response object) as a parameter. The results will be available via response.

Raises:

  • (ArgumentError)


70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/dpn/client/agent/connection.rb', line 70

def paginate(url, query, page_size, &block)
  raise ArgumentError, "Must pass a block" unless block_given?

  query ||= {}
  query = query.merge({ :page_size => page_size, :page => 1})

  [:after, :before].each do |date_field|
    if query[date_field].is_a?(DateTime)
      query[date_field] = query[:date_field].new_offset(0).strftime(DPN::Client.time_format)
    end
  end

  response = get(url, query) # pass an empty block so we can call the block manually on :results
  yield response
  while response.success? && response[:next] && response[:results].empty? == false
    query[:page] += 1
    query[:page_size] = response[:results].size # in case the server specifies a different page size
    response = get(url, query) {}
    yield response
  end
end

#paginate_each(url, query, page_size) {|Response| ... } ⇒ Object

Make a one or more GET requests, fetching the next page of results one page at a time, so long as the response indicates there is another page. This method yields each individual result, wrapped in a [Response].

Parameters:

  • url (String)

    The path, relative to base_url

  • query (Hash)

    Optional query parameters.

  • page_size (Fixnum)

    The number of results to request from each page.

Yields:

  • (Response)

    Mandatory block that takes each individual result wrapped in a response object as a parameter. Should a request receive an error, the error will be wrapped in a response object and yielded.

Raises:

  • (ArgumentError)


105
106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/dpn/client/agent/connection.rb', line 105

def paginate_each(url, query, page_size, &block)
  raise ArgumentError, "Block required" unless block_given?
  paginate(url, query, (page_size || 25)) do |response|
    if response.success?
      logger.info("Response has #{response[:results].size} results.")
      response[:results].each do |result|
        yield Response.from_data(response.status, result)
      end
    else
      yield response
    end
  end
end

#post(url, body) {|Response| ... } ⇒ Response

Make a POST request

Parameters:

  • url (String)

    The path, relative to base_url

  • body (String)

    The message body.

Yields:

  • (Response)

    Optional block that takes the response object as a parameter.

Returns:



34
35
36
# File 'lib/dpn/client/agent/connection.rb', line 34

def post(url, body, &block )
  request :post, url, nil, body, &block
end

#put(url, body) {|Response| ... } ⇒ Response

Make a PUT request

Parameters:

  • url (String)

    The path, relative to base_url

  • body (String)

    The message body.

Yields:

  • (Response)

    Optional block that takes the response object as a parameter.

Returns:



45
46
47
# File 'lib/dpn/client/agent/connection.rb', line 45

def put(url, body, &block)
  request :put, url, nil, body, &block
end