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.



95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/haveapi/client/client.rb', line 95

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:



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

def auth
  @api.auth
end

#authenticate(auth_method, **options, &block) ⇒ Object

See Communicator#authenticate.



56
57
58
# File 'lib/haveapi/client/client.rb', line 56

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

#blocking?Boolean

return [Boolean] true if global blocking mode is enabled

Returns:

  • (Boolean)


73
74
75
# File 'lib/haveapi/client/client.rb', line 73

def blocking?
  @opts[:block]
end

#communicatorHaveAPI::Client::Communicator



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

def communicator
  @api
end

#compatible?Boolean

Returns:

  • (Boolean)

See Also:



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

def compatible?
  @api.compatible?
end

#inspectObject



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

def inspect
  "#<#{self.class.name} url=#{@api.url} version=#{@opts[:version]}>"
end

#opts(*keys) ⇒ Hash

Returns client options.

Returns:

  • (Hash)

    client options



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

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



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

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

#setup(v = :_nil) ⇒ Object

Get the description from the API now.



40
41
42
43
# File 'lib/haveapi/client/client.rb', line 40

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
}


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

def versions
  @api.available_versions
end