summaryrefslogtreecommitdiffstats
path: root/lib/sms_fu
diff options
context:
space:
mode:
authorBrendan G. Lim2010-08-29 14:18:45 -0500
committerBrendan G. Lim2010-08-29 14:18:45 -0500
commita32865aef001a833cb0d9538e652bd7335180a0c (patch)
tree6d693f888b1967b37ce0d66d1982a36a15c48423 /lib/sms_fu
parent04364348aaab21cfed81df492c37d8e7a00097c7 (diff)
downloadsms-fu-a32865aef001a833cb0d9538e652bd7335180a0c.tar.bz2
Updating to 1.1.1
Diffstat (limited to 'lib/sms_fu')
-rw-r--r--lib/sms_fu/sms_fu.rb160
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