moceansdk 0.1.6 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. data/LICENSE.txt +1 -1
  3. data/README.md +75 -57
  4. data/lib/moceansdk.rb +51 -5
  5. data/lib/moceansdk/auth/abstract_auth.rb +15 -0
  6. data/lib/moceansdk/auth/basic.rb +29 -0
  7. data/lib/moceansdk/client.rb +70 -14
  8. data/lib/moceansdk/exceptions/mocean_error.rb +18 -0
  9. data/lib/moceansdk/exceptions/required_field_exception.rb +8 -0
  10. data/lib/moceansdk/modules/abstact_client.rb +54 -0
  11. data/lib/moceansdk/modules/account/balance.rb +26 -22
  12. data/lib/moceansdk/modules/account/pricing.rb +37 -37
  13. data/lib/moceansdk/modules/command/command.rb +47 -0
  14. data/lib/moceansdk/modules/command/mc.rb +40 -0
  15. data/lib/moceansdk/modules/command/mc_builder.rb +30 -0
  16. data/lib/moceansdk/modules/command/mc_object/abstract_mc.rb +36 -0
  17. data/lib/moceansdk/modules/command/mc_object/send_sms.rb +41 -0
  18. data/lib/moceansdk/modules/command/mc_object/tg_request_contact.rb +49 -0
  19. data/lib/moceansdk/modules/command/mc_object/tg_send_animation.rb +41 -0
  20. data/lib/moceansdk/modules/command/mc_object/tg_send_audio.rb +41 -0
  21. data/lib/moceansdk/modules/command/mc_object/tg_send_document.rb +41 -0
  22. data/lib/moceansdk/modules/command/mc_object/tg_send_photo.rb +41 -0
  23. data/lib/moceansdk/modules/command/mc_object/tg_send_text.rb +41 -0
  24. data/lib/moceansdk/modules/command/mc_object/tg_send_video.rb +41 -0
  25. data/lib/moceansdk/modules/message/channel.rb +13 -0
  26. data/lib/moceansdk/modules/message/message_status.rb +29 -24
  27. data/lib/moceansdk/modules/message/sms.rb +74 -96
  28. data/lib/moceansdk/modules/message/verify_request.rb +83 -58
  29. data/lib/moceansdk/modules/message/verify_validate.rb +33 -37
  30. data/lib/moceansdk/modules/number_lookup/number_lookup.rb +34 -0
  31. data/lib/moceansdk/modules/response_factory.rb +50 -0
  32. data/lib/moceansdk/modules/transmitter.rb +112 -0
  33. data/lib/moceansdk/modules/voice/mc.rb +63 -0
  34. data/lib/moceansdk/modules/voice/mc_builder.rb +30 -0
  35. data/lib/moceansdk/modules/voice/mc_object/abstract_mc.rb +38 -0
  36. data/lib/moceansdk/modules/voice/mc_object/collect.rb +39 -0
  37. data/lib/moceansdk/modules/voice/mc_object/dial.rb +31 -0
  38. data/lib/moceansdk/modules/voice/mc_object/play.rb +31 -0
  39. data/lib/moceansdk/modules/voice/mc_object/record.rb +19 -0
  40. data/lib/moceansdk/modules/voice/mc_object/say.rb +43 -0
  41. data/lib/moceansdk/modules/voice/mc_object/sleep.rb +23 -0
  42. data/lib/moceansdk/modules/voice/voice.rb +84 -0
  43. data/lib/moceansdk/utils.rb +15 -0
  44. data/lib/moceansdk/version.rb +1 -1
  45. data/moceansdk.gemspec +13 -6
  46. metadata +97 -19
  47. data/lib/moceansdk/init.rb +0 -4
  48. data/lib/moceansdk/mocean.rb +0 -52
  49. data/lib/moceansdk/modules/abstract.rb +0 -142
