Sha256: e13d4289d28c64ec263f63d83385b5acce6a7b57a0e541307b14d63207486591

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

require 'active_support'
require 'rest_client'
require 'json'

module Moonshado
  class Sms
    cattr_accessor :config
    attr_accessor :number, :message

    def self.url
      @url ||= URI.parse(config[:sms_api_url])
      "#{@url.scheme}://#{@url.user}:#{@url.password}@#{@url.host}:#{@url.port}/sms"
    end

    def self.find(id)
      if config[:test_env] == true
        {:sms => {:id => id, :reports => '[{"update_date":"2010-01-03T22:56:45-08:00","status_info":"test"}]'}, :stat => "ok"}
      else
        response = RestClient.get("#{url}/#{id}")
        JSON.parse(response.body)
      end
    end

    def initialize(number = "", message = "")
      @number = number
      @message = message
    end

    def deliver_sms
      raise MoonshadoSMSException.new("Invalid message") unless is_message_valid?(@message)

      if config[:test_env] == true
        {:stat => 'ok', :id => Digest::SHA1.hexdigest(Time.now.to_s + rand(12341234).to_s)[1..16]}
      else
        response = RestClient.post(
          Moonshado::Sms.url,
          {:sms => {:device_address => format_number(@number), :message => @message}}
        )

        JSON.parse(response.body)
      end
    rescue MoonshadoSMSException => exception
      raise exception
    end

    def format_number(number)
      formatted = number.gsub("-","").strip
      return is_number_valid?(formatted) ? formatted : (raise MoonshadoSMSException.new("Phone number (#{number}) is not formatted correctly"))
    end

    def is_number_valid?(number)
      number.length >= 11 && number[/^.\d+$/]
    end

    def is_message_valid?(message)
      message.size <= 115 && !message.nil? && message.is_a?(String) && !message.empty?
    end

    class MoonshadoSMSException < StandardError; end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
moonshado-sms-0.3.1 lib/moonshado/sms.rb