routo 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/routo.rb +46 -0
- data/lib/routo/exception.rb +12 -0
- data/lib/routo/exception/auth_failed.rb +7 -0
- data/lib/routo/exception/bad_operator.rb +7 -0
- data/lib/routo/exception/error.rb +7 -0
- data/lib/routo/exception/failed.rb +7 -0
- data/lib/routo/exception/no_credits_left.rb +11 -0
- data/lib/routo/exception/no_message.rb +7 -0
- data/lib/routo/exception/not_allowed.rb +7 -0
- data/lib/routo/exception/system_error.rb +7 -0
- data/lib/routo/exception/too_long.rb +7 -0
- data/lib/routo/exception/too_many_numbers.rb +7 -0
- data/lib/routo/exception/wrong_format.rb +7 -0
- data/lib/routo/exception/wrong_message.rb +7 -0
- data/lib/routo/exception/wrong_number.rb +7 -0
- data/lib/routo/exception/wrong_type.rb +7 -0
- data/lib/routo/message.rb +70 -0
- data/lib/routo/number.rb +13 -0
- metadata +83 -0
data/lib/routo.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'routo/exception'
|
2
|
+
require 'routo/number'
|
3
|
+
require 'routo/message'
|
4
|
+
require 'pony'
|
5
|
+
module Routo
|
6
|
+
mattr_accessor :username
|
7
|
+
@@username = ""
|
8
|
+
mattr_accessor :password
|
9
|
+
@@password = ""
|
10
|
+
mattr_accessor :http_api_url
|
11
|
+
@@http_api_url = "http://smsc5.routotelecom.com/SMSsend"
|
12
|
+
mattr_accessor :http_api_url_backup
|
13
|
+
@@http_api_url_backup = "http://smsc56.routotelecom.com/SMSsend"
|
14
|
+
mattr_accessor :ownnum
|
15
|
+
mattr_accessor :type
|
16
|
+
mattr_accessor :delivery
|
17
|
+
@@delivery = 0
|
18
|
+
|
19
|
+
# Email Options
|
20
|
+
# config.email : recipient for the email notifications (default: nil)
|
21
|
+
# config.email_options : Hash with email config (smtp, sendmail, ...). We use the Pony gem to send mails, this hash will be send to Pony.options
|
22
|
+
# config.seconds_between_mails : Minimum time (in seconds) between 2 mails with the same subject
|
23
|
+
mattr_accessor :email
|
24
|
+
mattr_accessor :email_options
|
25
|
+
@@email_options = {}
|
26
|
+
mattr_accessor :seconds_between_mails
|
27
|
+
@@seconds_between_mails = 600
|
28
|
+
|
29
|
+
mattr_accessor :no_credits_left
|
30
|
+
@@no_credits_left = {:subject => 'Routo Messaging: no credits left', :body => 'You do not have any credit left on Routo messaging. You should buy some more credits in order to be able to send more SMS.'}
|
31
|
+
mattr_accessor :no_credits_left_sent_at
|
32
|
+
|
33
|
+
mattr_accessor :using_backup_url
|
34
|
+
@@using_backup_url = {:subject => 'Routo Messaging: using backup url', :body => 'The primary Routo Messaging http API url was not responding correctly. We tried the backup API.'}
|
35
|
+
mattr_accessor :using_backup_url_sent_at
|
36
|
+
|
37
|
+
def self.config
|
38
|
+
yield self
|
39
|
+
Pony.options = @@email_options
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.send_sms msg, *numbers
|
43
|
+
Message.new(msg).send_sms(*numbers)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Routo
|
2
|
+
module Exception
|
3
|
+
class NoCreditsLeft < Base
|
4
|
+
def initialize msg
|
5
|
+
super(msg)
|
6
|
+
Pony.mail(:to => Routo.email, :subject => Routo.no_credits_left[:subject], :body => Routo.no_credits_left[:body]) if Routo.email && Routo.no_credits_left.present? && Routo.no_credits_left_sent_at.to_i<(Time.now.to_i-Routo.seconds_between_mails)
|
7
|
+
Routo.no_credits_left_sent_at = Time.now
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Routo
|
2
|
+
|
3
|
+
class Message
|
4
|
+
|
5
|
+
attr_accessor :text
|
6
|
+
|
7
|
+
def initialize text
|
8
|
+
@text = text
|
9
|
+
generate_mess_id
|
10
|
+
end
|
11
|
+
|
12
|
+
def send_sms *numbers
|
13
|
+
options = numbers.last.is_a?(Hash) ? numbers.last : {}
|
14
|
+
recipients = numbers.map{|n| Number.new(n)}
|
15
|
+
begin
|
16
|
+
parse_response(Net::HTTP.post_form(URI.parse(Routo.http_api_url), params(*recipients, options)))
|
17
|
+
rescue Routo::Exception::SystemError, Routo::Exception::Failed # trying with backup url if Routo returns an internal error
|
18
|
+
begin # here a mail error should not prevent the sms to be send
|
19
|
+
Pony.mail(:to => Routo.email, :subject => Routo.using_backup_url[:subject], :body => Routo.using_backup_url[:body]) if Routo.email && Routo.using_backup_url.present? && Routo.using_backup_url_sent_at.to_i<(Time.now.to_i-Routo.seconds_between_mails)
|
20
|
+
Routo.using_backup_url_sent_at = Time.now
|
21
|
+
ensure
|
22
|
+
parse_response(Net::HTTP.post_form(URI.parse(Routo.http_api_url_backup), params(*recipients, options)))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def params *number_objects, options
|
30
|
+
{:user => Routo.username,
|
31
|
+
:pass => URI.encode(Routo.password),
|
32
|
+
:number => number_objects.map(&:number).join(','),
|
33
|
+
:ownnum => Routo.ownnum,
|
34
|
+
:message => URI.encode(@text),
|
35
|
+
:type => Routo.type,
|
36
|
+
:delivery => Routo.delivery,
|
37
|
+
:mess_id => @mess_id}.merge(options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def generate_mess_id
|
41
|
+
chars = ("A".."Z").to_a + ("0".."9").to_a
|
42
|
+
@mess_id = Array.new(30){||chars[rand(chars.size)]}.join
|
43
|
+
end
|
44
|
+
|
45
|
+
def parse_response rep
|
46
|
+
Rails.logger.debug "body: "+rep.body.inspect
|
47
|
+
Rails.logger.debug "msg: "+rep.message.inspect
|
48
|
+
case rep.body
|
49
|
+
when /success/i then return true
|
50
|
+
when /error/i then raise Routo::Exception::Error.new(rep.body)
|
51
|
+
when /auth_failed/i then raise Routo::Exception::AuthFailed.new(rep.body)
|
52
|
+
when /wrong_number/i then raise Routo::Exception::WrongNumber.new(rep.body)
|
53
|
+
when /not_allowed/i then raise Routo::Exception::NotAllowed.new(rep.body)
|
54
|
+
when /too_many_numbers/i then raise Routo::Exception::TooManyNumbers.new(rep.body)
|
55
|
+
when /no_message/i then raise Routo::Exception::NoMessage.new(rep.body)
|
56
|
+
when /too_long/i then raise Routo::Exception::TooLong.new(rep.body)
|
57
|
+
when /wrong_type/i then raise Routo::Exception::WrongType.new(rep.body)
|
58
|
+
when /wrong_message/i then raise Routo::Exception::WrongMessage.new(rep.body)
|
59
|
+
when /wrong_format/i then raise Routo::Exception::WrongFormat.new(rep.body)
|
60
|
+
when /bad_operator/i then raise Routo::Exception::BadOperator.new(rep.body)
|
61
|
+
when /failed/i then raise Routo::Exception::Failed.new(rep.body)
|
62
|
+
when /sys_error/i then raise Routo::Exception::SystemError.new(rep.body)
|
63
|
+
when /no credits left/i then raise Routo::Exception::NoCreditsLeft.new(rep.body)
|
64
|
+
else raise Routo::Exception::Base.new(rep.body)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
data/lib/routo/number.rb
ADDED
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: routo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.2
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Adrien Rambert
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-03-22 00:00:00 +01:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: pony
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 1.0.0
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
description: Sending sms with Routo Messaging HTTP API.
|
28
|
+
email: arambert@weboglobin.com
|
29
|
+
executables: []
|
30
|
+
|
31
|
+
extensions: []
|
32
|
+
|
33
|
+
extra_rdoc_files: []
|
34
|
+
|
35
|
+
files:
|
36
|
+
- lib/routo/exception/auth_failed.rb
|
37
|
+
- lib/routo/exception/bad_operator.rb
|
38
|
+
- lib/routo/exception/error.rb
|
39
|
+
- lib/routo/exception/failed.rb
|
40
|
+
- lib/routo/exception/no_credits_left.rb
|
41
|
+
- lib/routo/exception/no_message.rb
|
42
|
+
- lib/routo/exception/not_allowed.rb
|
43
|
+
- lib/routo/exception/system_error.rb
|
44
|
+
- lib/routo/exception/too_long.rb
|
45
|
+
- lib/routo/exception/too_many_numbers.rb
|
46
|
+
- lib/routo/exception/wrong_format.rb
|
47
|
+
- lib/routo/exception/wrong_message.rb
|
48
|
+
- lib/routo/exception/wrong_number.rb
|
49
|
+
- lib/routo/exception/wrong_type.rb
|
50
|
+
- lib/routo/exception.rb
|
51
|
+
- lib/routo/message.rb
|
52
|
+
- lib/routo/number.rb
|
53
|
+
- lib/routo.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://www.weboglobin.com
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.8.7
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.3.6
|
75
|
+
requirements:
|
76
|
+
- none
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.5.0
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Sending sms with Routo Messaging.
|
82
|
+
test_files: []
|
83
|
+
|