Class: ConnectWiseRest::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/connect_wise_rest/client.rb

Direct Known Subclasses

Report

Constant Summary collapse

DEFAULT_OPTIONS =
ConnectWiseRest.configuration.to_hash.merge(
  {
    headers: {},
    query: { 'page' => 1, 'pageSize' => 75 },
    timeout: 300,
    request_options: {}
  }
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource, options = {}) ⇒ Client

Returns a new instance of Client.



16
17
18
19
# File 'lib/connect_wise_rest/client.rb', line 16

def initialize(resource, options = {})
  @resource = resource
  @options = DEFAULT_OPTIONS.merge(options)
end

Instance Attribute Details

#optionsObject

Returns the value of attribute options.



4
5
6
# File 'lib/connect_wise_rest/client.rb', line 4

def options
  @options
end

#resourceObject (readonly)

Returns the value of attribute resource.



5
6
7
# File 'lib/connect_wise_rest/client.rb', line 5

def resource
  @resource
end

Instance Method Details

#dataObject



21
22
23
# File 'lib/connect_wise_rest/client.rb', line 21

def data
  @data || fetch
end

#fetch(query = {}) ⇒ Object



25
26
27
28
29
30
31
32
# File 'lib/connect_wise_rest/client.rb', line 25

def fetch(query = {})
  self.options[:query].merge!(query)
  @response = nil

  raise_error(response) unless response.success?

  @data = response.parsed_response
end

#next_pageObject



79
80
81
82
# File 'lib/connect_wise_rest/client.rb', line 79

def next_page
  self.options[:query]['page'] += 1
  return fetch
end

#next_page?Boolean

Pagination ###

Returns:

  • (Boolean)


75
76
77
# File 'lib/connect_wise_rest/client.rb', line 75

def next_page?
  self.data.is_a?(Array) && self.data.count >= self.options[:query]['pageSize']
end

#previous_pageObject



88
89
90
91
# File 'lib/connect_wise_rest/client.rb', line 88

def previous_page
  self.options[:query]['page'] -= 1
  return fetch
end

#previous_page?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/connect_wise_rest/client.rb', line 84

def previous_page?
  self.options[:query]['page'] > 1
end

#request_optionsObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/connect_wise_rest/client.rb', line 40

def request_options
  request_options = options[:request_options] || {}

  request_options.merge!(
    headers: { 'Accept' => 'application/json' }.merge(options[:headers]),
    query: self.options[:query],
    timeout: options[:timeout],
    basic_auth: {
      username: "#{options[:company_id]}+#{options[:public_key]}",
      password: options[:private_key]
    }
  )

  if options[:proxy_host]
    request_options.merge!(
      http_proxyaddr: options[:proxy_host],
      http_proxyport: options[:proxy_port],
      http_proxyuser: options[:proxy_user],
      http_proxypass: options[:proxy_password],
    )
  end

  if options[:debug] && options[:logger]
    request_options[:debug_output] = options[:logger]
  end

  request_options
end

#responseObject



34
35
36
37
38
# File 'lib/connect_wise_rest/client.rb', line 34

def response
  @response ||= HTTParty.get(url, request_options)
rescue StandardError => e
  raise ConnectionError.new(e.message)
end

#urlObject



69
70
71
# File 'lib/connect_wise_rest/client.rb', line 69

def url
  "https://#{options[:url_prefix]}/v4_6_release/apis/#{options[:version]}#{resource}"
end