moceansdk 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -21
- data/README.md +74 -74
- data/lib/moceansdk.rb +27 -27
- data/lib/moceansdk/auth/abstract_auth.rb +15 -15
- data/lib/moceansdk/auth/basic.rb +29 -29
- data/lib/moceansdk/client.rb +62 -62
- data/lib/moceansdk/exceptions/mocean_error.rb +18 -18
- data/lib/moceansdk/exceptions/required_field_exception.rb +8 -8
- data/lib/moceansdk/modules/abstact_client.rb +53 -53
- data/lib/moceansdk/modules/account/balance.rb +26 -26
- data/lib/moceansdk/modules/account/pricing.rb +37 -37
- data/lib/moceansdk/modules/message/channel.rb +11 -11
- data/lib/moceansdk/modules/message/message_status.rb +29 -29
- data/lib/moceansdk/modules/message/sms.rb +74 -74
- data/lib/moceansdk/modules/message/verify_request.rb +81 -81
- data/lib/moceansdk/modules/message/verify_validate.rb +33 -33
- data/lib/moceansdk/modules/number_lookup/number_lookup.rb +34 -34
- data/lib/moceansdk/modules/response_factory.rb +49 -49
- data/lib/moceansdk/modules/transmitter.rb +91 -91
- data/lib/moceansdk/utils.rb +9 -9
- data/lib/moceansdk/version.rb +3 -3
- data/moceansdk.gemspec +26 -25
- metadata +27 -7
@@ -1,82 +1,82 @@
|
|
1
|
-
module Moceansdk
|
2
|
-
module Modules
|
3
|
-
module Message
|
4
|
-
|
5
|
-
class VerifyRequest < Moceansdk::Modules::AbstractClient
|
6
|
-
attr_reader :channel, :is_resend
|
7
|
-
|
8
|
-
def initialize(obj_auth, transmitter)
|
9
|
-
super(obj_auth, transmitter)
|
10
|
-
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-to', 'mocean-brand']
|
11
|
-
@channel = Channel::AUTO
|
12
|
-
@is_resend = false
|
13
|
-
end
|
14
|
-
|
15
|
-
def to=(param)
|
16
|
-
@params['mocean-to'] = param
|
17
|
-
end
|
18
|
-
|
19
|
-
def brand=(param)
|
20
|
-
@params['mocean-brand'] = param
|
21
|
-
end
|
22
|
-
|
23
|
-
def from=(param)
|
24
|
-
@params['mocean-from'] = param
|
25
|
-
end
|
26
|
-
|
27
|
-
def code_length=(param)
|
28
|
-
@params['mocean-code-length'] = param
|
29
|
-
end
|
30
|
-
|
31
|
-
def template=(param)
|
32
|
-
@params['mocean-template'] = param
|
33
|
-
end
|
34
|
-
|
35
|
-
def pin_validity=(param)
|
36
|
-
@params['mocean-pin-validity'] = param
|
37
|
-
end
|
38
|
-
|
39
|
-
def next_event_wait=(param)
|
40
|
-
@params['mocean-next-event-wait'] = param
|
41
|
-
end
|
42
|
-
|
43
|
-
def resp_format=(param)
|
44
|
-
@params['mocean-resp-format'] = param
|
45
|
-
end
|
46
|
-
|
47
|
-
def send_as(channel)
|
48
|
-
@channel = channel
|
49
|
-
self
|
50
|
-
end
|
51
|
-
|
52
|
-
def send(params = {})
|
53
|
-
create(params)
|
54
|
-
create_final_params
|
55
|
-
required_field_set?
|
56
|
-
|
57
|
-
verify_request_url = '/verify'
|
58
|
-
verify_request_url += if @is_resend
|
59
|
-
'/resend'
|
60
|
-
else
|
61
|
-
'/req'
|
62
|
-
end
|
63
|
-
|
64
|
-
if @channel == Channel::SMS
|
65
|
-
verify_request_url += '/sms'
|
66
|
-
end
|
67
|
-
|
68
|
-
@transmitter.post(verify_request_url, @params)
|
69
|
-
end
|
70
|
-
|
71
|
-
def resend(params = {})
|
72
|
-
send_as Channel::SMS
|
73
|
-
@is_resend = true
|
74
|
-
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-reqid']
|
75
|
-
|
76
|
-
send(params)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
end
|
1
|
+
module Moceansdk
|
2
|
+
module Modules
|
3
|
+
module Message
|
4
|
+
|
5
|
+
class VerifyRequest < Moceansdk::Modules::AbstractClient
|
6
|
+
attr_reader :channel, :is_resend
|
7
|
+
|
8
|
+
def initialize(obj_auth, transmitter)
|
9
|
+
super(obj_auth, transmitter)
|
10
|
+
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-to', 'mocean-brand']
|
11
|
+
@channel = Channel::AUTO
|
12
|
+
@is_resend = false
|
13
|
+
end
|
14
|
+
|
15
|
+
def to=(param)
|
16
|
+
@params['mocean-to'] = param
|
17
|
+
end
|
18
|
+
|
19
|
+
def brand=(param)
|
20
|
+
@params['mocean-brand'] = param
|
21
|
+
end
|
22
|
+
|
23
|
+
def from=(param)
|
24
|
+
@params['mocean-from'] = param
|
25
|
+
end
|
26
|
+
|
27
|
+
def code_length=(param)
|
28
|
+
@params['mocean-code-length'] = param
|
29
|
+
end
|
30
|
+
|
31
|
+
def template=(param)
|
32
|
+
@params['mocean-template'] = param
|
33
|
+
end
|
34
|
+
|
35
|
+
def pin_validity=(param)
|
36
|
+
@params['mocean-pin-validity'] = param
|
37
|
+
end
|
38
|
+
|
39
|
+
def next_event_wait=(param)
|
40
|
+
@params['mocean-next-event-wait'] = param
|
41
|
+
end
|
42
|
+
|
43
|
+
def resp_format=(param)
|
44
|
+
@params['mocean-resp-format'] = param
|
45
|
+
end
|
46
|
+
|
47
|
+
def send_as(channel)
|
48
|
+
@channel = channel
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def send(params = {})
|
53
|
+
create(params)
|
54
|
+
create_final_params
|
55
|
+
required_field_set?
|
56
|
+
|
57
|
+
verify_request_url = '/verify'
|
58
|
+
verify_request_url += if @is_resend
|
59
|
+
'/resend'
|
60
|
+
else
|
61
|
+
'/req'
|
62
|
+
end
|
63
|
+
|
64
|
+
if @channel == Channel::SMS
|
65
|
+
verify_request_url += '/sms'
|
66
|
+
end
|
67
|
+
|
68
|
+
@transmitter.post(verify_request_url, @params)
|
69
|
+
end
|
70
|
+
|
71
|
+
def resend(params = {})
|
72
|
+
send_as Channel::SMS
|
73
|
+
@is_resend = true
|
74
|
+
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-reqid']
|
75
|
+
|
76
|
+
send(params)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
82
82
|
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
module Moceansdk
|
2
|
-
module Modules
|
3
|
-
module Message
|
4
|
-
|
5
|
-
class VerifyValidate < Moceansdk::Modules::AbstractClient
|
6
|
-
def initialize(obj_auth, transmitter)
|
7
|
-
super(obj_auth, transmitter)
|
8
|
-
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-reqid', 'mocean-code']
|
9
|
-
end
|
10
|
-
|
11
|
-
def reqid=(param)
|
12
|
-
@params['mocean-reqid'] = param
|
13
|
-
end
|
14
|
-
|
15
|
-
def code=(param)
|
16
|
-
@params['mocean-code'] = param
|
17
|
-
end
|
18
|
-
|
19
|
-
def resp_format=(param)
|
20
|
-
@params['mocean-resp-format'] = param
|
21
|
-
end
|
22
|
-
|
23
|
-
def send(params = {})
|
24
|
-
create(params)
|
25
|
-
create_final_params
|
26
|
-
required_field_set?
|
27
|
-
|
28
|
-
@transmitter.post('/verify/check', @params)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
1
|
+
module Moceansdk
|
2
|
+
module Modules
|
3
|
+
module Message
|
4
|
+
|
5
|
+
class VerifyValidate < Moceansdk::Modules::AbstractClient
|
6
|
+
def initialize(obj_auth, transmitter)
|
7
|
+
super(obj_auth, transmitter)
|
8
|
+
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-reqid', 'mocean-code']
|
9
|
+
end
|
10
|
+
|
11
|
+
def reqid=(param)
|
12
|
+
@params['mocean-reqid'] = param
|
13
|
+
end
|
14
|
+
|
15
|
+
def code=(param)
|
16
|
+
@params['mocean-code'] = param
|
17
|
+
end
|
18
|
+
|
19
|
+
def resp_format=(param)
|
20
|
+
@params['mocean-resp-format'] = param
|
21
|
+
end
|
22
|
+
|
23
|
+
def send(params = {})
|
24
|
+
create(params)
|
25
|
+
create_final_params
|
26
|
+
required_field_set?
|
27
|
+
|
28
|
+
@transmitter.post('/verify/check', @params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
34
|
end
|
@@ -1,34 +1,34 @@
|
|
1
|
-
module Moceansdk
|
2
|
-
module Modules
|
3
|
-
module NumberLookup
|
4
|
-
|
5
|
-
class NumberLookup < Moceansdk::Modules::AbstractClient
|
6
|
-
def initialize(obj_auth, transmitter)
|
7
|
-
super(obj_auth, transmitter)
|
8
|
-
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-to']
|
9
|
-
end
|
10
|
-
|
11
|
-
def to=(param)
|
12
|
-
@params['mocean-to'] = param
|
13
|
-
end
|
14
|
-
|
15
|
-
def nl_url=(param)
|
16
|
-
@params['mocean-nl-url'] = param
|
17
|
-
end
|
18
|
-
|
19
|
-
def resp_format=(param)
|
20
|
-
@params['mocean-resp-format'] = param
|
21
|
-
end
|
22
|
-
|
23
|
-
def inquiry(params = {})
|
24
|
-
create(params)
|
25
|
-
create_final_params
|
26
|
-
required_field_set?
|
27
|
-
|
28
|
-
@transmitter.post('/nl', @params)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
1
|
+
module Moceansdk
|
2
|
+
module Modules
|
3
|
+
module NumberLookup
|
4
|
+
|
5
|
+
class NumberLookup < Moceansdk::Modules::AbstractClient
|
6
|
+
def initialize(obj_auth, transmitter)
|
7
|
+
super(obj_auth, transmitter)
|
8
|
+
@required_fields = ['mocean-api-key', 'mocean-api-secret', 'mocean-to']
|
9
|
+
end
|
10
|
+
|
11
|
+
def to=(param)
|
12
|
+
@params['mocean-to'] = param
|
13
|
+
end
|
14
|
+
|
15
|
+
def nl_url=(param)
|
16
|
+
@params['mocean-nl-url'] = param
|
17
|
+
end
|
18
|
+
|
19
|
+
def resp_format=(param)
|
20
|
+
@params['mocean-resp-format'] = param
|
21
|
+
end
|
22
|
+
|
23
|
+
def inquiry(params = {})
|
24
|
+
create(params)
|
25
|
+
create_final_params
|
26
|
+
required_field_set?
|
27
|
+
|
28
|
+
@transmitter.post('/nl', @params)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -1,50 +1,50 @@
|
|
1
|
-
module Moceansdk
|
2
|
-
module Modules
|
3
|
-
|
4
|
-
class ResponseFactory
|
5
|
-
def self.create_object(raw_response)
|
6
|
-
begin
|
7
|
-
res = JSON.load(raw_response, proc {|obj|
|
8
|
-
case obj
|
9
|
-
when Hash
|
10
|
-
obj.each {|k, v|
|
11
|
-
obj[k] = if v.is_a? Float
|
12
|
-
# hardcoded float to 4 decimal string
|
13
|
-
sprintf('%.4f', v)
|
14
|
-
elsif v.is_a? Integer
|
15
|
-
v.to_s
|
16
|
-
else
|
17
|
-
v
|
18
|
-
end
|
19
|
-
}
|
20
|
-
when Array
|
21
|
-
obj.map! {|v| v}
|
22
|
-
end
|
23
|
-
})
|
24
|
-
rescue JSON::JSONError
|
25
|
-
begin
|
26
|
-
res = XmlSimple.xml_in(raw_response, 'ForceArray': false)
|
27
|
-
rescue StandardError
|
28
|
-
raise Moceansdk::Exceptions::MoceanError, 'unable to parse response, ' + raw_response
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
hashed_res = HashExtended.new.merge(res)
|
33
|
-
hashed_res.to_dot
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class HashExtended < Hash
|
38
|
-
attr_accessor :raw_response
|
39
|
-
|
40
|
-
def to_s
|
41
|
-
@raw_response
|
42
|
-
end
|
43
|
-
|
44
|
-
def to_hash
|
45
|
-
inspect
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
1
|
+
module Moceansdk
|
2
|
+
module Modules
|
3
|
+
|
4
|
+
class ResponseFactory
|
5
|
+
def self.create_object(raw_response)
|
6
|
+
begin
|
7
|
+
res = JSON.load(raw_response, proc {|obj|
|
8
|
+
case obj
|
9
|
+
when Hash
|
10
|
+
obj.each {|k, v|
|
11
|
+
obj[k] = if v.is_a? Float
|
12
|
+
# hardcoded float to 4 decimal string
|
13
|
+
sprintf('%.4f', v)
|
14
|
+
elsif v.is_a? Integer
|
15
|
+
v.to_s
|
16
|
+
else
|
17
|
+
v
|
18
|
+
end
|
19
|
+
}
|
20
|
+
when Array
|
21
|
+
obj.map! {|v| v}
|
22
|
+
end
|
23
|
+
})
|
24
|
+
rescue JSON::JSONError
|
25
|
+
begin
|
26
|
+
res = XmlSimple.xml_in(raw_response, 'ForceArray': false)
|
27
|
+
rescue StandardError
|
28
|
+
raise Moceansdk::Exceptions::MoceanError, 'unable to parse response, ' + raw_response
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
hashed_res = HashExtended.new.merge(res)
|
33
|
+
hashed_res.to_dot
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class HashExtended < Hash
|
38
|
+
attr_accessor :raw_response
|
39
|
+
|
40
|
+
def to_s
|
41
|
+
@raw_response
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_hash
|
45
|
+
inspect
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
50
|
end
|
@@ -1,92 +1,92 @@
|
|
1
|
-
module Moceansdk
|
2
|
-
module Modules
|
3
|
-
|
4
|
-
class Transmitter
|
5
|
-
def initialize(options = nil)
|
6
|
-
@options = default_options
|
7
|
-
|
8
|
-
unless options.nil?
|
9
|
-
@options = @options.merge(options)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
def default_options
|
14
|
-
{
|
15
|
-
base_url: 'https://rest.moceanapi.com',
|
16
|
-
version: '2'
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def get(uri, params)
|
21
|
-
request('get', uri, params)
|
22
|
-
end
|
23
|
-
|
24
|
-
def post(uri, params)
|
25
|
-
request('post', uri, params)
|
26
|
-
end
|
27
|
-
|
28
|
-
def request(method, uri, params)
|
29
|
-
params[:'mocean-medium'] = 'RUBY-SDK'
|
30
|
-
|
31
|
-
# use json if default not set
|
32
|
-
params[:'mocean-resp-format'] = 'json' unless params[:'mocean-resp-format']
|
33
|
-
|
34
|
-
url = @options[:base_url] + '/rest/' + @options[:version] + uri
|
35
|
-
|
36
|
-
res = if method.casecmp('get').zero?
|
37
|
-
HTTP.get(url, params: params)
|
38
|
-
else
|
39
|
-
HTTP.post(url, form: params)
|
40
|
-
end
|
41
|
-
|
42
|
-
format_response(res.to_s, params[:'mocean-resp-format'] == 'xml', uri)
|
43
|
-
end
|
44
|
-
|
45
|
-
def format_response(response_text, is_xml = false, uri = nil)
|
46
|
-
raw_response = response_text
|
47
|
-
|
48
|
-
# format for v1
|
49
|
-
if !uri.nil? && @options[:version] == '1' && is_xml
|
50
|
-
if uri == '/account/pricing'
|
51
|
-
response_text = response_text
|
52
|
-
.sub('<data>', '<destinations>')
|
53
|
-
.sub('</data>', '</destinations>')
|
54
|
-
elsif uri == '/sms'
|
55
|
-
response_text = response_text
|
56
|
-
.sub('<result>', '<result><messages>')
|
57
|
-
.sub('</result>', '</messages></result>')
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
processed_response = ResponseFactory.create_object(
|
62
|
-
response_text
|
63
|
-
.sub('<verify_request>', '')
|
64
|
-
.sub('</verify_request>', '')
|
65
|
-
.sub('<verify_check>', '')
|
66
|
-
.sub('</verify_check>', '')
|
67
|
-
)
|
68
|
-
|
69
|
-
if processed_response['status'] && processed_response['status'] != '0' && processed_response['status'] != 0
|
70
|
-
processed_response.raw_response = raw_response
|
71
|
-
raise Moceansdk::Exceptions::MoceanError.new(processed_response['err_msg'], processed_response)
|
72
|
-
end
|
73
|
-
|
74
|
-
# format for v1
|
75
|
-
if !uri.nil? && is_xml
|
76
|
-
if uri == '/account/pricing'
|
77
|
-
processed_response.destinations = processed_response.destinations.destination
|
78
|
-
elsif uri == '/sms'
|
79
|
-
unless processed_response.messages.message.is_a? Array
|
80
|
-
processed_response.messages.message = [processed_response.messages.message]
|
81
|
-
end
|
82
|
-
processed_response.messages = processed_response.messages.message
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
processed_response.raw_response = raw_response
|
87
|
-
processed_response
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
1
|
+
module Moceansdk
|
2
|
+
module Modules
|
3
|
+
|
4
|
+
class Transmitter
|
5
|
+
def initialize(options = nil)
|
6
|
+
@options = default_options
|
7
|
+
|
8
|
+
unless options.nil?
|
9
|
+
@options = @options.merge(options)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def default_options
|
14
|
+
{
|
15
|
+
base_url: 'https://rest.moceanapi.com',
|
16
|
+
version: '2'
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def get(uri, params)
|
21
|
+
request('get', uri, params)
|
22
|
+
end
|
23
|
+
|
24
|
+
def post(uri, params)
|
25
|
+
request('post', uri, params)
|
26
|
+
end
|
27
|
+
|
28
|
+
def request(method, uri, params)
|
29
|
+
params[:'mocean-medium'] = 'RUBY-SDK'
|
30
|
+
|
31
|
+
# use json if default not set
|
32
|
+
params[:'mocean-resp-format'] = 'json' unless params[:'mocean-resp-format']
|
33
|
+
|
34
|
+
url = @options[:base_url] + '/rest/' + @options[:version] + uri
|
35
|
+
|
36
|
+
res = if method.casecmp('get').zero?
|
37
|
+
HTTP.get(url, params: params)
|
38
|
+
else
|
39
|
+
HTTP.post(url, form: params)
|
40
|
+
end
|
41
|
+
|
42
|
+
format_response(res.to_s, params[:'mocean-resp-format'] == 'xml', uri)
|
43
|
+
end
|
44
|
+
|
45
|
+
def format_response(response_text, is_xml = false, uri = nil)
|
46
|
+
raw_response = response_text
|
47
|
+
|
48
|
+
# format for v1
|
49
|
+
if !uri.nil? && @options[:version] == '1' && is_xml
|
50
|
+
if uri == '/account/pricing'
|
51
|
+
response_text = response_text
|
52
|
+
.sub('<data>', '<destinations>')
|
53
|
+
.sub('</data>', '</destinations>')
|
54
|
+
elsif uri == '/sms'
|
55
|
+
response_text = response_text
|
56
|
+
.sub('<result>', '<result><messages>')
|
57
|
+
.sub('</result>', '</messages></result>')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
processed_response = ResponseFactory.create_object(
|
62
|
+
response_text
|
63
|
+
.sub('<verify_request>', '')
|
64
|
+
.sub('</verify_request>', '')
|
65
|
+
.sub('<verify_check>', '')
|
66
|
+
.sub('</verify_check>', '')
|
67
|
+
)
|
68
|
+
|
69
|
+
if processed_response['status'] && processed_response['status'] != '0' && processed_response['status'] != 0
|
70
|
+
processed_response.raw_response = raw_response
|
71
|
+
raise Moceansdk::Exceptions::MoceanError.new(processed_response['err_msg'], processed_response)
|
72
|
+
end
|
73
|
+
|
74
|
+
# format for v1
|
75
|
+
if !uri.nil? && is_xml
|
76
|
+
if uri == '/account/pricing'
|
77
|
+
processed_response.destinations = processed_response.destinations.destination
|
78
|
+
elsif uri == '/sms'
|
79
|
+
unless processed_response.messages.message.is_a? Array
|
80
|
+
processed_response.messages.message = [processed_response.messages.message]
|
81
|
+
end
|
82
|
+
processed_response.messages = processed_response.messages.message
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
processed_response.raw_response = raw_response
|
87
|
+
processed_response
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
92
|
end
|