smsnger 1.0.0
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/.document +5 -0
- data/.gitignore +21 -0
- data/MIT-LICENSE +21 -0
- data/README.rdoc +97 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/lib/carriers.yml +229 -0
- data/lib/smsnger.rb +115 -0
- data/smsnger.gemspec +54 -0
- data/test/helper.rb +9 -0
- data/test/test_smsnger.rb +20 -0
- metadata +75 -0
data/.document
ADDED
data/.gitignore
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2010 Joel Watson
|
2
|
+
(Large) Portions Copyright (c) 2008 Brendan G. Lim
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
a copy of this software and associated documentation files (the
|
6
|
+
"Software"), to deal in the Software without restriction, including
|
7
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
= SMSnger
|
2
|
+
|
3
|
+
Want to send an SMS from your Ruby application? SMSnger allows you to do just that.
|
4
|
+
It allows you to send a text-message in the form of an e-mail to a cell phone on any
|
5
|
+
of the supported carriers.
|
6
|
+
|
7
|
+
== Supported Carriers (US & International):
|
8
|
+
|
9
|
+
Alltel, Ameritech, AT&T, Bell Atlantic, BellSouth Mobility, Beeline(UA), BlueSkyFrog,
|
10
|
+
Boost Mobile, BPL Mobile, Cellular South, Claro (Brazil, Nicaragua), Comcast, Du,
|
11
|
+
E-Plus, Etisalat, Fido, kajeet, Mobinil, Mobitel, Movistar, Metro PCS, O2, Orange,
|
12
|
+
Powertel, PSC Wireless, Qwest, Rogers, Southern Link, Sprint, Suncom,
|
13
|
+
T-Mobile (US/UK/Germany), Telefonica, Tracfone, Virgin Mobile, Verizon Wireless,
|
14
|
+
Vodafone (UK, Egypt, Italy, Japan, Spain), and many more ...
|
15
|
+
|
16
|
+
== Opt-In Warning for Some International Carriers
|
17
|
+
|
18
|
+
Some International carriers require that their users subscribe to an Email to SMS
|
19
|
+
feature before they are able to receive SMS messages this way. If one your users
|
20
|
+
mentions that they are not receiving their messages, chances are it is due to this
|
21
|
+
limitation.
|
22
|
+
|
23
|
+
Some carriers that need this include, Mobitel, Etisalat, T-Mobile (Netherlands),
|
24
|
+
etc.
|
25
|
+
|
26
|
+
== Setup Instructions
|
27
|
+
|
28
|
+
Add this this one line to the file you want to be able to use SMS Fu in.
|
29
|
+
|
30
|
+
require 'smsnger'
|
31
|
+
|
32
|
+
Once the library is required, you need to run a setup like so:
|
33
|
+
|
34
|
+
SMSnger.setup(:from => "someone@example.com")
|
35
|
+
|
36
|
+
By default sendmail is used, but you can use SMTP as follows:
|
37
|
+
|
38
|
+
SMSnger.setup(
|
39
|
+
:from => "someone@example.com",
|
40
|
+
:mail_via => :smtp,
|
41
|
+
:smtp => {
|
42
|
+
:host => 'smtp.yourserver.com',
|
43
|
+
:port => '25',
|
44
|
+
:user => 'user',
|
45
|
+
:password => 'pass',
|
46
|
+
:auth => :plain, # :plain, :login, :cram_md5, no auth by default
|
47
|
+
:domain => "example.com"
|
48
|
+
}
|
49
|
+
)
|
50
|
+
|
51
|
+
That's it! Now you're good to go.
|
52
|
+
|
53
|
+
== Example Usage
|
54
|
+
|
55
|
+
* You have to send in the phone number, without any non-numeric characters. The
|
56
|
+
phone numbers must be 10 digits in length.
|
57
|
+
* The two required parameters are the phone number and the phone carrier.
|
58
|
+
* Here are some of the default carrier values:
|
59
|
+
|
60
|
+
Alltel Wireless => "alltel"
|
61
|
+
AT&T/Cingular => "at&t"
|
62
|
+
Boost Mobile => "boost"
|
63
|
+
Sprint Wireless => "sprint"
|
64
|
+
T-Mobile US => "t-mobile"
|
65
|
+
T-Mobile UK => "t-mobile-uk"
|
66
|
+
Virgin Mobile => "virgin"
|
67
|
+
Verizon Wireless => "verizon"
|
68
|
+
Vodafone Tokyo => "vodafone-jp-tokyo"
|
69
|
+
|
70
|
+
* <b>Check sms_fu.yml for a complete list of supported carriers, including international
|
71
|
+
carriers as well.</b>
|
72
|
+
|
73
|
+
SMSnger.deliver_sms("5558675309","at&t","message")
|
74
|
+
|
75
|
+
* If you want to set a custom from e-mail per SMS message, you can do so
|
76
|
+
by doing the following.
|
77
|
+
|
78
|
+
SMSnger.deliver_sms("5558675309","at&t","message", :from => "bob@test.com")
|
79
|
+
|
80
|
+
* You can set the maximum length of the SMS message, which is not set by
|
81
|
+
default. Most phones can only accept 128 characters. To do this just
|
82
|
+
specify the limit option.
|
83
|
+
|
84
|
+
SMSnger.deliver_sms("5558675309","at&t","message", :limit => 128)
|
85
|
+
|
86
|
+
* You can retrieve just the formatted address to use in your own mailer.
|
87
|
+
|
88
|
+
SMSnger.get_sms_address("5558675309","at&t") # => "5558675309@txt.att.net"
|
89
|
+
|
90
|
+
== Special Thanks
|
91
|
+
|
92
|
+
A big thank you to Brendan G. Lim, the original author of SMS Fu, who inspired the creation
|
93
|
+
of this gem and who did most of the heavy-lifting.
|
94
|
+
|
95
|
+
Copyright (c) 2010 Joel Watson, released under the MIT license
|
96
|
+
|
97
|
+
(Large) Portions Copyright (c) 2008 Brendan G. Lim, Intridea, Inc., released under the MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "smsnger"
|
8
|
+
gem.summary = %Q{A Ruby library to send text messenges for free via email.}
|
9
|
+
gem.description = %Q{A Ruby library to send text messenges for free via email (extracted from the SMS-Fu Rails plugin by Brendan Lim).}
|
10
|
+
gem.email = "watsonian@gmail.com"
|
11
|
+
gem.homepage = "http://github.com/watsonian/smsnger"
|
12
|
+
gem.authors = ["watsonian"]
|
13
|
+
gem.add_dependency "pony", ">= 0.6"
|
14
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
+
end
|
16
|
+
Jeweler::GemcutterTasks.new
|
17
|
+
rescue LoadError
|
18
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
+
end
|
20
|
+
|
21
|
+
require 'rake/testtask'
|
22
|
+
Rake::TestTask.new(:test) do |test|
|
23
|
+
test.libs << 'lib' << 'test'
|
24
|
+
test.pattern = 'test/**/test_*.rb'
|
25
|
+
test.verbose = true
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'rcov/rcovtask'
|
30
|
+
Rcov::RcovTask.new do |test|
|
31
|
+
test.libs << 'test'
|
32
|
+
test.pattern = 'test/**/test_*.rb'
|
33
|
+
test.verbose = true
|
34
|
+
end
|
35
|
+
rescue LoadError
|
36
|
+
task :rcov do
|
37
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
task :test => :check_dependencies
|
42
|
+
|
43
|
+
task :default => :test
|
44
|
+
|
45
|
+
require 'rake/rdoctask'
|
46
|
+
Rake::RDocTask.new do |rdoc|
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
|
+
|
49
|
+
rdoc.rdoc_dir = 'rdoc'
|
50
|
+
rdoc.title = "smsnger #{version}"
|
51
|
+
rdoc.rdoc_files.include('README*')
|
52
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/lib/carriers.yml
ADDED
@@ -0,0 +1,229 @@
|
|
1
|
+
alltel:
|
2
|
+
name: Alltel
|
3
|
+
value: @message.alltel.com
|
4
|
+
ameritech:
|
5
|
+
name: Ameritech
|
6
|
+
value: @paging.acswireless.com
|
7
|
+
at&t:
|
8
|
+
name: AT&T
|
9
|
+
value: @txt.att.net
|
10
|
+
bell-atlantic:
|
11
|
+
name: Bell Atlantic
|
12
|
+
value: @message.bam.com
|
13
|
+
bellsouthmobility:
|
14
|
+
name: Bellsouth Mobility
|
15
|
+
value: @blsdcs.net
|
16
|
+
blueskyfrog:
|
17
|
+
name: BlueSkyFrog
|
18
|
+
value: @blueskyfrog.com
|
19
|
+
boost:
|
20
|
+
name: Boost Mobile
|
21
|
+
value: @myboostmobile.com
|
22
|
+
cellularsouth:
|
23
|
+
name: Cellular South
|
24
|
+
value: @csouth1.com
|
25
|
+
comcast:
|
26
|
+
name: Comcast PCS
|
27
|
+
value: @comcastpcs.textmsg.com
|
28
|
+
cricket:
|
29
|
+
name: Cricket
|
30
|
+
value: @sms.mycricket.com
|
31
|
+
kajeet:
|
32
|
+
name: kajeet
|
33
|
+
value: @mobile.kajeet.net
|
34
|
+
metropcs:
|
35
|
+
name: Metro PCS
|
36
|
+
value: @mymetropcs.com
|
37
|
+
nextel:
|
38
|
+
name: Nextel
|
39
|
+
value: @messaging.nextel.com
|
40
|
+
powertel:
|
41
|
+
name: Powertel
|
42
|
+
value: @ptel.net
|
43
|
+
pscwireless:
|
44
|
+
name: PSC Wireless
|
45
|
+
value: @sms.pscel.com
|
46
|
+
qwest:
|
47
|
+
name: Qwest
|
48
|
+
value: @qwestmp.com
|
49
|
+
southernlink:
|
50
|
+
name: Southern Link
|
51
|
+
value: @page.southernlinc.com
|
52
|
+
sprint:
|
53
|
+
name: Sprint PCS
|
54
|
+
value: @messaging.sprintpcs.com
|
55
|
+
suncom:
|
56
|
+
name: Suncom
|
57
|
+
value: @tms.suncom.com
|
58
|
+
t-mobile:
|
59
|
+
name: T-Mobile
|
60
|
+
value: @tmomail.net
|
61
|
+
tracfone:
|
62
|
+
name: Tracfone
|
63
|
+
value: @mmst5.tracfone.com
|
64
|
+
telus-mobility:
|
65
|
+
name: Telus Mobility
|
66
|
+
value: @msg.telus.com
|
67
|
+
virgin:
|
68
|
+
name: Virgin Mobile
|
69
|
+
value: @vmobl.net
|
70
|
+
verizon:
|
71
|
+
name: Verizon Wireless
|
72
|
+
value: @vtext.com
|
73
|
+
# International Carriers
|
74
|
+
aliant-canada:
|
75
|
+
name: Aliant (Canada)
|
76
|
+
value: @chat.wirefree.ca
|
77
|
+
beeline-ua:
|
78
|
+
name: Beeline
|
79
|
+
value: @sms.beeline.ua
|
80
|
+
bellmobility-canada:
|
81
|
+
name: Bell Mobility (Canada)
|
82
|
+
value: @txt.bell.ca
|
83
|
+
bpl-mobile:
|
84
|
+
name: BPL Mobile
|
85
|
+
value: @bplmobile.com
|
86
|
+
claro-brazil:
|
87
|
+
name: Claro (Brazil)
|
88
|
+
value: @clarotorpedo.com.br
|
89
|
+
claro-nicaragua:
|
90
|
+
name: Claro (Nicaragua)
|
91
|
+
value: @ideasclaro-ca.com
|
92
|
+
du-arab-emirates:
|
93
|
+
name: Du (UAE)
|
94
|
+
value: @email2sms.ae
|
95
|
+
e-plus-germany:
|
96
|
+
name: E-Plus (Germany)
|
97
|
+
value: @smsmail.eplus.de
|
98
|
+
etisalat-arab-emirates:
|
99
|
+
name: Etisalat (UAE)
|
100
|
+
value: @email2sms.ae
|
101
|
+
fido-canada:
|
102
|
+
name: Fido
|
103
|
+
value: @fido.ca
|
104
|
+
manitobatelecom-canada:
|
105
|
+
name: Manitoba Telecom (Canada)
|
106
|
+
value: @text.mtsmobility.com
|
107
|
+
mobinil-egypt:
|
108
|
+
name: Mobinil
|
109
|
+
value: @mobinil.net
|
110
|
+
mobistar-belgium:
|
111
|
+
name: Mobistar (Belgium)
|
112
|
+
value: @mobistar.be
|
113
|
+
mobitel:
|
114
|
+
name: Mobitel
|
115
|
+
value: @sms.mobitel.lk
|
116
|
+
movistar-spain:
|
117
|
+
name: Movistar (Spain)
|
118
|
+
value: @correo.movistar.net
|
119
|
+
northerntel-canada:
|
120
|
+
name: NorthernTel (Canada)
|
121
|
+
value: @txt.northerntelmobility.com
|
122
|
+
o2-germany:
|
123
|
+
name: o2 (Germany)
|
124
|
+
value: @o2online.de
|
125
|
+
o2-uk:
|
126
|
+
name: o2 (UK)
|
127
|
+
value: @mmail.co.uk
|
128
|
+
orange-mumbai:
|
129
|
+
name: Orange (Mumbai)
|
130
|
+
value: @orangemail.co.in
|
131
|
+
orange-netherlands:
|
132
|
+
name: Orange (Netherlands)
|
133
|
+
value: @sms.orange.nl
|
134
|
+
orange-uk:
|
135
|
+
name: Orange (UK)
|
136
|
+
value: @orange.net
|
137
|
+
rogers-wireless:
|
138
|
+
name: Rogers Wireless
|
139
|
+
value: @pcs.rogers.com
|
140
|
+
rogers-canada:
|
141
|
+
name: Rogers (Canada)
|
142
|
+
value: @pcs.rogers.ca
|
143
|
+
sasktel-canada:
|
144
|
+
name: SaskTel (canada)
|
145
|
+
value: @sms.sasktel.ca
|
146
|
+
sfr-france:
|
147
|
+
name: SFR (France)
|
148
|
+
value: @sfr.fr
|
149
|
+
t-mobile-austria:
|
150
|
+
name: T-Mobile (Austria)
|
151
|
+
value: @sms.t-mobile.at
|
152
|
+
t-mobile-germany:
|
153
|
+
name: T-Mobile (Germany)
|
154
|
+
value: @t-d1-sms.de
|
155
|
+
t-mobile-germany:
|
156
|
+
name: T-Mobile (Netherlands)
|
157
|
+
value: @gin.nl
|
158
|
+
t-mobile-uk:
|
159
|
+
name: T-Mobile (UK)
|
160
|
+
value: @t-mobile.uk.net
|
161
|
+
telebec-canada:
|
162
|
+
name: Telebec (Canada)
|
163
|
+
value: @txt.telebecmobilite.com
|
164
|
+
telefonica-spain:
|
165
|
+
name: Telefonica (Spain)
|
166
|
+
value: @movistar.net
|
167
|
+
telus-canada:
|
168
|
+
name: Telus (Canada)
|
169
|
+
value: @msg.telus.com
|
170
|
+
virgin-canada:
|
171
|
+
name: Virgin (Canada)
|
172
|
+
value: @vmobile.ca
|
173
|
+
vodafone-germany:
|
174
|
+
name: Vodafone (Germany)
|
175
|
+
value: @vodafone-sms.de
|
176
|
+
vodafone-egypt:
|
177
|
+
name: Vodafone (Egypt)
|
178
|
+
value: @vodafone.com.eg
|
179
|
+
vodafone-uk:
|
180
|
+
name: Vodafone (UK)
|
181
|
+
value: @sms.vodafone.net
|
182
|
+
vodafone-italy:
|
183
|
+
name: Vodafone (Italy)
|
184
|
+
value: @sms.vodafone.it
|
185
|
+
vodafone-jp-chuugoku:
|
186
|
+
name: Vodafone (Japan - Chuugoku)
|
187
|
+
value: @n.vodafone.ne.jp
|
188
|
+
vodafone-jp-hokkaido:
|
189
|
+
name: Vodafone (Japan - Hokkaido)
|
190
|
+
value: @d.vodafone.ne.jp
|
191
|
+
vodafone-jp-hokuriko:
|
192
|
+
name: Vodafone (Japan - Hokuriko)
|
193
|
+
value: @r.vodafone.ne.jp
|
194
|
+
vodafone-jp-kansai:
|
195
|
+
name: Vodafone (Japan - Kansai)
|
196
|
+
value: @k.vodafone.ne.jp
|
197
|
+
vodafone-jp-osaka:
|
198
|
+
name: Vodafone (Japan - Osaka)
|
199
|
+
value: @k.vodafone.ne.jp
|
200
|
+
vodafone-jp-kanto:
|
201
|
+
name: Vodafone (Japan - Kanto)
|
202
|
+
value: @k.vodafone.ne.jp
|
203
|
+
vodafone-jp-koushin:
|
204
|
+
name: Vodafone (Japan - Koushin)
|
205
|
+
value: @k.vodafone.ne.jp
|
206
|
+
vodafone-jp-tokyo:
|
207
|
+
name: Vodafone (Japan - Tokyo)
|
208
|
+
value: @k.vodafone.ne.jp
|
209
|
+
vodafone-jp-kyuushu:
|
210
|
+
name: Vodafone (Japan - Kyuushu)
|
211
|
+
value: @q.vodafone.ne.jp
|
212
|
+
vodafone-jp-okinawa:
|
213
|
+
name: Vodafone (Japan - Okinawa)
|
214
|
+
value: @q.vodafone.ne.jp
|
215
|
+
vodafone-jp-shikoku:
|
216
|
+
name: Vodafone (Japan - Shikoku)
|
217
|
+
value: @s.vodafone.ne.jp
|
218
|
+
vodafone-jp-touhoku:
|
219
|
+
name: Vodafone (Japan - Touhoku)
|
220
|
+
value: @h.vodafone.ne.jp
|
221
|
+
vodafone-jp-niigata:
|
222
|
+
name: Vodafone (Japan - Niigata)
|
223
|
+
value: @h.vodafone.ne.jp
|
224
|
+
vodafone-jp-toukai:
|
225
|
+
name: Vodafone (Japan - Toukai)
|
226
|
+
value: @h.vodafone.ne.jp
|
227
|
+
vodafone-spain:
|
228
|
+
name: Vodafone (Japan - Spain)
|
229
|
+
value: @vodafone.es
|
data/lib/smsnger.rb
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'yaml'
|
3
|
+
require 'pony'
|
4
|
+
# Copyright (c) 2008 Brendan G. Lim (brendangl@gmail.com)
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
7
|
+
# a copy of this software and associated documentation files (the
|
8
|
+
# "Software"), to deal in the Software without restriction, including
|
9
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
10
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
11
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
12
|
+
# the following conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be
|
15
|
+
# included in all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
19
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
21
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
22
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
23
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
24
|
+
|
25
|
+
class SMSnger
|
26
|
+
def self.setup(options = {})
|
27
|
+
default_options = {
|
28
|
+
:config => File.join(File.dirname(__FILE__),"carriers.yml"),
|
29
|
+
:from => "noreply@domain.com",
|
30
|
+
:mail_via => :sendmail
|
31
|
+
}
|
32
|
+
default_options.merge!(options)
|
33
|
+
|
34
|
+
@@mail_via ||= default_options[:mail_via]
|
35
|
+
|
36
|
+
raise SMSngerExceptions.new("You must specify a :from address setting in SMSnger.setup!") unless default_options.has_key?(:from)
|
37
|
+
@@from_address = default_options[:from]
|
38
|
+
|
39
|
+
if @@mail_via == :smtp
|
40
|
+
raise SMSngerExceptions.new("You must specify the :smtp settings in SMSnger.setup!") unless default_options.has_key?(:smtp)
|
41
|
+
smtp_config(default_options[:smtp])
|
42
|
+
end
|
43
|
+
|
44
|
+
load_carriers(default_options[:config])
|
45
|
+
|
46
|
+
return default_options
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.carrier_name(key)
|
50
|
+
carriers[key]['name']
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.carriers
|
54
|
+
@@carriers.dup
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.deliver_sms(number,carrier,message,options={})
|
58
|
+
raise SMSngerException.new("Cannot deliver an empty message to #{format_number(number)}") if message.nil? or message.empty?
|
59
|
+
|
60
|
+
options[:limit] ||= message.length
|
61
|
+
options[:from] ||= @@from_address
|
62
|
+
message = message[0..options[:limit]-1]
|
63
|
+
sms_email = determine_sms_email(format_number(number),carrier)
|
64
|
+
|
65
|
+
case @@mail_via
|
66
|
+
when :sendmail
|
67
|
+
Pony.mail(:to => sms_email, :from => options[:from], :body => message)
|
68
|
+
when :smtp
|
69
|
+
Pony.mail(:to => sms_email, :from => options[:from], :body => message, :via => @@mail_via, :smtp => @@smtp_settings)
|
70
|
+
else
|
71
|
+
raise SMSngerException.new("Unknown mail method #{@@mail_via}.")
|
72
|
+
end
|
73
|
+
|
74
|
+
rescue SMSngerException => exception
|
75
|
+
raise exception
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.get_sms_address(number,carrier)
|
79
|
+
number = format_number(number)
|
80
|
+
determine_sms_email(number,carrier)
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
def self.load_carriers(carrier_path)
|
85
|
+
@@carriers ||= YAML.load_file(carrier_path)
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.smtp_config(smtp_config_hash)
|
89
|
+
unless @@mail_via == :sendmail
|
90
|
+
@@smtp_settings ||= smtp_config_hash
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.format_number(number)
|
95
|
+
pre_formatted = number.gsub("-","").strip
|
96
|
+
formatted = (pre_formatted.length == 11 && pre_formatted[0,1] == "1") ? pre_formatted[1..pre_formatted.length] : pre_formatted
|
97
|
+
return is_valid?(formatted) ? formatted : (raise SMSngerException.new("Phone number (#{number}) is not formatted correctly"))
|
98
|
+
end
|
99
|
+
|
100
|
+
def self.is_valid?(number)
|
101
|
+
number.length >= 10 && number[/^.\d+$/]
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.determine_sms_email(phone_number, carrier)
|
105
|
+
if @@carriers.has_key?(carrier.downcase)
|
106
|
+
"#{phone_number}#{@@carriers[carrier.downcase]['value']}"
|
107
|
+
else
|
108
|
+
raise SMSngerException.new("Specified carrier, #{carrier} is not supported.")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
SMSnger.setup
|
114
|
+
|
115
|
+
class SMSngerException < StandardError; end
|
data/smsnger.gemspec
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{smsnger}
|
8
|
+
s.version = "1.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["watsonian"]
|
12
|
+
s.date = %q{2010-01-26}
|
13
|
+
s.description = %q{A Ruby library to send text messenges for free via email (extracted from the SMS-Fu Rails plugin by Brendan Lim).}
|
14
|
+
s.email = %q{watsonian@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.rdoc"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".document",
|
20
|
+
".gitignore",
|
21
|
+
"MIT-LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"lib/carriers.yml",
|
26
|
+
"lib/smsnger.rb",
|
27
|
+
"smsnger.gemspec",
|
28
|
+
"test/helper.rb",
|
29
|
+
"test/test_smsnger.rb"
|
30
|
+
]
|
31
|
+
s.homepage = %q{http://github.com/watsonian/smsnger}
|
32
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
33
|
+
s.require_paths = ["lib"]
|
34
|
+
s.rubygems_version = %q{1.3.5}
|
35
|
+
s.summary = %q{A Ruby library to send text messenges for free via email.}
|
36
|
+
s.test_files = [
|
37
|
+
"test/helper.rb",
|
38
|
+
"test/test_smsnger.rb"
|
39
|
+
]
|
40
|
+
|
41
|
+
if s.respond_to? :specification_version then
|
42
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
43
|
+
s.specification_version = 3
|
44
|
+
|
45
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
46
|
+
s.add_runtime_dependency(%q<pony>, [">= 0.6"])
|
47
|
+
else
|
48
|
+
s.add_dependency(%q<pony>, [">= 0.6"])
|
49
|
+
end
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<pony>, [">= 0.6"])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class SmsFuTest < Test::Unit::TestCase
|
4
|
+
def test_validity_of_number
|
5
|
+
assert_raise(SMSngerException) { SMSnger.deliver_sms("456789011","AT&T","Message") }
|
6
|
+
assert_equal("5555555555@txt.att.net", SMSnger.get_sms_address("1-555-555-5555","AT&T"))
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_international_number
|
10
|
+
assert_equal("+445555555555@txt.att.net", SMSnger.get_sms_address("+44-555-555-5555","AT&T"))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_handling_of_blank_message
|
14
|
+
assert_raise(SMSngerException) { SMSnger.deliver_sms("1234567890","AT&T","") }
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get_sms_address
|
18
|
+
assert_equal("1234567890@txt.att.net", SMSnger.get_sms_address("1234567890","AT&T"))
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: smsnger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- watsonian
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-01-26 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: pony
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0.6"
|
24
|
+
version:
|
25
|
+
description: A Ruby library to send text messenges for free via email (extracted from the SMS-Fu Rails plugin by Brendan Lim).
|
26
|
+
email: watsonian@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README.rdoc
|
33
|
+
files:
|
34
|
+
- .document
|
35
|
+
- .gitignore
|
36
|
+
- MIT-LICENSE
|
37
|
+
- README.rdoc
|
38
|
+
- Rakefile
|
39
|
+
- VERSION
|
40
|
+
- lib/carriers.yml
|
41
|
+
- lib/smsnger.rb
|
42
|
+
- smsnger.gemspec
|
43
|
+
- test/helper.rb
|
44
|
+
- test/test_smsnger.rb
|
45
|
+
has_rdoc: true
|
46
|
+
homepage: http://github.com/watsonian/smsnger
|
47
|
+
licenses: []
|
48
|
+
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --charset=UTF-8
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project:
|
69
|
+
rubygems_version: 1.3.5
|
70
|
+
signing_key:
|
71
|
+
specification_version: 3
|
72
|
+
summary: A Ruby library to send text messenges for free via email.
|
73
|
+
test_files:
|
74
|
+
- test/helper.rb
|
75
|
+
- test/test_smsnger.rb
|