class ActionSmser::Base

Constants

SMS_DOUBLE_CHARS

en.wikipedia.org/wiki/GSM_03.38 , some chars takes 2 spaces

Attributes

body[RW]

INSTANCE METHODS

delivery_info[RW]

Delivery methods can use this to save data for debugging, e.g. http responses etc

delivery_options[RW]

Initialized to duplicate of ActionSmser.delivery_options

delivery_reports[RW]
from[RW]

INSTANCE METHODS

re_delivery_of_delivery_report_id[RW]

INSTANCE METHODS

sms_type[RW]

INSTANCE METHODS

to[RW]

INSTANCE METHODS

ttl[RW]

INSTANCE METHODS

Public Class Methods

message_real_cropped(message, max_length = 159) click to toggle source

Make sure that double chars are taken account

# File lib/action_smser/base.rb, line 26
def message_real_cropped(message, max_length = 159)
  result = ""
  length = 0
  message.to_s.chars.each do |char|
    length += SMS_DOUBLE_CHARS.include?(char) ? 2 : 1
    result << char if length <= max_length
  end
  result
end
message_real_length(message) click to toggle source
# File lib/action_smser/base.rb, line 20
def message_real_length(message)
  i = 0
  message.to_s.chars.each do |char| i += SMS_DOUBLE_CHARS.include?(char) ? 2 : 1 end
  i
end
new(method_name = 'no_name_given', *args) click to toggle source

Called from class.method_missing with own_sms_message when you call OwnMailer.own_sms_message

# File lib/action_smser/base.rb, line 55
def initialize(method_name = 'no_name_given', *args)
  @delivery_options = {}
  ActionSmser.delivery_options.each do |key,value|
    value = value.dup if value.is_a?(Hash) || value.is_a?(Array)
    @delivery_options[key] = value
  end
  @valid = true
  @sms_action = method_name
  @sms_type = "#{self.class}.#{@sms_action}"
  send method_name, *args if respond_to?(method_name)
end

Public Instance Methods

body_encoded_escaped(to = 'ISO-8859-15') click to toggle source

Most of the gateways want escaped and ISO encoded messages Also make sure that its max 500 chars long

# File lib/action_smser/base.rb, line 104
def body_encoded_escaped(to = 'ISO-8859-15')
  msg = body.first(500)

  # This could use better translittering with fallback param, see http://blog.segment7.net/2010/12/17/from-iconv-iconv-to-string-encode
  msg_encoded = msg.encode(to, :invalid => :replace, :undef => :replace, :replace => '_')
  CGI.escape(msg_encoded)
end
body_escaped() click to toggle source
# File lib/action_smser/base.rb, line 112
def body_escaped
  CGI.escape(body.to_s.first(500))
end
deliver() click to toggle source
# File lib/action_smser/base.rb, line 88
def deliver
  self.send(:before_delivery) if self.respond_to?(:before_delivery)

  return false unless valid?

  ActionSmser::Logger.info "Sending sms - Delivery_method: #{delivery_options[:delivery_method]} -  Sms: (#{self.to_s})"

  response = delivery_method.deliver(self)

  self.send(:after_delivery, response) if self.respond_to?(:after_delivery)

  response
end
delivery_method() click to toggle source
# File lib/action_smser/base.rb, line 83
def delivery_method
  ActionSmser::DeliveryMethods.const_get(delivery_options[:delivery_method].to_s.downcase.camelize)
end
from_encoded() click to toggle source
# File lib/action_smser/base.rb, line 134
def from_encoded
  from.to_s.gsub(/^(\+|0)/, "")
end
from_escaped() click to toggle source
# File lib/action_smser/base.rb, line 138
def from_escaped
  CGI.escape from_encoded
end
sms(options) click to toggle source

Main method for creating sms infos

# File lib/action_smser/base.rb, line 68
def sms(options)
  @body = options[:body]
  @to = options[:to]
  @from = options[:from]
  self
end
to_as_array() click to toggle source
# File lib/action_smser/base.rb, line 126
def to_as_array
  @to.is_a?(Array) ? @to : [@to]
end
to_encoded() click to toggle source
# File lib/action_smser/base.rb, line 130
def to_encoded
  to_numbers_array.join(",")
end
to_numbers_array() click to toggle source

make sure that to is an array and remove leading '+' or '0' chars

# File lib/action_smser/base.rb, line 117
def to_numbers_array
  array = if @to.is_a?(Array)
    @to.collect{|number| number.to_s}
  else
    [@to.to_s]
  end
  array.collect{|number| number.gsub(/^(\+|0{1,2})/, "")}
end
to_s() click to toggle source
# File lib/action_smser/base.rb, line 75
def to_s
  "Sms #{sms_type} - From: #{from.inspect}, To: #{to.inspect}, Body: #{body.inspect}, Valid: #{@valid}"
end
ttl_to_i() click to toggle source
# File lib/action_smser/base.rb, line 142
def ttl_to_i
  ttl.blank? ? ActionSmser.delivery_options[:default_ttl] : ttl.to_i
end
valid?() click to toggle source
# File lib/action_smser/base.rb, line 79
def valid?
  !body.blank? && !from.blank? && !to_numbers_array.collect{|number| number.to_s.blank? ? nil : true}.compact.blank?
end