@@ -1,38 +1,34 @@
1
- require_relative "../abstract"
2
-
3
- class Verify_validate < MoceanFactory
4
-
5
- def __init__ client
6
- super(client)
7
- @required_fields = ['mocean-api-key','mocean-api-secret','mocean-reqid','mocean-code']
8
- end
9
-
10
- def setReqid param
11
- @params['mocean-reqid'] = param
12
- return self
13
- end
14
-
15
- def setCode param
16
- @params['mocean-code'] = param
17
- return self
18
- end
19
-
20
- def setRespFormat param
21
- @params['mocean-resp-format'] = param
22
- return self
23
- end
24
-
25
- def create params = {}
26
- reset
27
- super(param)
28
- return self
29
- end
30
-
31
- def send
32
- createFinalParams
33
- isRequiredFieldsSet
34
- response = Transmitter.new('/rest/1/verify/check','post',@params)
35
- return response.getResponse()
36
- end
37
-
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
38
34
  end
@@ -0,0 +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
@@ -0,0 +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
50
+ end
@@ -0,0 +1,112 @@
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
+ verify_ssl: true
18
+ }
19
+ end
20
+
21
+ def get(uri, params)
22
+ request_and_parse_body('get', uri, params)
23
+ end
24
+
25
+ def post(uri, params)
26
+ request_and_parse_body('post', uri, params)
27
+ end
28
+
29
+ def request_and_parse_body(method, uri, params)
30
+ res = request(method, uri, params)
31
+
32
+ format_response(res.to_s, params[:'mocean-resp-format'] == 'xml', uri)
33
+ end
34
+
35
+ def request(method, uri, params)
36
+ params[:'mocean-medium'] = 'RUBY-SDK'
37
+
38
+ # use json if default not set
39
+ params[:'mocean-resp-format'] = 'json' unless params[:'mocean-resp-format']
40
+
41
+ url = @options[:base_url] + '/rest/' + @options[:version] + uri
42
+
43
+ if method.casecmp('get').zero?
44
+ HTTP.follow.get(url, params: params, ssl_context: make_ssl_context)
45
+ else
46
+ HTTP.post(url, form: params, ssl_context: make_ssl_context)
47
+ end
48
+ end
49
+
50
+ def format_response(response_text, is_xml = false, uri = nil)
51
+ raw_response = response_text
52
+
53
+ # format for v1
54
+ if !uri.nil? && @options[:version] == '1' && is_xml
55
+ if uri == '/account/pricing'
56
+ response_text = response_text
57
+ .sub('<data>', '<destinations>')
58
+ .sub('</data>', '</destinations>')
59
+ elsif uri == '/sms'
60
+ response_text = response_text
61
+ .sub('<result>', '<result><messages>')
62
+ .sub('</result>', '</messages></result>')
63
+ end
64
+ end
65
+
66
+ processed_response = ResponseFactory.create_object(
67
+ response_text
68
+ .sub('<verify_request>', '')
69
+ .sub('</verify_request>', '')
70
+ .sub('<verify_check>', '')
71
+ .sub('</verify_check>', '')
72
+ )
73
+
74
+ if processed_response['status'] && processed_response['status'] != '0' && processed_response['status'] != 0
75
+ processed_response.raw_response = raw_response
76
+ raise Moceansdk::Exceptions::MoceanError.new(processed_response['err_msg'], processed_response)
77
+ end
78
+
79
+ # format for v1
80
+ if !uri.nil? && is_xml
81
+ if uri == '/account/pricing'
82
+ processed_response.destinations = processed_response.destinations.destination
83
+ elsif uri == '/sms'
84
+ unless processed_response.messages.message.is_a? Array
85
+ processed_response.messages.message = [processed_response.messages.message]
86
+ end
87
+ processed_response.messages = processed_response.messages.message
88
+ elsif uri == '/voice/dial'
89
+ unless processed_response.calls.call.is_a? Array
90
+ processed_response.calls.call = [processed_response.calls.call]
91
+ end
92
+ processed_response.calls = processed_response.calls.call
93
+ end
94
+ end
95
+
96
+ processed_response.raw_response = raw_response
97
+ processed_response
98
+ end
99
+
100
+ def make_ssl_context
101
+ if @options[:verify_ssl]
102
+ return nil
103
+ end
104
+
105
+ ctx = OpenSSL::SSL::SSLContext.new
106
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
107
+ ctx
108
+ end
109
+ end
110
+
111
+ end
112
+ end
@@ -0,0 +1,63 @@
1
+ module Moceansdk
2
+ module Modules
3
+ module Voice
4
+
5
+ class Mc
6
+ def self.say(text = nil)
7
+ ins = McObject::Say.new
8
+
9
+ unless text.nil?
10
+ ins.text = text
11
+ end
12
+
13
+ ins
14
+ end
15
+
16
+ def self.play(file = nil)
17
+ ins = McObject::Play.new
18
+
19
+ unless file.nil?
20
+ ins.files = file
21
+ end
22
+
23
+ ins
24
+ end
25
+
26
+ def self.dial(to = nil)
27
+ ins = McObject::Dial.new
28
+
29
+ unless to.nil?
30
+ ins.to = to
31
+ end
32
+
33
+ ins
34
+ end
35
+
36
+ def self.collect(event_url = nil)
37
+ ins = McObject::Collect.new
38
+
39
+ unless event_url.nil?
40
+ ins.event_url = event_url
41
+ end
42
+
43
+ ins
44
+ end
45
+
46
+ def self.sleep(duration = nil)
47
+ ins = McObject::Sleep.new
48
+
49
+ unless duration.nil?
50
+ ins.duration = duration
51
+ end
52
+
53
+ ins
54
+ end
55
+
56
+ def self.record
57
+ McObject::Record.new
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,30 @@
1
+ module Moceansdk
2
+ module Modules
3
+ module Voice
4
+
5
+ class McBuilder
6
+ def initialize
7
+ @mc = []
8
+ end
9
+
10
+ def add(mc)
11
+ unless mc.is_a? McObject::AbstractMc
12
+ raise Moceansdk::Exceptions::MoceanError, 'mc_object must extend AbstractMc'
13
+ end
14
+
15
+ @mc.push(mc)
16
+ self
17
+ end
18
+
19
+ def build
20
+ converted = []
21
+ @mc.each do |mc|
22
+ converted.push(mc.get_request_data)
23
+ end
24
+ converted
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,38 @@
1
+ module Moceansdk
2
+ module Modules
3
+ module Voice
4
+ module McObject
5
+
6
+ class AbstractMc
7
+ def initialize(params = nil)
8
+ @params = {}
9
+
10
+ @params = Moceansdk::Utils.convert_to_symbol_hash(params) unless params.nil?
11
+ end
12
+
13
+ def get_request_data
14
+ @params = Moceansdk::Utils.convert_to_symbol_hash(@params)
15
+
16
+ required_key.each do |key|
17
+ if @params[:"#{key}"].nil?
18
+ raise Moceansdk::Exceptions::RequiredFieldException, "#{key} is mandatory field, can't leave empty (#{self})"
19
+ end
20
+ end
21
+
22
+ @params[:action] = action
23
+ @params
24
+ end
25
+
26
+ def required_key
27
+ raise NotImplementedError, 'AbstractMc is a abstract class'
28
+ end
29
+
30
+ def action
31
+ raise NotImplementedError, 'AbstractMc is a abstract class'
32
+ end
33
+ end
34
+
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,39 @@
1
+ module Moceansdk
2
+ module Modules
3
+ module Voice
4
+ module McObject
5
+
6
+ class Collect < AbstractMc
7
+ def event_url=(param)
8
+ @params[:'event-url'] = param
9
+ end
10
+
11
+ def minimum=(param)
12
+ @params[:min] = param
13
+ end
14
+
15
+ def maximum=(param)
16
+ @params[:max] = param
17
+ end
18
+
19
+ def terminators=(param)
20
+ @params[:terminators] = param
21
+ end
22
+
23
+ def timeout=(param)
24
+ @params[:timeout] = param
25
+ end
26
+
27
+ def required_key
28
+ ['event-url', 'min', 'max', 'timeout']
29
+ end
30
+
31
+ def action
32
+ 'collect'
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
39
+ end