class SmsActivate::Client

Constants

STATUSES

Sets the status of the activation

Public Class Methods

new(api_key) click to toggle source

Initializes a new SmsActivate Client

@param [String] api_key The API key, can be obtained at

http://sms-activate.ru/index.php?act=profile
# File lib/sms_activate/client.rb, line 13
def initialize(api_key)
  @options = { query: { api_key: api_key } }
end

Public Instance Methods

get_activation_status(id) click to toggle source

Returns the activation status

@example

SmsActivate::Client.new('key').get_activation_status(42)
=> OpenStruct status=:success code="12345"
# File lib/sms_activate/client.rb, line 105
def get_activation_status(id)
  response = self.class.get('/', query: { action: 'getStatus', id: id }.merge(@options[:query]))

  check_errors! response
  case response.parsed_response
    when 'STATUS_WAIT_CODE'
      OpenStruct.new(status: :waiting)
    when 'STATUS_WAIT_RESEND'
      OpenStruct.new(status: :waiting_for_resend)
    when 'STATUS_CANCEL'
      OpenStruct.new(status: :cancelled)
    when /STATUS_WAIT_RETRY/
      OpenStruct.new(status: :waiting_for_code_confirmation, lastcode: response.parsed_response.split(':')[1])
    when /STATUS_OK/
      OpenStruct.new(status: :success, code: response.parsed_response.split(':')[1])
    else
      raise ServerError('Bad activation response')
  end
end
get_available_services(full = true) click to toggle source

Returns an amount of available numbers for each service

@param [Boolean] full Whether to include “cost” and “quant” keys

@example

SmsActivate::Client.new('key').get_available_services
=> {"vk_0"=>{"quant"=>"0", "cost"=>10}, ...}

SmsActivate::Client.new('key').get_available_services(false)
=> {"vk_0"=>"0", "ok_0"=>"42", ...}
# File lib/sms_activate/client.rb, line 28
def get_available_services(full = true)
  action = full ? 'getNumbersStatus1' : 'getNumbersStatus'
  response = self.class.get('/', query: { action: action }.merge(@options[:query]))

  check_errors! response
  JSON.parse(response.parsed_response)
end
get_balance() click to toggle source

Returns user’s balance in RUB

@example

SmsActivate::Client.new('key').get_balance
=> 0.0
# File lib/sms_activate/client.rb, line 41
def get_balance
  response = self.class.get('/', query: { action: 'getBalance' }.merge(@options[:query]))

  check_errors! response
  response.parsed_response.split(':')[1].to_f
end
obtain_number(service) click to toggle source

Obtains a number for the given service

@example

SmsActivate::Client.new('key').obtain_number('ya')
=> OpenStruct id=42 number="+1234567890"

TODO: forward, operator

# File lib/sms_activate/client.rb, line 56
def obtain_number(service)
  response = self.class.get('/', query: { action: 'getNumber', service: service }.merge(@options[:query]))
  check_errors! response

  splitted = response.parsed_response.split(':')
  OpenStruct.new(id: splitted[1].to_i, number: splitted[2])
end
set_activation_status(id, status) click to toggle source

@example

SmsActivate::Client.new('key').set_activation_status(42, :sms_sent)
=> OpenStruct status=:confirmed

TODO: forward

# File lib/sms_activate/client.rb, line 80
def set_activation_status(id, status)
  raise BadStatusError unless (status = STATUSES[status])
  response = self.class.get('/', query: { action: 'setStatus', id: id, status: status }.merge(@options[:query]))

  check_errors! response
  case response.parsed_response
    when 'ACCESS_READY'
      OpenStruct.new(status: :confirmed)
    when 'ACCESS_RETRY_GET'
      OpenStruct.new(status: :retrying)
    when 'ACCESS_ACTIVATION'
      OpenStruct.new(status: :activated)
    when 'ACCESS_CANCEL'
      OpenStruct.new(status: :cancelled)
    else
      raise ServerError('Bad activation response')
  end
end

Private Instance Methods

check_errors!(response) click to toggle source
# File lib/sms_activate/client.rb, line 127
def check_errors!(response)
  raise ServerError(response.parsed_response) if response.code != 200

  case response.parsed_response
    when 'NO_KEY'
      raise NoKeyError
    when 'BAD_KEY'
      raise BadKeyError
    when 'NO_ACTION'
      raise NoActionError
    when 'BAD_ACTION'
      raise BadActionError
    when 'ERROR_SQL'
      raise SQLError
    when 'NO_BALANCE'
      raise NoBalanceError
    when 'NO_NUMBERS'
      raise NoNumbersError
    when 'BAD_SERVICE'
      raise BadServiceError
    when 'NO_ACTIVATION'
      raise NoActivationError
    when 'BAD_STATUS'
      raise BadStatusError
    else
  end
end