moceansdk 0.1.6 → 1.1.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.
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