require File.join(File.dirname(__FILE__), 'direct_sms') # An example abstraction using the DirectSMS gateway # # Configure from environment.rb like so: # # SmsGateway.username = "someuser" # SmsGateway.password = "somepass" # SmsGateway.outgoing_sms_number = "+611112222" # # and then use from a controller like so: # # class SmsController < ApplicationController # def send_message # SmsGateway.connect do |gateway| # gateway.deliver_sms "+6112331232", "Hello!" # end # end # end # # You can also test deliveries by setting @test_deliveries@: # # class SmsControllerTest < Test::Unit::TestCase # def setup # @controller = SmsController.new # @request = ActionController::TestRequest.new # @response = ActionController::TestResponse.new # # SmsGateway.test_deliveries = true # SmsGateway.deliveries = [] # end # # def test_should_send_a_message # post :send_message # assert_equal 1, SmsGateway.deliveries.length # message = SmsGateway.deliveries.first # assert_equal "+6112331232", message.to # assert_equal "+611112222", message.from # assert_equal "Hello!", message.message # end # end class SmsGateway class << self attr_accessor :username, :password, :outgoing_sms_number attr_accessor :test_deliveries, :deliveries end self.test_deliveries = false self.deliveries = [] class Delivery < Struct.new(:to, :from, :message); end def self.connect gateway = gateway.connect unless testing? yield gateway gateway.disconnect unless testing? end def self.create_gateway DirectSMS::Gateway.new(username, password) end def initialize(gateway=self.class.create_gateway) @gateway = gateway end def connect @gateway.connect end def disconnect @gateway.disconnect end def deliver_sms(number, body) if self.class.test_deliveries self.class.deliveries << Delivery.new(number, self.class.outgoing_sms_number, body) else @gateway.send_branded_message(number, self.class.outgoing_sms_number, body) end end # Your own domain specific deliver_ methods end