locasms 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/locasms/client.rb +33 -7
- data/lib/locasms/exception.rb +30 -0
- data/lib/locasms/rest_client.rb +25 -2
- data/lib/locasms/version.rb +1 -1
- data/lib/locasms.rb +1 -0
- data/spec/lib/locasms/client_spec.rb +6 -0
- data/spec/lib/locasms/rest_client_spec.rb +24 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3206ae592ae0a88e7f3622634cfc9eb3bfa1f61
|
4
|
+
data.tar.gz: c183953bd011a3b8515fee13e4d35e59219d3f43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aa9723d090e9549008084b59217db867dd5584ead9e2b6b54f137c4f0b17af73d010236bbe6ea480828c42b1e818280e410fdeaace6e0fe4be821f04004cd36
|
7
|
+
data.tar.gz: 4d46ad710feacdf3eae061b1c3a69cdf48754ea50c4c48150b66b75a67cf1ded264988d1f100a81d9a180b0b14b61653cae3752c5cfc27d866ca3b74db1503af
|
data/README.md
CHANGED
data/lib/locasms/client.rb
CHANGED
@@ -24,7 +24,7 @@ module LocaSMS
|
|
24
24
|
# @return [String] campaign id on success
|
25
25
|
# @raise [LocaSMS::Exception] if bad numbers were given
|
26
26
|
def deliver(message, *mobiles)
|
27
|
-
rest.get
|
27
|
+
rest.get(:sendsms, msg: message, numbers: numbers(mobiles))['data']
|
28
28
|
end
|
29
29
|
|
30
30
|
# Schedule the send of a message to one or more mobiles
|
@@ -35,34 +35,60 @@ module LocaSMS
|
|
35
35
|
# @raise [LocaSMS::Exception] if bad numbers were given
|
36
36
|
def deliver_at(message, datetime, *mobiles)
|
37
37
|
date, time = Helpers::DateTimeHelper.split datetime
|
38
|
-
rest.get
|
38
|
+
rest.get(:sendsms, msg: message, numbers: numbers(mobiles), jobdate: date, jobtime: time)['data']
|
39
39
|
end
|
40
40
|
|
41
41
|
# Get de current amount of sending credits
|
42
42
|
# @return [Fixnum] returns the balance on success
|
43
43
|
def balance
|
44
|
-
rest.get
|
44
|
+
rest.get(:getbalance)['data']
|
45
45
|
end
|
46
46
|
|
47
47
|
# Gets the current status of the given campaign
|
48
48
|
# @param [String] id campaign id
|
49
|
-
# @return
|
49
|
+
# @return [Array<Hash>] {campaign_id: id, delivery_id: delivery_id, enqueue_time: enqueue_time, delivery_time: delivery_time, status: status, carrier: carrier, mobile_number: mobile_number, message: message }
|
50
50
|
def campaign_status(id)
|
51
|
-
rest.get
|
51
|
+
response = rest.get(:getstatus, id: id)
|
52
|
+
begin
|
53
|
+
CSV.new(response['data'] || '', col_sep: ';', quote_char: '"').map do |delivery_id, _, enqueue_time, _, delivery_time, _, status, _, _, carrier, mobile_number, _, message|
|
54
|
+
status = if status =~ /aguardando envio/i
|
55
|
+
:waiting
|
56
|
+
elsif status =~ /sucesso/i
|
57
|
+
:success
|
58
|
+
elsif status =~ /numero invalido|nao cadastrado/i
|
59
|
+
:invalid
|
60
|
+
else
|
61
|
+
:unknown
|
62
|
+
end
|
63
|
+
|
64
|
+
{
|
65
|
+
campaign_id: id,
|
66
|
+
delivery_id: delivery_id,
|
67
|
+
enqueue_time: enqueue_time,
|
68
|
+
delivery_time: delivery_time,
|
69
|
+
status: status,
|
70
|
+
carrier: carrier,
|
71
|
+
mobile_number: mobile_number,
|
72
|
+
message: message
|
73
|
+
}
|
74
|
+
end
|
75
|
+
rescue
|
76
|
+
raise Exception.new 'Invalid delivery response data'
|
77
|
+
end
|
52
78
|
end
|
53
79
|
|
54
80
|
# Holds the given campaign to fire
|
55
81
|
# @param [String] id campaign id
|
56
82
|
# @return [TrueClass,FalseClass] returns true on success
|
57
83
|
def campaign_hold(id)
|
58
|
-
rest.get
|
84
|
+
rest.get(:holdsms, id: id)['data']
|
59
85
|
end
|
60
86
|
|
61
87
|
# Restart firing the given campaign
|
62
88
|
# @param [String] id campaign id
|
63
89
|
# @return [TrueClass,FalseClass] returns true on success
|
64
90
|
def campaign_release(id)
|
65
|
-
rest.get
|
91
|
+
rest.get(:releasesms, id: id)['data']
|
66
92
|
end
|
67
93
|
|
68
94
|
private
|
data/lib/locasms/exception.rb
CHANGED
@@ -1,6 +1,36 @@
|
|
1
1
|
module LocaSMS
|
2
2
|
|
3
|
+
# Common base exception
|
3
4
|
class Exception < ::Exception
|
5
|
+
attr_reader :raw, :action
|
6
|
+
|
7
|
+
def initialize(data = {})
|
8
|
+
@raw = data[:raw]
|
9
|
+
@action = data[:data]
|
10
|
+
|
11
|
+
super data[:message] || default_message
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def default_message
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# Raised when asked for an invalid operation
|
22
|
+
# @see https://github.com/mcorp/locasms/wiki/A-API-de-envio#lista-das-a%C3%A7%C3%B5es-dispon%C3%ADveis
|
23
|
+
class InvalidOperation < Exception
|
24
|
+
def default_message
|
25
|
+
'Invalid Operation'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Raised when the given credentials are invalid
|
30
|
+
class InvalidLogin < Exception
|
31
|
+
def default_message
|
32
|
+
'Invalid Login'
|
33
|
+
end
|
4
34
|
end
|
5
35
|
|
6
36
|
end
|
data/lib/locasms/rest_client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module LocaSMS
|
2
4
|
|
3
5
|
# Class that handle http calls to LocaSMS api
|
@@ -16,25 +18,29 @@ module LocaSMS
|
|
16
18
|
# Performs a GET call for an action
|
17
19
|
# @param [String, Symbol] action the given action to perform
|
18
20
|
# @param [Hash] params given parameters to send
|
19
|
-
# @return [
|
21
|
+
# @return [Hash] json parsed response
|
20
22
|
#
|
21
23
|
# @example Calling with no extra parameters
|
22
24
|
#
|
23
25
|
# client = LocaSMS::RestClient('http://localhost:3000', lgn: 'LOGIN', pwd: 'PASSWORD')
|
24
26
|
# # => GET http://localhost:3000?lgn=LOGIN&pws=PASSWORD&action=getballance
|
25
27
|
# client.get :getballance
|
28
|
+
# # => {"status"=>1,"data"=>341,"msg"=>nil}
|
26
29
|
#
|
27
30
|
# @example Calling with extra parameters
|
28
31
|
#
|
29
32
|
# client = LocaSMS::RestClient('http://localhost:3000', lgn: 'LOGIN', pwd: 'PASSWORD')
|
30
33
|
# # => GET http://localhost:3000?lgn=LOGIN&pws=PASSWORD&action=holdsms&id=345678
|
31
34
|
# client.get :holdsms, id: 345678
|
35
|
+
# # => {"status"=>1,"data"=>nil,"msg"=>"SUCESSO"}
|
32
36
|
#
|
33
37
|
# @see https://github.com/mcorp/locasms/wiki/A-API-de-envio#lista-das-a%C3%A7%C3%B5es-dispon%C3%ADveis List of avaiable actions
|
38
|
+
# @raise [LocaSMS::InvalidOperation] when asked for an invalid operation
|
39
|
+
# @raise [LocaSMS::InvalidLogin] when the given credentials are invalid
|
34
40
|
def get(action, params={})
|
35
41
|
params = params_for action, params
|
36
42
|
response = ::RestClient.get base_url, params: params
|
37
|
-
|
43
|
+
parse_response(action, response)
|
38
44
|
end
|
39
45
|
|
40
46
|
# Composes the parameters hash
|
@@ -52,6 +58,23 @@ module LocaSMS
|
|
52
58
|
def params_for(action, params={})
|
53
59
|
{action: action}.merge(base_params).merge(params)
|
54
60
|
end
|
61
|
+
|
62
|
+
# Parses a result trying to get it in json
|
63
|
+
# @param [String, Symbol] action the given action to perform
|
64
|
+
# @param [String] response body
|
65
|
+
# @return [Hash] json parsed response
|
66
|
+
# @raise [LocaSMS::InvalidOperation] when asked for an invalid operation
|
67
|
+
# @raise [LocaSMS::InvalidLogin] when the given credentials are invalid
|
68
|
+
def parse_response(action, response)
|
69
|
+
raise InvalidOperation.new(action: action) if response =~ /^0:OPERACAO INVALIDA$/i
|
70
|
+
|
71
|
+
j = JSON.parse(response) rescue { 'status' => 1, 'data' => response, 'msg' => nil }
|
72
|
+
|
73
|
+
return j if j['status'] == 1 or action == :getstatus
|
74
|
+
|
75
|
+
raise InvalidLogin.new(action: action) if j['msg'] =~ /^falha ao realizar login$/i
|
76
|
+
raise Exception.new(message: j['msg'], raw: response, action: action)
|
77
|
+
end
|
55
78
|
end
|
56
79
|
|
57
80
|
end
|
data/lib/locasms/version.rb
CHANGED
data/lib/locasms.rb
CHANGED
@@ -19,6 +19,7 @@ describe LocaSMS::Client do
|
|
19
19
|
rest_client.should_receive(:get)
|
20
20
|
.once
|
21
21
|
.with(:sendsms, msg: 'given message', numbers:'XXX')
|
22
|
+
.and_return({})
|
22
23
|
|
23
24
|
subject.deliver 'given message', :a, :b, :c
|
24
25
|
end
|
@@ -50,6 +51,7 @@ describe LocaSMS::Client do
|
|
50
51
|
rest_client.should_receive(:get)
|
51
52
|
.once
|
52
53
|
.with(:sendsms, msg: 'given message', numbers:'XXX', jobdate: 'date', jobtime: 'time')
|
54
|
+
.and_return({})
|
53
55
|
|
54
56
|
subject.deliver_at 'given message', :datetime, :a, :b, :c
|
55
57
|
end
|
@@ -76,6 +78,7 @@ describe LocaSMS::Client do
|
|
76
78
|
rest_client.should_receive(:get)
|
77
79
|
.once
|
78
80
|
.with(:getbalance)
|
81
|
+
.and_return({})
|
79
82
|
|
80
83
|
subject.balance
|
81
84
|
end
|
@@ -92,6 +95,7 @@ describe LocaSMS::Client do
|
|
92
95
|
rest_client.should_receive(:get)
|
93
96
|
.once
|
94
97
|
.with(rest_method, id: '12345')
|
98
|
+
.and_return({})
|
95
99
|
|
96
100
|
subject.send method, '12345'
|
97
101
|
end
|
@@ -99,6 +103,8 @@ describe LocaSMS::Client do
|
|
99
103
|
it{ check_for :campaign_status }
|
100
104
|
it{ check_for :campaign_hold }
|
101
105
|
it{ check_for :campaign_release }
|
106
|
+
|
107
|
+
it 'Should have tests to cover campaign_status csv result'
|
102
108
|
end
|
103
109
|
|
104
110
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe LocaSMS::RestClient do
|
4
|
-
|
5
4
|
describe '.initialize' do
|
6
5
|
context 'When giving proper initialization parameters' do
|
7
6
|
subject { LocaSMS::RestClient.new :url, :params }
|
@@ -21,4 +20,28 @@ describe LocaSMS::RestClient do
|
|
21
20
|
it{ subject.params_for(:action, p1: 10).should == {action: :action, b1: 'X', p1: 10} }
|
22
21
|
end
|
23
22
|
|
23
|
+
describe '#parse_response' do
|
24
|
+
subject { LocaSMS::RestClient.new :url, :params }
|
25
|
+
|
26
|
+
it 'Should raise exception on invalid operation' do
|
27
|
+
lambda{ subject.parse_response(:action, '0:OPERACAO INVALIDA') }.should raise_error(LocaSMS::InvalidOperation)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'Should raise exception on a failed response' do
|
31
|
+
lambda{ subject.parse_response(:action, '{"status":0,"data":null,"msg":"FALHA EPICA"}') }.should raise_error(LocaSMS::Exception, 'FALHA EPICA')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'Should raise exception on a failed login attempt' do
|
35
|
+
lambda{ subject.parse_response(:action, '{"status":0,"data":null,"msg":"FALHA AO REALIZAR LOGIN"}') }.should raise_error(LocaSMS::InvalidLogin)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'Should return the non-json value as a json' do
|
39
|
+
subject.parse_response(:action, 'non-json return').should == {'status' => 1, 'data' => 'non-json return', "msg" => nil}
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'Should return a parsed json return' do
|
43
|
+
subject.parse_response(:action, '{"status":1,"data":28,"msg":null}').should == {'status' => 1, 'data' => 28, "msg" => nil}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
24
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: locasms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adilson Carvalho
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|