Class: MprofiApiClient::Connector

Inherits:
Object
  • Object
show all
Defined in:
lib/mprofi_api_client/connector.rb

Overview

Connector class that manages communication with mProfi public API.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_token = nil, proxy_url = nil) ⇒ Connector

api_token

api token, as string. If api_token is not specified ‘MPROFI_API_TOKEN` env variable will be used.

proxy_url

proxy URL (optional)

Raises:

  • (ArgumentError)


23
24
25
26
27
28
29
30
31
# File 'lib/mprofi_api_client/connector.rb', line 23

def initialize(api_token = nil, proxy_url = nil)
  @api_token = api_token || ENV['MPROFI_API_TOKEN']
  raise ArgumentError, "API token not defined!" unless @api_token

  @proxy_url = proxy_url
  @messages = []
  @clear_messages = true
  @read_timeout = nil
end

Instance Attribute Details

#clear_messagesObject

:nodoc:



19
20
21
# File 'lib/mprofi_api_client/connector.rb', line 19

def clear_messages
  @clear_messages
end

#messagesObject (readonly)

Returns the value of attribute messages.



18
19
20
# File 'lib/mprofi_api_client/connector.rb', line 18

def messages
  @messages
end

Instance Method Details

#add_message(recipient, message, reference = nil, options = {}) ⇒ Object

Add one message to message queue.

recipient

Message recipient as string (phone number format: XXXXXXXXX f.e. 664400100).

message

Message content as string.

reference

Client message ID defined by user for message tracking. (optional)

options

Message options: encoding (default: {}): :encoding - set to ‘utf-8’ if you need special characters (diacritical marks, emoji), :date - time the message will be sent (accepted formats: ISO-8601, unix epoch)

Raises:

  • (ArgumentError)


40
41
42
43
44
45
46
47
48
49
50
# File 'lib/mprofi_api_client/connector.rb', line 40

def add_message(recipient, message, reference = nil, options = {})
  raise ArgumentError, "`recipient` cannot be empty" if recipient.nil? || recipient.empty?
  raise ArgumentError, "`message` cannot be empty" if message.nil? || message.empty?

  message = { 'recipient' =>  recipient, 'message' => message }
  message['reference'] = reference if reference
  message['encoding'] = options[:encoding] if options.key?(:encoding)
  message['date'] = options[:date] if options.key?(:date)

  @messages << message
end

#get_status(msg_id) ⇒ Object

Check status of message with given id

msg_id

message id

raises

MprofiNotFound - if message id not found

Raises:

  • (ArgumentError)


80
81
82
83
84
85
86
87
# File 'lib/mprofi_api_client/connector.rb', line 80

def get_status(msg_id)
  raise ArgumentError, '`msg_id` cannot be nil' if msg_id.nil?

  request = create_request('status', :get, "id=#{msg_id}")
  result = send_request(request)

  return result
end

#read_timeout=(timeout) ⇒ Object

Set read timeout timeout - number of seconds



91
92
93
# File 'lib/mprofi_api_client/connector.rb', line 91

def read_timeout=(timeout)
  @read_timeout = timeout
end

#sendObject

Send messages stored in message queue.

raises

MprofiAuthError, MprofiNotFoundError, MprofiConnectionError

Raises:

  • (StandardError)


54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/mprofi_api_client/connector.rb', line 54

def send
  raise StandardError, 'Empty payload. Please use `add_message` first.' unless @messages.size > 0

  if send_bulk?
    operation = 'sendbulk'
    payload = { 'messages' => @messages }
  else
    operation = 'send'
    payload = @messages.first
  end

  request = create_request(operation, :post, payload.to_json)
  result = send_request(request)
  @messages.clear if @clear_messages

  if result.has_key?('result')
    return result['result']
  else
    return [result]
  end
end