Class: HaveAPI::Client::Client

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

Overview

HaveAPI client interface.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(url, opts = {}) ⇒ Client

Create an instance of client. The client by default uses the default version of the API. API is asked for description only when needed or by calling #setup. identity is sent in each request to the API in User-Agent header.

Parameters:

  • url (String)

    API URL

  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • version (String)
  • identity (String)
  • communicator (HaveAPI::Client::Communicator)
  • block (Boolean)
  • block_interval (Integer)
  • block_timeout (Integer)


19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/haveapi/client/client.rb', line 19

def initialize(url, opts = {})
  @setup = false
  @opts = opts
  @version = @opts[:version]
  @opts[:identity] ||= 'haveapi-client'
  @opts[:block] = true if @opts[:block].nil?

  if @opts[:communicator]
    @api = @opts[:communicator]

  else
    @api = HaveAPI::Client::Communicator.new(url, @version)
    @api.identity = @opts[:identity]
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(symbol, *args) ⇒ Object

Initialize the client if it is not yet initialized and call the resource if it exists.



91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/haveapi/client/client.rb', line 91

def method_missing(symbol, *args)
  return super(symbol, *args) if @setup

  setup_api

  if @resources.include?(symbol)
    method(symbol).call(*args)

  else
    super(symbol, *args)
  end
end

Instance Attribute Details

#resourcesObject (readonly)

Returns the value of attribute resources.



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

def resources
  @resources
end

Instance Method Details

#authHaveAPI::Client::Authentication::Base?

Get uthentication provider

Returns:



59
60
61
# File 'lib/haveapi/client/client.rb', line 59

def auth
  @api.auth
end

#authenticate(*args, &block) ⇒ Object

See Communicator#authenticate.



52
53
54
# File 'lib/haveapi/client/client.rb', line 52

def authenticate(*args, &block)
  @api.authenticate(*args, &block)
end

#blocking?Boolean

return [Boolean] true if global blocking mode is enabled

Returns:

  • (Boolean)


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

def blocking?
  @opts[:block]
end

#communicatorHaveAPI::Client::Communicator



85
86
87
# File 'lib/haveapi/client/client.rb', line 85

def communicator
  @api
end

#compatible?Boolean

Returns:

  • (Boolean)

See Also:



64
65
66
# File 'lib/haveapi/client/client.rb', line 64

def compatible?
  @api.compatible?
end

#opts(*keys) ⇒ Hash

Returns client options.

Returns:

  • (Hash)

    client options



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

def opts(*keys)
  keys.empty? ? @opts.clone : @opts.select { |k, _| keys.include?(k) }
end

#set_opts(opts) ⇒ Object

Override selected client options

Parameters:

  • opts (Hash)

    options



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

def set_opts(opts)
  @opts.update(opts)
end

#setup(v = :_nil) ⇒ Object

Get the description from the API now.



36
37
38
39
# File 'lib/haveapi/client/client.rb', line 36

def setup(v = :_nil)
  @version = v unless v == :_nil
  setup_api
end

#versionsObject

Returns a list of API versions. The return value is a hash, e.g.:

{
  versions: [1, 2, 3],
  default: 3
}


47
48
49
# File 'lib/haveapi/client/client.rb', line 47

def versions
  @api.available_versions
end