locasms 0.1.2 → 0.1.4
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.
- 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
|