Class: BallouSmsGateway

Inherits:
Object
  • Object
show all
Defined in:
lib/ballou_sms_gateway.rb

Instance Method Summary collapse

Constructor Details

#initializeBallouSmsGateway

Returns a new instance of BallouSmsGateway.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ballou_sms_gateway.rb', line 13

def initialize
  # 
  # @UN Username
  # @PW Password
  # @O Sender
  # @RI Request id
  # @CR SMS id
  # @D Receiver
  # @LONGSMS Is this a long sms?
  # @M Message
  #
  @url = %w{
    http://sms2.ballou.se/http/get/SendSms.php?
    UN=%s&
    PW=%s&
    CR=%s&
    RI=%s&
    O=%s&
    D=%s&
    LONGSMS=%s&
    M=%s
  }.join
  
  @id            = UUID.new.generate
  @long          = false
  @request_id    = UUID.new.generate
  @error_message = nil
end

Instance Method Details

#from(sender) ⇒ Object

Returns BallouSmsGateway.

Returns:

  • BallouSmsGateway



110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'lib/ballou_sms_gateway.rb', line 110

def from(sender)
  if sender.to_s.length.zero?
    raise "Sender is invalid, to short."
  end
  
  # Max length 15 for integers and 10 for chars 
  if sender.match(/^[0-9]+$/)
    if  sender.length > 15
      raise "Sender is invalid, to long."
    end
  elsif sender.length > 10
    raise "Sender is invalid, to long."
  end
  
  @from = sender
  return self
end

#longObject



42
43
44
# File 'lib/ballou_sms_gateway.rb', line 42

def long
  tap { @long = true }
end

#send!Object

Sends the message. Raises error if message is to long or if @send and @from isn’t set.



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/ballou_sms_gateway.rb', line 49

def send!
  if @message.length > 160 and not @long
    raise "Message is to long, #{@message.length} characters."
  end
  
  [:from, :to, :password, :username].each do |method|
    var = instance_variable_get("@#{method}")
    unless var
      raise "You need to specify #{method}, using the ##{method} method."
    end
  end
  
  defaults = {
    sms_id: @id,
    request_id: @request_id
  }
  
  doc = Nokogiri::XML(do_request!)
  if response = doc.at_css("response message")
    BallouSmsGatewayModule::Request.new({
      id: response.attr("id"),
      message: response.text,
      to: response.attr("to_msisdn"), 
      status: response.attr("status"), 
      error: response.attr("error")
    }.merge(defaults))
  elsif response = doc.at_css("ballou_sms_response error")
    BallouSmsGatewayModule::Request.new({
      to: @to,
      status: -2,
      error: response.attr("code"),
      message: response.text,
    }.merge(defaults))
  else
    BallouSmsGatewayModule::Request.new({
      to: @to,
      status: -2,
      error: 7,
      message: @error_message
    }.merge(defaults))
  end
end

#to(*receivers) ⇒ Object

Returns BallouSmsGateway.

Returns:

  • BallouSmsGateway



95
96
97
98
99
100
101
102
103
104
# File 'lib/ballou_sms_gateway.rb', line 95

def to(*receivers)
  receivers.flatten.each do |number|
    unless number.to_s.match(/^\+?[0-9]{4,}$/)
      raise "Invalid receiver."
    end
  end
  
  @to = receivers.flatten.join(",")
  return self
end