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.



12
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
# File 'lib/ballou_sms_gateway.rb', line 12

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



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

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



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

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.



48
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
# File 'lib/ballou_sms_gateway.rb', line 48

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



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

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