bobes-textmagic 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +63 -7
- data/VERSION.yml +1 -1
- data/lib/api.rb +3 -0
- data/lib/response.rb +7 -6
- data/test/test_api.rb +41 -12
- data/test/test_response.rb +6 -6
- data/textmagic.gemspec +1 -1
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
= TextMagic
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
+textmagic+ gem is a Ruby interface to the TextMagic's Bulk SMS Gateway.
|
4
|
+
It can be used to send SMS messages and receive replies, check statuses
|
5
|
+
of sent messages and retrieve account balance.
|
6
|
+
You need to have a valid TextMagic[http://www.textmagic.com] account to use this gem. Sign up at
|
7
|
+
http://www.textmagic.com to get one.
|
6
8
|
|
7
9
|
== Installation
|
8
10
|
|
@@ -22,18 +24,72 @@ To create an API instance, run:
|
|
22
24
|
with your credentials. Created instance will remember the username and password
|
23
25
|
and will use it for all commands.
|
24
26
|
|
27
|
+
=== Account balance
|
28
|
+
|
25
29
|
To retrieve your account's balance, run:
|
26
30
|
|
27
|
-
api.account
|
31
|
+
api.account.balance
|
32
|
+
# => 314.15
|
33
|
+
|
34
|
+
=== Sending messages
|
28
35
|
|
29
|
-
To send a
|
36
|
+
To send a message to a single phone number, run:
|
30
37
|
|
31
|
-
api.send 'Hi Vilma!', '
|
38
|
+
api.send 'Hi Vilma!', '999314159265'
|
32
39
|
|
33
40
|
You can even specify multiple phone numbers:
|
34
41
|
|
35
|
-
api.send 'Hi
|
42
|
+
api.send 'Hi everybody!', '999314159265', '999271828182'
|
43
|
+
|
44
|
+
Unicode messages are supported as well:
|
45
|
+
|
46
|
+
api.send 'Вильма Привет!', '999314159265'
|
47
|
+
|
48
|
+
Long messages will be split to up to 3 parts. If you want to limit maximum number
|
49
|
+
of parts, you can specify an optional +max_length+ parameter:
|
50
|
+
|
51
|
+
api.send 'Very long message...', '999314159265', :max_length => 2
|
52
|
+
|
53
|
+
=== Checking sent message status
|
54
|
+
|
55
|
+
If you want to check sent message status, you have to use +message_id+
|
56
|
+
returned in respose to +send+ command.
|
57
|
+
|
58
|
+
api.send('Hi Vilma!', '999314159265').message_id
|
59
|
+
# => '141421'
|
60
|
+
api.message_status('141421').status
|
61
|
+
# => 'd'
|
62
|
+
|
63
|
+
You can also supply several message_ids, in which case you'll get a hash with
|
64
|
+
message_ids as keys:
|
65
|
+
|
66
|
+
api.send('Hi Vilma!', '999314159265', '999271828182').message_ids
|
67
|
+
# => ['141421', '173205']
|
68
|
+
statuses = api.message_status('141421', '173205')
|
69
|
+
statuses['141421'].status
|
70
|
+
# => 'r'
|
71
|
+
|
72
|
+
=== Receiving replies
|
73
|
+
|
74
|
+
To receive all available replies, run:
|
75
|
+
|
76
|
+
replies = api.receive.messages
|
77
|
+
# => [{ 'timestamp' => Fri May 22 12:12:55 +0200 2009, 'from' => '999314159265', 'text' => 'Hi Fred!', 'message_id' => '1780826' }]
|
78
|
+
replies.first.text
|
79
|
+
# => 'Hi Fred!'
|
80
|
+
|
81
|
+
To prevent receiving old messages, supply +last_retrieved_id+ argument:
|
82
|
+
|
83
|
+
replies = api.receive('1780826').messages
|
84
|
+
# => []
|
85
|
+
|
86
|
+
=== Deleting retrieved replies
|
87
|
+
|
88
|
+
After you retrieve replies, you can delete them from server by running:
|
36
89
|
|
90
|
+
message_ids = api.receive.message_ids
|
91
|
+
# => ['141421', '1780826']
|
92
|
+
api.delete_reply '141421', '1780826'
|
37
93
|
|
38
94
|
== Copyright
|
39
95
|
|
data/VERSION.yml
CHANGED
data/lib/api.rb
CHANGED
@@ -88,6 +88,7 @@ module TextMagic
|
|
88
88
|
raise Error.new(9, 'Invalid phone number format') unless API.validate_phones(phones)
|
89
89
|
response = Executor.execute('send', @username, @password, options.merge(:text => text, :phone => phones.join(',')))
|
90
90
|
response.extend(TextMagic::API::Response::Send)
|
91
|
+
response
|
91
92
|
end
|
92
93
|
|
93
94
|
# Executes a message_status command and returns a hash with states of
|
@@ -116,10 +117,12 @@ module TextMagic
|
|
116
117
|
# response['141421'].created_time
|
117
118
|
# # => Fri May 22 10:10:18 +0200 2009
|
118
119
|
def message_status(*ids)
|
120
|
+
single = ids.size == 1 && ids.first.is_a?(String)
|
119
121
|
ids.flatten!
|
120
122
|
raise TextMagic::API::Error.new(4, 'Insufficient parameters') if ids.empty?
|
121
123
|
response = Executor.execute('message_status', @username, @password, :ids => ids.join(','))
|
122
124
|
response.extend(TextMagic::API::Response::MessageStatus)
|
125
|
+
single ? response[ids.first] : response
|
123
126
|
end
|
124
127
|
|
125
128
|
# Executes a receive command and returns a hash with unread messages
|
data/lib/response.rb
CHANGED
@@ -58,12 +58,12 @@ module TextMagic
|
|
58
58
|
module Send #:nodoc: all
|
59
59
|
|
60
60
|
def self.extended(base)
|
61
|
-
return unless base.is_a?(Hash)
|
62
|
-
base['
|
63
|
-
base
|
61
|
+
return unless base.is_a?(Hash) && base['message_id']
|
62
|
+
base['message_ids'] = base['message_id'].keys.sort
|
63
|
+
base.merge! base.delete('message_id').invert
|
64
64
|
end
|
65
65
|
|
66
|
-
%w(
|
66
|
+
%w(message_ids sent_text parts_count).each do |method|
|
67
67
|
module_eval <<-EOS
|
68
68
|
def #{method}
|
69
69
|
self['#{method}']
|
@@ -72,7 +72,7 @@ module TextMagic
|
|
72
72
|
end
|
73
73
|
|
74
74
|
def message_id(phone = nil)
|
75
|
-
phone ?
|
75
|
+
phone ? self[phone] : self['message_ids'].first
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
@@ -104,13 +104,14 @@ module TextMagic
|
|
104
104
|
|
105
105
|
def self.extended(base)
|
106
106
|
return unless base.is_a?(Hash) && base['messages']
|
107
|
+
base['message_ids'] = base['messages'].collect { |message| message['message_id'] }.sort
|
107
108
|
base['messages'].each do |message|
|
108
109
|
message['timestamp'] = Time.at(message['timestamp'].to_i) if message['timestamp']
|
109
110
|
message.extend Message
|
110
111
|
end
|
111
112
|
end
|
112
113
|
|
113
|
-
%w(messages unread).each do |method|
|
114
|
+
%w(messages message_ids unread).each do |method|
|
114
115
|
module_eval <<-EOS, __FILE__, __LINE__ + 1
|
115
116
|
def #{method}
|
116
117
|
self['#{method}']
|
data/test/test_api.rb
CHANGED
@@ -111,12 +111,12 @@ class APITest < Test::Unit::TestCase
|
|
111
111
|
response.is_a?(TextMagic::API::Response::Send).should == true
|
112
112
|
end
|
113
113
|
|
114
|
-
should 'return a hash with
|
114
|
+
should 'return a hash with message_ids, sent_text and parts_count values' do
|
115
115
|
message_id = random_string
|
116
116
|
TextMagic::API::Executor.expects(:execute).returns({ 'message_id' => { message_id => @phone }, 'sent_text' => @text, 'parts_count' => 1 })
|
117
117
|
response = @api.send(@text, @phone)
|
118
|
-
response['message_id_hash'].should == { @phone => message_id }
|
119
118
|
response['message_ids'].should == [message_id]
|
119
|
+
response['sent_text'].should == @text
|
120
120
|
response['parts_count'].should == 1
|
121
121
|
end
|
122
122
|
end
|
@@ -126,12 +126,15 @@ class APITest < Test::Unit::TestCase
|
|
126
126
|
setup do
|
127
127
|
@username, @password = random_string, random_string
|
128
128
|
@api = TextMagic::API.new(@username, @password)
|
129
|
+
@id = random_string
|
130
|
+
@status = { 'text' => 'Hi Vilma', 'status' => 'd' , 'created_time' => Time.now.to_i, 'reply_number' => '447624800500', 'completed_time' => nil, 'credits_cost' => 0.5 }
|
131
|
+
@response = { @id => @status }
|
132
|
+
TextMagic::API::Executor.stubs(:execute)
|
129
133
|
end
|
130
134
|
|
131
135
|
should 'call Executor execute with correct arguments' do
|
132
|
-
|
133
|
-
|
134
|
-
@api.message_status(id)
|
136
|
+
TextMagic::API::Executor.expects(:execute).with('message_status', @username, @password, :ids => @id).returns(@response)
|
137
|
+
@api.message_status(@id)
|
135
138
|
end
|
136
139
|
|
137
140
|
should 'join ids supplied as array' do
|
@@ -151,17 +154,43 @@ class APITest < Test::Unit::TestCase
|
|
151
154
|
lambda { @api.message_status }.should raise_error(TextMagic::API::Error)
|
152
155
|
end
|
153
156
|
|
154
|
-
should 'return a hash extended with TextMagic::API::Response::MessageStatus' do
|
155
|
-
TextMagic::API::Executor.expects(:execute).returns(
|
156
|
-
response = @api.message_status(
|
157
|
+
should 'return a hash extended with TextMagic::API::Response::MessageStatus for an array of ids' do
|
158
|
+
TextMagic::API::Executor.expects(:execute).returns(@response)
|
159
|
+
response = @api.message_status([@id])
|
157
160
|
response.class.should == Hash
|
158
161
|
response.is_a?(TextMagic::API::Response::MessageStatus).should == true
|
159
162
|
end
|
160
163
|
|
161
|
-
should 'return a hash with message ids as keys' do
|
162
|
-
TextMagic::API::Executor.expects(:execute).returns(
|
163
|
-
response = @api.message_status(
|
164
|
-
response[
|
164
|
+
should 'return a hash with message ids as keys for an array of ids' do
|
165
|
+
TextMagic::API::Executor.expects(:execute).returns(@response)
|
166
|
+
response = @api.message_status([@id])
|
167
|
+
response[@id].should == @status
|
168
|
+
end
|
169
|
+
|
170
|
+
should 'return a hash extended with TextMagic::API::Response::MessageStatus for a list of ids' do
|
171
|
+
TextMagic::API::Executor.expects(:execute).returns(@response)
|
172
|
+
response = @api.message_status(@id, random_string)
|
173
|
+
response.class.should == Hash
|
174
|
+
response.is_a?(TextMagic::API::Response::MessageStatus).should == true
|
175
|
+
end
|
176
|
+
|
177
|
+
should 'return a hash with message ids as keys for a list of ids' do
|
178
|
+
TextMagic::API::Executor.expects(:execute).returns(@response)
|
179
|
+
response = @api.message_status(@id, random_string)
|
180
|
+
response[@id].should == @status
|
181
|
+
end
|
182
|
+
|
183
|
+
should 'return a hash extended with TextMagic::API::Response::MessageStatus::Status for a single id' do
|
184
|
+
TextMagic::API::Executor.expects(:execute).returns(@response)
|
185
|
+
response = @api.message_status(@id)
|
186
|
+
response.class.should == Hash
|
187
|
+
response.is_a?(TextMagic::API::Response::MessageStatus::Status).should == true
|
188
|
+
end
|
189
|
+
|
190
|
+
should 'return a hash with message ids as keys for a single id' do
|
191
|
+
TextMagic::API::Executor.expects(:execute).returns(@response)
|
192
|
+
response = @api.message_status(@id)
|
193
|
+
response.should == @status
|
165
194
|
end
|
166
195
|
end
|
167
196
|
|
data/test/test_response.rb
CHANGED
@@ -32,17 +32,13 @@ class ResponseTest < Test::Unit::TestCase
|
|
32
32
|
@response.extend TextMagic::API::Response::Send
|
33
33
|
end
|
34
34
|
|
35
|
-
should 'allow access to inverted message_id hash' do
|
36
|
-
@response.message_id_hash.should == @message_id.invert
|
37
|
-
end
|
38
|
-
|
39
35
|
should 'allow access to message_ids array' do
|
40
36
|
@response.message_ids.should == ['141421', '173205']
|
41
37
|
end
|
42
38
|
|
43
39
|
should 'allow access to message_id for a given phone number' do
|
44
|
-
@response
|
45
|
-
@response
|
40
|
+
@response['999314159265'].should == '141421'
|
41
|
+
@response['999271828182'].should == '173205'
|
46
42
|
end
|
47
43
|
|
48
44
|
should 'allow access to sent_text' do
|
@@ -144,6 +140,10 @@ class ResponseTest < Test::Unit::TestCase
|
|
144
140
|
@response.messages.should == @messages
|
145
141
|
end
|
146
142
|
|
143
|
+
should 'allow access to message_ids array' do
|
144
|
+
@response.message_ids.should == ['141421', '173205']
|
145
|
+
end
|
146
|
+
|
147
147
|
should 'allow access to message_id for all messages' do
|
148
148
|
@response.messages.first.message_id.should == '141421'
|
149
149
|
end
|
data/textmagic.gemspec
CHANGED