diff options
| -rw-r--r-- | lib/sms_fu/sms_fu.rb | 160 | ||||
| -rw-r--r-- | sms_fu.gemspec | 9 | ||||
| -rw-r--r-- | views/sms_notifier/sms_message.html.erb | 1 | 
3 files changed, 96 insertions, 74 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 diff --git a/sms_fu.gemspec b/sms_fu.gemspec index d24e0b4..b020457 100644 --- a/sms_fu.gemspec +++ b/sms_fu.gemspec @@ -2,12 +2,12 @@  Gem::Specification.new do |s|    s.name = %q{sms_fu} -  s.version = "1.1.0" +  s.version = "1.1.1"    s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=    s.authors = ["Brendan G. Lim"]    s.date = %q{2010-08-23} -  s.description = %q{sms_fu allows you to send free text messages to a mobile recipient.} +  s.description = %q{SMS Fu allows you to send text messages to a mobile recipient for free.  It leverages ActionMailer or Pony for delivery of text messages through e-mail.}    s.email = %q{brendangl@gmail.com}    s.extra_rdoc_files = [      "README.rdoc" @@ -25,15 +25,14 @@ Gem::Specification.new do |s|       "sms_fu.gemspec",       "tasks/sms_fu_tasks.rake",       "templates/sms_fu.yml", -     "test/sms_fu_test.rb", -     "views/sms_notifier/sms_message.html.erb" +     "test/sms_fu_test.rb"    ]    s.has_rdoc = true    s.homepage = %q{http://github.com/brendanlim/sms-fu}    s.rdoc_options = ["--charset=UTF-8"]    s.require_paths = ["lib"]    s.rubygems_version = %q{1.3.1} -  s.summary = %q{sms_fu allows you to send free text messages to a mobile recipient using an e-mail to sms gateway.} +  s.summary = %q{sms_fu allows you to send free text messages to a mobile recipient.}    s.test_files = [      "test/sms_fu_test.rb"    ] diff --git a/views/sms_notifier/sms_message.html.erb b/views/sms_notifier/sms_message.html.erb deleted file mode 100644 index 17a3d7c..0000000 --- a/views/sms_notifier/sms_message.html.erb +++ /dev/null @@ -1 +0,0 @@ -<%= @message %>
\ No newline at end of file | 
