bobes-textmagic 0.2.0 → 0.2.1
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/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