module MultiSms

Constants

VERSION

Attributes

config[RW]

Public Class Methods

execute(base_url, method, path, parameters, headers={ accept: :json}, &block) click to toggle source

Wrapper around RestClient::RestClient.execute

  • Sets accept header to json

  • Handles some exceptions

# File lib/multi_sms.rb, line 93
def execute(base_url, method, path, parameters, headers={ accept: :json}, &block)

  # Warn if the from string will be capped by the sms gateway
  if parameters[:from] && parameters[:from].match(/^(\w{11,})$/)
    warn "SMS 'from' value #{parameters[:from]} will be capped at 11 chars"
  end
  payload = {}.merge(parameters)
  url = base_url + path
  RestClient::Request.execute(:method => method, :url => url, :payload => payload, :headers => headers, &block)
rescue RestClient::Unauthorized
  raise AuthError, "Authentication failed"
rescue RestClient::InternalServerError
  raise ServerError, "Server error"
rescue RestClient::Forbidden => e
  raise BadRequest, e.http_body
end
get(base_url, path, parameters = {}) click to toggle source

Wrapper for MultiSms.execute(:get)

# File lib/multi_sms.rb, line 79
def get(base_url, path, parameters = {})
  execute(base_url, :get, path, parameters)
end
get_provider(country_code) click to toggle source
# File lib/multi_sms.rb, line 70
def get_provider(country_code)
  name = config.providers[country_code.to_s]
  name = config.default_provider unless name.instance_of?(String)

  provider = "Providers::#{name}".split('::').inject(Object) {|o,c| o.const_get c}
  provider.new
end
logger() click to toggle source
# File lib/multi_sms.rb, line 62
def logger
  @logger ||= begin
    log = Logger.new($stdout)
    log.level = Logger::INFO
    log
  end
end
parse_json(body) click to toggle source

Wrapper around MultiJson.load, symbolize names

# File lib/multi_sms.rb, line 111
def parse_json(body)
  MultiJson.load(body, :symbolize_keys => true)
rescue MultiJson::DecodeError
  raise BadResponse, "Can't parse JSON"
end
post(base_url, path, parameters = {}) click to toggle source

Wrapper for MultiSms::execute(:post)

# File lib/multi_sms.rb, line 84
def post(base_url, path, parameters = {})
  execute(base_url, :post, path, parameters)
end
providers() click to toggle source

Responds with all the currently supported providers

# File lib/multi_sms.rb, line 35
def providers
  %W(Clickatell Elk Twilio)
end
send(country_code, parameters) click to toggle source
# File lib/multi_sms.rb, line 54
def send(country_code, parameters)
  raise ConfigError, "MultiSms needs a default provider configured." unless config.default_provider.instance_of?(String)
  verify_parameters(parameters, [:from, :message, :to])

  provider = get_provider country_code
  provider.send(parameters)
end