class Playsms::Client

Attributes

secret[RW]
user[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/playsms.rb, line 14
def initialize(options = {})
  @user = options.fetch(:user) { ENV.fetch('PLAYSMS_USER') }
  @secret = options.fetch(:secret) { ENV.fetch('PLAYSMS_SECRET') }
  @host = options.fetch(:host) { 'http://playsms.example.com' }
  @user_agent = "playsms-ruby/#{VERSION} ruby/#{RUBY_VERSION}"
end

Public Instance Methods

send_message(params) click to toggle source
# File lib/playsms.rb, line 21
def send_message(params)
  post(@host, '/index.php?app=ws&op=pv&', params)
end

Private Instance Methods

delete(host, request_uri) click to toggle source
# File lib/playsms.rb, line 51
def delete(host, request_uri)
  uri = URI(host + request_uri + Params.encode(params.merge(u: @user, h: @secret)))

  message = Net::HTTP::Delete.new(uri.request_uri)

  request(uri, message)
end
get(host, request_uri, params = {}) click to toggle source
# File lib/playsms.rb, line 27
def get(host, request_uri, params = {})
  uri = URI(host + request_uri + Params.encode(params.merge(u: @user, h: @secret)))

  message = Net::HTTP::Get.new(uri.request_uri)

  request(uri, message)
end
post(host, request_uri, params) click to toggle source
# File lib/playsms.rb, line 35
def post(host, request_uri, params)
  uri = URI(host + request_uri + Params.encode(params.merge(u: @user, h: @secret)))

  message = Net::HTTP::Post.new(uri.request_uri)

  request(uri, message)
end
put(host, request_uri, params) click to toggle source
# File lib/playsms.rb, line 43
def put(host, request_uri, params)
  uri = URI(host + request_uri + Params.encode(params.merge(u: @user, h: @secret)))

  message = Net::HTTP::Put.new(uri.request_uri)

  request(uri, message)
end
request(uri, message) click to toggle source
# File lib/playsms.rb, line 59
def request(uri, message)
  http = Net::HTTP.new(uri.host, Net::HTTP.http_default_port)

  message['User-Agent'] = @user_agent

  http_response = http.request(message)

  case http_response
  when Net::HTTPNoContent
    :no_content
  when Net::HTTPSuccess
    if http_response['Content-Type'].split(';').first == 'application/json'
      JSON.parse(http_response.body)
    else
      http_response.body
    end
  when Net::HTTPUnauthorized
    fail AuthenticationError, "#{http_response.code} response from #{uri.host}"
  when Net::HTTPClientError
    fail ClientError, "#{http_response.code} response from #{uri.host}"
  when Net::HTTPServerError
    fail ServerError, "#{http_response.code} response from #{uri.host}"
  else
    fail Error, "#{http_response.code} response from #{uri.host}"
  end
end