diff options
| author | Brendan G. Lim | 2010-08-29 14:18:45 -0500 |
|---|---|---|
| committer | Brendan G. Lim | 2010-08-29 14:18:45 -0500 |
| commit | a32865aef001a833cb0d9538e652bd7335180a0c (patch) | |
| tree | 6d693f888b1967b37ce0d66d1982a36a15c48423 /lib/sms_fu/sms_fu.rb | |
| parent | 04364348aaab21cfed81df492c37d8e7a00097c7 (diff) | |
| download | sms-fu-a32865aef001a833cb0d9538e652bd7335180a0c.tar.bz2 | |
Updating to 1.1.1
Diffstat (limited to 'lib/sms_fu/sms_fu.rb')
| -rw-r--r-- | lib/sms_fu/sms_fu.rb | 160 |
1 files changed, 92 insertions, 68 deletions
diff --git a/lib/sms_fu/sms_fu.rb b/lib/sms_fu/sms_fu.rb index 82af796..3168cd1 100644 --- a/lib/sms_fu/sms_fu.rb +++ b/lib/sms_fu/sms_fu.rb @@ -1,88 +1,112 @@ -class SMSFu - DELIVERY_OPTIONS = [:action_mailer, :pony] - - def self.configure(delivery, options = {}) - new(options.merge!(:delivery => delivery.to_sym)) - end +module SMSFu + class Client + DELIVERY_METHODS = [:action_mailer, :pony] + attr_accessor :delivery, :pony_config - def initialize(options = {}) - raise_exception("Delivery options can only be: '#{DELIVERY_OPTIONS.join(", ")}'") unless DELIVERY_OPTIONS.include?(options[:delivery]) - if options[:delivery] == :pony && (options[:pony_options][:via].to_sym != :sendmail && !options[:pony_options].has_key?(:via_options)) - raise_exception("Missing Pony configuration options") + # Sets up a new SMSFu::Client. Allows for use of ActionMailer or + # Pony for e-mail delivery. Pony requires :pony_config to be + # defined to work properly. + # + # * ActionMailer 3 + # sms_fu = SMSFu::Client.configure(:delivery => :action_mailer) + # + # * Pony 1.0 + # sms_fu = SMSFu::Client.configure(:delivery => :pony, + # :pony_config => { :via => :sendmail }) + # + def self.configure(opts = {}) + new(opts) end - - @@mail_config = { :delivery => options[:delivery].to_sym, :pony_options => options[:pony_options] } - @@yaml_config = YAML::load(options[:yaml_config] ? options[:yaml_config] : File.open("#{template_directory}/sms_fu.yml")) - end - - def from_address - @@yaml_config['config']['from_address'] - end - def carriers - @@yaml_config['carriers'] - end + def initialize(opts = {}) + self.delivery = opts[:delivery].to_sym + self.pony_config = opts[:pony_config] + raise SMSFuException.new("Pony configuration required") if @delivery == :pony && @pony_config.nil? + end - def carrier_name(key) - carrier(key)['name'] + def delivery=(new_delivery) + if DELIVERY_METHODS.include?(new_delivery.to_sym) + @delivery = new_delivery + else + raise SMSFuException.new("Delivery options can only be: '#{DELIVERY_METHODS.join(", ")}'") + end + end + + # Delivers the SMS message in the form of an e-mail + # sms_fu.deliver("1234567890","at&t","hello world") + def deliver(number, carrier, message, options = {}) + raise SMSFuException.new("Can't deliver blank message to #{format_number(number)}") if message.nil? || message.empty? + + limit = options[:limit] || message.length + from = options[:from] || from_address + message = message[0..limit-1] + email = SMSFu.sms_address(number,carrier) + + if @delivery == :pony + Pony.mail({:to => email, :body => message, :from => from}.merge!(@pony_config)) + else + SMSNotifier.send_sms(email, message, from).deliver + end + end end - def carrier_email(key) - carrier(key.downcase)['value'] - end + class << self + def config_yaml + @@config_yaml ||= YAML::load(File.open("#{template_directory}/sms_fu.yml")) + end - def carrier(key) - raise_exception("Carrier (#{key}) is not supported") unless carriers.has_key?(key.downcase) - carriers[key] - end + # Returns back a list of all carriers + # SMSFu.carriers + def carriers + config_yaml['carriers'] + end + + def from_address + config_yaml['config']['from_address'] + end - def deliver(number, carrier, message, options = {}) - raise_exception("Can't deliver blank message to #{format_number(number)}") if message.nil? or message.empty? - limit = options[:limit] || message.length - from = options[:from] || from_address - message = message[0..limit-1] - email = sms_address(number,carrier) + def carrier_name(key) + carrier(key)['name'] + end - if @@mail_config[:delivery] == :pony - Pony.mail(:to => email, - :body => message, - :from => from, - :via => @@mail_config[:pony_options][:via], - :via_options => @@mail_config[:pony_options][:via_options]) - else - SMSNotifier.send_sms(email, message, from).deliver + def carrier_email(key) + carrier(key.downcase)['value'] + end + + def carrier(key) + raise SMSFuException.new("Carrier (#{key}) is not supported") unless SMSFu.carriers.has_key?(key.downcase) + carriers[key] end - end - def sms_address(number,carrier) - format_number(number) + carrier_email(carrier.downcase) - end + # Returns back a properly formatted SMS e-mail address + # SMSFu.sms_address("1234567890","at&t") + def sms_address(number,carrier) + raise SMSFuException.new("Missing number or carrier") if number.nil? || carrier.nil? + format_number(number) + carrier_email(carrier.downcase) + end - protected + protected - def format_number(number) - stripped = number.gsub("-","").strip - formatted = (stripped.length == 11 && stripped[0,1] == "1") ? stripped[1..stripped.length] : stripped - raise_exception("Number (#{number}) is not formatted correctly") unless valid_number?(formatted) - formatted - end + def format_number(number) + stripped = number.gsub("-","").strip + formatted = (stripped.length == 11 && stripped[0,1] == "1") ? stripped[1..stripped.length] : stripped + raise SMSFuException.new("Number (#{number}) is not formatted correctly") unless valid_number?(formatted) + formatted + end - def valid_number?(number) - number.length >= 10 && number[/^.\d+$/] - end + def valid_number?(number) + number.length >= 10 && number[/^.\d+$/] + end - def template_directory - directory = defined?(Rails) ? "#{RAILS_ROOT}/config" : "#{File.dirname(__FILE__)}/../../templates" - if (defined?(Rails) && Rails.env == 'test') || (defined?(RAILS_ENV) && RAILS_ENV == 'test)') - "#{File.dirname(__FILE__)}/../../templates" - else - directory + def template_directory + directory = defined?(Rails) ? "#{RAILS_ROOT}/config" : "#{File.dirname(__FILE__)}/../../templates" + if (defined?(Rails) && Rails.env == 'test') || (defined?(RAILS_ENV) && RAILS_ENV == 'test)') + "#{File.dirname(__FILE__)}/../../templates" + else + directory + end end end - - def raise_exception(message) - raise SMSFuException.new(message) - end end class SMSFuException < StandardError; end
\ No newline at end of file |
