Sha256: ce298486312fb477372f4d3daa1c328eea94d76bc561338fa4387b679d8f93ba

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

require "net/http"
require "bigdecimal/util"
require "active_sms"

class ActiveSMS::Backend::Smsru < ActiveSMS::Backend::Base
  API_URL = "http://sms.ru/sms/send".freeze
  API_STATUS_CODE = {
    success: 100
  }.freeze

  def initialize(params = {})
    @api_id = params.delete(:api_id)
    validate_api_id
  end

  def send_sms(phone, sms_text)
    response = request_api(to: phone, text: sms_text)
    data = parse(response)

    case data[:status]
    when API_STATUS_CODE[:success]
      respond_with_status :success
    else
      respond_with_status "unhandled_status_#{data[:status]}".to_sym
    end
  end

  private

  def validate_api_id
    raise ArgumentError, "Your api_id is not set" if @api_id.nil?

    return if @api_id =~ /\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/
    raise ArgumentError, "Your api_id has invalid format"
  end

  def request_api(params = {})
    params = params.merge(api_id: @api_id)
    Net::HTTP.post_form(URI.parse(API_URL), params).body
  end

  def parse(response)
    status, sms_id, balance = response.strip.split("\n")
    status = status.to_i
    balance = balance.split("=").last.to_d if balance

    response = { status: status }
    response[:balance] = balance if balance
    response[:sms_id]  = sms_id if sms_id
    response
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_sms-backend-smsru-0.0.2 lib/active_sms/backend/smsru.rb