josh-splat 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/generators/splat_config/templates/vendors.yml +8 -1
- data/lib/splat/vendors/bulksmspune/bulksmspune_gateway.rb +1 -1
- data/lib/splat/vendors/twilio/twilio_gateway.rb +75 -0
- data/lib/splat/vendors/twilio/xml/twilio.xsd +35 -0
- data/lib/splat/vendors/twilio/xml/twilio_xml.rb +175 -0
- data/test.rb +10 -8
- metadata +5 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
require 'net/https'
|
3
|
+
require File.dirname(__FILE__) + '/xml/twilio_xml'
|
4
|
+
|
5
|
+
module Splat
|
6
|
+
|
7
|
+
class Twilio < Gateway
|
8
|
+
|
9
|
+
def initialize()
|
10
|
+
super
|
11
|
+
self.required_config([:provider_url, :account_sid, :auth_token])
|
12
|
+
@service_url = self.config_option(:provider_url)
|
13
|
+
@account_sid = self.config_option(:account_sid)
|
14
|
+
@auth_token = self.config_option(:auth_token)
|
15
|
+
@api_version = self.config_option(:api_version) || '2008-08-01'
|
16
|
+
@phone_number = self.config_option(:phone_number)
|
17
|
+
|
18
|
+
@send_service_url = URI.parse("#{@service_url}/#{@api_version}/Accounts/#{@account_sid}/SMS/Messages")
|
19
|
+
|
20
|
+
#if options[:callbacks]
|
21
|
+
# before_send = options[:callback][:before_send]
|
22
|
+
#end
|
23
|
+
end
|
24
|
+
|
25
|
+
def send_sms(message, number, options = {})
|
26
|
+
options[:response].add(number, call_service(message, number))
|
27
|
+
options[:response]
|
28
|
+
end
|
29
|
+
|
30
|
+
def send_bulk_sms(message, numbers, options = {})
|
31
|
+
numbers.each do |number|
|
32
|
+
options[:response].add(number, call_service(message, number))
|
33
|
+
end
|
34
|
+
options[:response]
|
35
|
+
end
|
36
|
+
|
37
|
+
def send_bulk_sms_with_insertion(message, insertions = {}, options = {})
|
38
|
+
|
39
|
+
number_message_map = insert_values(message, insertions)
|
40
|
+
number_message_map.each do |number, message|
|
41
|
+
options[:response].add(number, call_service(message, parse_number(number)))
|
42
|
+
end
|
43
|
+
options[:response]
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def call_service(message, number)
|
49
|
+
|
50
|
+
http = Net::HTTP.new(@send_service_url.host, @send_service_url.port)
|
51
|
+
http.use_ssl = true
|
52
|
+
|
53
|
+
request = Net::HTTP::Post.new(@send_service_url.request_uri)
|
54
|
+
request.basic_auth(@account_sid, @auth_token)
|
55
|
+
request.set_form_data({'To' => parse_number(number),
|
56
|
+
'From' => @phone_number,
|
57
|
+
'Body' => message })
|
58
|
+
|
59
|
+
response = XSD::Mapping.xml2obj(http.request(request).body)
|
60
|
+
|
61
|
+
if response.RestException
|
62
|
+
return response.RestException.message
|
63
|
+
end
|
64
|
+
|
65
|
+
response.SMSMessage.status
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
def parse_number(number)
|
70
|
+
number.tr(' ', '')
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
3
|
+
|
4
|
+
<xs:complexType name="RestException">
|
5
|
+
<xs:sequence>
|
6
|
+
<xs:element name="Status" type="xs:string"/>
|
7
|
+
<xs:element name="Message" type="xs:string"/>
|
8
|
+
<xs:element name="Code" type="xs:string"/>
|
9
|
+
<xs:element name="MoreInfo" type="xs:string"/>
|
10
|
+
</xs:sequence>
|
11
|
+
</xs:complexType>
|
12
|
+
|
13
|
+
<xs:complexType name="SMSMessage">
|
14
|
+
<xs:sequence>
|
15
|
+
<xs:element name="Sid" type="xs:string"/>
|
16
|
+
<xs:element name="DateCreated" type="xs:string"/>
|
17
|
+
<xs:element name="DateUpdated" type="xs:string"/>
|
18
|
+
<xs:element name="DateSent" type="xs:string"/>
|
19
|
+
<xs:element name="AccountSid" type="xs:string"/>
|
20
|
+
<xs:element name="To" type="xs:string"/>
|
21
|
+
<xs:element name="From" type="xs:string"/>
|
22
|
+
<xs:element name="Body" type="xs:string"/>
|
23
|
+
<xs:element name="Status" type="xs:string"/>
|
24
|
+
<xs:element name="Flags" type="xs:string"/>
|
25
|
+
</xs:sequence>
|
26
|
+
</xs:complexType>
|
27
|
+
|
28
|
+
<xs:complexType name="TwilioResponse">
|
29
|
+
<xs:sequence>
|
30
|
+
<xs:element name="RestException" type="RestException" />
|
31
|
+
<xs:element name="SMSMessage" type="SMSMessage" />
|
32
|
+
</xs:sequence>
|
33
|
+
</xs:complexType>
|
34
|
+
|
35
|
+
</xs:schema>
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'xsd/qname'
|
2
|
+
|
3
|
+
# {}RestException
|
4
|
+
class RestException
|
5
|
+
@@schema_type = "RestException"
|
6
|
+
@@schema_ns = nil
|
7
|
+
@@schema_element = [["status", ["SOAP::SOAPString", XSD::QName.new(nil, "Status")]], ["message", ["SOAP::SOAPString", XSD::QName.new(nil, "Message")]], ["code", ["SOAP::SOAPString", XSD::QName.new(nil, "Code")]], ["moreInfo", ["SOAP::SOAPString", XSD::QName.new(nil, "MoreInfo")]]]
|
8
|
+
|
9
|
+
def Status
|
10
|
+
@status
|
11
|
+
end
|
12
|
+
|
13
|
+
def Status=(value)
|
14
|
+
@status = value
|
15
|
+
end
|
16
|
+
|
17
|
+
def Message
|
18
|
+
@message
|
19
|
+
end
|
20
|
+
|
21
|
+
def Message=(value)
|
22
|
+
@message = value
|
23
|
+
end
|
24
|
+
|
25
|
+
def Code
|
26
|
+
@code
|
27
|
+
end
|
28
|
+
|
29
|
+
def Code=(value)
|
30
|
+
@code = value
|
31
|
+
end
|
32
|
+
|
33
|
+
def MoreInfo
|
34
|
+
@moreInfo
|
35
|
+
end
|
36
|
+
|
37
|
+
def MoreInfo=(value)
|
38
|
+
@moreInfo = value
|
39
|
+
end
|
40
|
+
|
41
|
+
def initialize(status = nil, message = nil, code = nil, moreInfo = nil)
|
42
|
+
@status = status
|
43
|
+
@message = message
|
44
|
+
@code = code
|
45
|
+
@moreInfo = moreInfo
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# {}SMSMessage
|
50
|
+
class SMSMessage
|
51
|
+
@@schema_type = "SMSMessage"
|
52
|
+
@@schema_ns = nil
|
53
|
+
@@schema_element = [["sid", ["SOAP::SOAPString", XSD::QName.new(nil, "Sid")]], ["dateCreated", ["SOAP::SOAPString", XSD::QName.new(nil, "DateCreated")]], ["dateUpdated", ["SOAP::SOAPString", XSD::QName.new(nil, "DateUpdated")]], ["dateSent", ["SOAP::SOAPString", XSD::QName.new(nil, "DateSent")]], ["accountSid", ["SOAP::SOAPString", XSD::QName.new(nil, "AccountSid")]], ["to", ["SOAP::SOAPString", XSD::QName.new(nil, "To")]], ["from", ["SOAP::SOAPString", XSD::QName.new(nil, "From")]], ["body", ["SOAP::SOAPString", XSD::QName.new(nil, "Body")]], ["status", ["SOAP::SOAPString", XSD::QName.new(nil, "Status")]], ["flags", ["SOAP::SOAPString", XSD::QName.new(nil, "Flags")]]]
|
54
|
+
|
55
|
+
def Sid
|
56
|
+
@sid
|
57
|
+
end
|
58
|
+
|
59
|
+
def Sid=(value)
|
60
|
+
@sid = value
|
61
|
+
end
|
62
|
+
|
63
|
+
def DateCreated
|
64
|
+
@dateCreated
|
65
|
+
end
|
66
|
+
|
67
|
+
def DateCreated=(value)
|
68
|
+
@dateCreated = value
|
69
|
+
end
|
70
|
+
|
71
|
+
def DateUpdated
|
72
|
+
@dateUpdated
|
73
|
+
end
|
74
|
+
|
75
|
+
def DateUpdated=(value)
|
76
|
+
@dateUpdated = value
|
77
|
+
end
|
78
|
+
|
79
|
+
def DateSent
|
80
|
+
@dateSent
|
81
|
+
end
|
82
|
+
|
83
|
+
def DateSent=(value)
|
84
|
+
@dateSent = value
|
85
|
+
end
|
86
|
+
|
87
|
+
def AccountSid
|
88
|
+
@accountSid
|
89
|
+
end
|
90
|
+
|
91
|
+
def AccountSid=(value)
|
92
|
+
@accountSid = value
|
93
|
+
end
|
94
|
+
|
95
|
+
def To
|
96
|
+
@to
|
97
|
+
end
|
98
|
+
|
99
|
+
def To=(value)
|
100
|
+
@to = value
|
101
|
+
end
|
102
|
+
|
103
|
+
def From
|
104
|
+
@from
|
105
|
+
end
|
106
|
+
|
107
|
+
def From=(value)
|
108
|
+
@from = value
|
109
|
+
end
|
110
|
+
|
111
|
+
def Body
|
112
|
+
@body
|
113
|
+
end
|
114
|
+
|
115
|
+
def Body=(value)
|
116
|
+
@body = value
|
117
|
+
end
|
118
|
+
|
119
|
+
def Status
|
120
|
+
@status
|
121
|
+
end
|
122
|
+
|
123
|
+
def Status=(value)
|
124
|
+
@status = value
|
125
|
+
end
|
126
|
+
|
127
|
+
def Flags
|
128
|
+
@flags
|
129
|
+
end
|
130
|
+
|
131
|
+
def Flags=(value)
|
132
|
+
@flags = value
|
133
|
+
end
|
134
|
+
|
135
|
+
def initialize(sid = nil, dateCreated = nil, dateUpdated = nil, dateSent = nil, accountSid = nil, to = nil, from = nil, body = nil, status = nil, flags = nil)
|
136
|
+
@sid = sid
|
137
|
+
@dateCreated = dateCreated
|
138
|
+
@dateUpdated = dateUpdated
|
139
|
+
@dateSent = dateSent
|
140
|
+
@accountSid = accountSid
|
141
|
+
@to = to
|
142
|
+
@from = from
|
143
|
+
@body = body
|
144
|
+
@status = status
|
145
|
+
@flags = flags
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
# {}TwilioResponse
|
150
|
+
class TwilioResponse
|
151
|
+
@@schema_type = "TwilioResponse"
|
152
|
+
@@schema_ns = nil
|
153
|
+
@@schema_element = [["restException", ["RestException", XSD::QName.new(nil, "RestException")]], ["sMSMessage", ["SMSMessage", XSD::QName.new(nil, "SMSMessage")]]]
|
154
|
+
|
155
|
+
def RestException
|
156
|
+
@restException
|
157
|
+
end
|
158
|
+
|
159
|
+
def RestException=(value)
|
160
|
+
@restException = value
|
161
|
+
end
|
162
|
+
|
163
|
+
def SMSMessage
|
164
|
+
@sMSMessage
|
165
|
+
end
|
166
|
+
|
167
|
+
def SMSMessage=(value)
|
168
|
+
@sMSMessage = value
|
169
|
+
end
|
170
|
+
|
171
|
+
def initialize(restException = nil, sMSMessage = nil)
|
172
|
+
@restException = restException
|
173
|
+
@sMSMessage = sMSMessage
|
174
|
+
end
|
175
|
+
end
|
data/test.rb
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'lib/splat'
|
4
4
|
|
5
|
-
number = '+91 9850888082'
|
6
5
|
|
7
6
|
gateways = {}
|
8
7
|
#gateways['bulksms'] = Splat::Base.new(:bulksmspune)
|
9
8
|
#gateways['vmobo'] = Splat::Base.new(:vmobo)
|
10
|
-
gateways['clickatell'] = Splat::Base.new(:clickatell)
|
9
|
+
#gateways['clickatell'] = Splat::Base.new(:clickatell)
|
10
|
+
gateways['twilio'] = Splat::Base.new(:twilio)
|
11
11
|
|
12
12
|
|
13
|
-
=begin
|
14
13
|
#number = '+1 5599726538'
|
15
|
-
number = '+91
|
14
|
+
number = '+91 9960054954'
|
15
|
+
#number = '+1 4158685943'
|
16
16
|
msg = "Testing for splat"
|
17
17
|
gateways.each do |provider, obj|
|
18
18
|
p "Sending SMS via #{provider}"
|
@@ -21,6 +21,7 @@ gateways.each do |provider, obj|
|
|
21
21
|
end
|
22
22
|
p "========================"
|
23
23
|
|
24
|
+
=begin
|
24
25
|
msg = "Testing for splat"
|
25
26
|
numbers = ['+91 9960054954', '+91 9850888082']
|
26
27
|
gateways.each do |provider, obj|
|
@@ -29,10 +30,10 @@ gateways.each do |provider, obj|
|
|
29
30
|
end
|
30
31
|
p "========================"
|
31
32
|
|
32
|
-
|
33
|
-
custom_msg = "Hi $1, hold on to your $2."
|
34
|
-
options = {'+91 9960054954' => ['Sagar', 'coffee']
|
35
|
-
'+91 9850888082' => ['Gautam' , 'stocks']}
|
33
|
+
|
34
|
+
custom_msg = "Hi, $1, hold on to your $2."
|
35
|
+
options = {'+91 9960054954' => ['Sagar', 'coffee']}
|
36
|
+
#'+91 9850888082' => ['Gautam' , 'stocks']}
|
36
37
|
#'+91 9880397111' => ['Jane' , 'skirt']}
|
37
38
|
|
38
39
|
gateways.each do |provider, obj|
|
@@ -40,5 +41,6 @@ gateways.each do |provider, obj|
|
|
40
41
|
p "Bulk Send successfully via #{provider}"
|
41
42
|
end
|
42
43
|
|
44
|
+
=end
|
43
45
|
|
44
46
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Gautam Rege
|
@@ -68,6 +68,9 @@ files:
|
|
68
68
|
- lib/splat/vendors/vmobo/xml/schema/vmobo.xsd
|
69
69
|
- lib/splat/vendors/vmobo/xml/schema.rb
|
70
70
|
- lib/splat.rb
|
71
|
+
- lib/splat/vendors/twilio/twilio_gateway.rb
|
72
|
+
- lib/splat/vendors/twilio/xml/twilio.xsd
|
73
|
+
- lib/splat/vendors/twilio/xml/twilio_xml.rb
|
71
74
|
- test.rb
|
72
75
|
has_rdoc: true
|
73
76
|
homepage: http://github.com/joshsoftware/Splat
|