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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a4069e217f9393e5b8bf55f67a6b6dff4a718f2c
4
- data.tar.gz: 1d71e45923ef237b947f6f37097da4004cd2a202
2
+ SHA256:
3
+ metadata.gz: b0b4c0c5f19f708f2e1d0f255eed1341244f64922b75cde574d9765cadc570f6
4
+ data.tar.gz: 628465a50f969494c965a77b5f0868c89ac11d0b1f0be7f2b0d17c0ac786cc8c
5
5
  SHA512:
6
- metadata.gz: 6c80e510696a3a2a6851c0e9c2977048ecaf1f4dff97c8cd11d2dcb2b6d8e383f55c50e4369c0549e4e1154674ddcb42150fbae5475fef6f111457d394b4eafb
7
- data.tar.gz: ce2eb4eacfdfcf416e94d9fd0bcc9266c830b8b9289d583c41c4812bfd0e1229737738e1228f70d2f0389ef5f124a1636b2b202d1a00af86ff218c523df10fa2
6
+ metadata.gz: a1a3f349fdf7127a1157272a7cb56cac46a03d139ff8a03f756218f5697f936ac35bb4a20ec2056de93dda42100649e88ed789d2c55f9aed375f0828d9ff0f52
7
+ data.tar.gz: 38ba32440b25ad20da427f5e5242eaf0ab03ba22b273344a140d02e887424fbb216b6a5faacdb82cf4a5b0d44926f24c49f182446b1e1a366cfe827a2c1fbff8
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2018 Micro Ocean Technologies Sdn Bhd
3
+ Copyright (c) 2018-2019 Micro Ocean Technologies Sdn Bhd
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,57 +1,75 @@
1
- MoceanAPI Client Library for Ruby
2
- ============================
3
- [![Gem Version](https://badge.fury.io/rb/moceansdk.svg)](https://badge.fury.io/rb/moceansdk)
4
-
5
- This is the Ruby client library for use Mocean's API. To use this, you'll need a Mocean account. Sign up [for free at
6
- moceanapi.com][signup].
7
-
8
- * [Installation](#installation)
9
- * [Usage](#usage)
10
- * [Example](#example)
11
-
12
- ## Installation
13
-
14
- To use the client library you'll need to have [created a Mocean account][signup].
15
-
16
- To install the Ruby client library using Gem.
17
-
18
- ```bash
19
- gem install moceansdk
20
- ```
21
-
22
- ## Usage
23
-
24
- Create a client with your API key and secret:
25
-
26
- ```ruby
27
- require "moceanapi/init"
28
-
29
- token = Client.new("API_KEY_HERE", "API_SECRET_HERE")
30
- mocean = Mocean.new(token)
31
- ```
32
-
33
- ## Example
34
-
35
- To use [Mocean's SMS API][doc_sms] to send an SMS message, call the `mocean.sms.create().send()` method.
36
-
37
- The API can be called directly, using a simple array of parameters, the keys match the [parameters of the API][doc_sms].
38
-
39
- ```ruby
40
- res = mocean.sms.create({
41
- "mocean-text"=>'Hello World',
42
- "mocean-from"=>'MOCEAN',
43
- "mocean-to"=>'60123456789'
44
- }).send()
45
-
46
- puts res
47
- ```
48
-
49
- ## License
50
-
51
- This library is released under the [MIT License][license]
52
-
53
- [signup]: https://dashboard.moceanapi.com/register?medium=github&campaign=sdk-ruby
54
- [doc_sms]: https://docs.moceanapi.com/?ruby#send-sms
55
- [doc_inbound]: https://docs.moceanapi.com/?ruby#receive-sms
56
- [doc_verify]: https://docs.moceanapi.com/?ruby#overview-3
57
- [license]: LICENSE.txt
1
+ MoceanAPI Client Library for Ruby
2
+ ============================
3
+ [![Gem Version](https://img.shields.io/gem/v/moceansdk.svg)](https://rubygems.org/gems/moceansdk)
4
+ [![build status](https://img.shields.io/travis/com/MoceanAPI/mocean-sdk-ruby.svg)](https://travis-ci.com/MoceanAPI/mocean-sdk-ruby)
5
+ [![Github build status](https://github.com/MoceanAPI/mocean-sdk-ruby/actions/workflows/build.yml/badge.svg)](https://github.com/MoceanAPI/mocean-sdk-ruby/actions/workflows/build.yml)
6
+ [![codecov](https://img.shields.io/codecov/c/github/MoceanAPI/mocean-sdk-ruby.svg)](https://codecov.io/gh/MoceanAPI/mocean-sdk-ruby)
7
+ [![codacy](https://img.shields.io/codacy/grade/7564ecfa8e7948a7ba15cb7634258c7e.svg)](https://app.codacy.com/project/MoceanAPI/mocean-sdk-ruby/dashboard)
8
+ [![MIT license](http://img.shields.io/badge/license-MIT-brightgreen.svg)](http://opensource.org/licenses/MIT)
9
+ [![total downloads](https://img.shields.io/gem/dt/moceansdk.svg)](https://rubygems.org/gems/moceansdk)
10
+
11
+ This is the Ruby client library for use Mocean's API. To use this, you'll need a Mocean account. Sign up [for free at
12
+ moceanapi.com][signup].
13
+
14
+ * [Installation](#installation)
15
+ * [Usage](#usage)
16
+ * [Example](#example)
17
+
18
+ ## Installation
19
+
20
+ To use the client library you'll need to have [created a Mocean account][signup].
21
+
22
+ To install the Ruby client library using Gem.
23
+
24
+ ```bash
25
+ gem install moceansdk
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ Create a client with your API key and secret:
31
+
32
+ ```ruby
33
+ require 'moceansdk'
34
+
35
+ credential = Moceansdk::Auth::Basic.new("API_KEY_HERE", "API_SECRET_HERE")
36
+ mocean = Moceansdk::Client.new(credential)
37
+ ```
38
+
39
+ ## Example
40
+
41
+ To use [Mocean's SMS API][doc_sms] to send an SMS message, call the `mocean.sms.send()` method.
42
+
43
+ The API can be called directly, using a simple array of parameters, the keys match the [parameters of the API][doc_sms].
44
+
45
+ ```ruby
46
+ res = mocean.sms.send({
47
+ "mocean-text": 'Hello World',
48
+ "mocean-from": 'MOCEAN',
49
+ "mocean-to": '60123456789'
50
+ })
51
+
52
+ puts res
53
+ ```
54
+
55
+ ### Responses
56
+
57
+ For your convenient, the API response has been parsed to `Hash` using [hash_dot](https://github.com/adsteel/hash_dot) package.
58
+ ```ruby
59
+ puts res # show full response string
60
+ puts res.status # show response status, '0' in this case
61
+ puts res['status'] # same as above
62
+ ```
63
+
64
+ ## Documentation
65
+
66
+ Kindly visit [MoceanApi Docs][doc_main] for more usage
67
+
68
+ ## License
69
+
70
+ This library is released under the [MIT License][license]
71
+
72
+ [signup]: https://dashboard.moceanapi.com/register?medium=github&campaign=ruby-sdk
73
+ [doc_main]: https://moceanapi.com/docs/?ruby
74
+ [doc_sms]: https://moceanapi.com/docs/?ruby#send-sms
75
+ [license]: LICENSE.txt
data/lib/moceansdk.rb CHANGED
@@ -1,6 +1,52 @@
1
- require "moceansdk/version"
2
- require "moceansdk/init"
1
+ require 'http'
2
+ require 'json'
3
+ require 'hash_dot'
4
+ require 'xmlsimple'
3
5
 
4
- module Moceansdk
5
-
6
- end
6
+ require 'moceansdk/auth/abstract_auth'
7
+ require 'moceansdk/auth/basic'
8
+ require 'moceansdk/exceptions/mocean_error'
9
+ require 'moceansdk/exceptions/required_field_exception'
10
+
11
+ require 'moceansdk/modules/abstact_client'
12
+ require 'moceansdk/modules/response_factory'
13
+ require 'moceansdk/modules/transmitter'
14
+
15
+ require 'moceansdk/modules/account/balance'
16
+ require 'moceansdk/modules/account/pricing'
17
+
18
+ require 'moceansdk/modules/message/channel'
19
+ require 'moceansdk/modules/message/message_status'
20
+ require 'moceansdk/modules/message/sms'
21
+ require 'moceansdk/modules/message/verify_request'
22
+ require 'moceansdk/modules/message/verify_validate'
23
+
24
+ require 'moceansdk/modules/number_lookup/number_lookup'
25
+
26
+ require 'moceansdk/modules/voice/mc_object/abstract_mc'
27
+ require 'moceansdk/modules/voice/mc_object/dial'
28
+ require 'moceansdk/modules/voice/mc_object/collect'
29
+ require 'moceansdk/modules/voice/mc_object/play'
30
+ require 'moceansdk/modules/voice/mc_object/record'
31
+ require 'moceansdk/modules/voice/mc_object/say'
32
+ require 'moceansdk/modules/voice/mc_object/sleep'
33
+ require 'moceansdk/modules/voice/mc'
34
+ require 'moceansdk/modules/voice/mc_builder'
35
+ require 'moceansdk/modules/voice/voice'
36
+
37
+ require 'moceansdk/modules/command/mc_object/abstract_mc'
38
+ require 'moceansdk/modules/command/mc_object/tg_send_text'
39
+ require 'moceansdk/modules/command/mc_object/tg_send_audio'
40
+ require 'moceansdk/modules/command/mc_object/tg_send_animation'
41
+ require 'moceansdk/modules/command/mc_object/tg_send_photo'
42
+ require 'moceansdk/modules/command/mc_object/tg_send_video'
43
+ require 'moceansdk/modules/command/mc_object/tg_send_document'
44
+ require 'moceansdk/modules/command/mc_object/tg_request_contact'
45
+ require 'moceansdk/modules/command/mc_object/send_sms'
46
+ require 'moceansdk/modules/command/mc'
47
+ require 'moceansdk/modules/command/mc_builder'
48
+ require 'moceansdk/modules/command/command'
49
+
50
+ require 'moceansdk/utils'
51
+ require 'moceansdk/version'
52
+ require 'moceansdk/client'
@@ -0,0 +1,15 @@
1
+ module Moceansdk
2
+ module Auth
3
+
4
+ class AbstractAuth
5
+ def auth_method
6
+ raise NotImplementedError, 'AbstractAuth is a abstract class'
7
+ end
8
+
9
+ def params
10
+ raise NotImplementedError, 'AbstractAuth is a abstract class'
11
+ end
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ module Moceansdk
2
+ module Auth
3
+
4
+ class Basic < AbstractAuth
5
+ def initialize(api_key = nil, api_secret = nil)
6
+ @params = {}
7
+ @params['mocean-api-key'] = api_key unless api_key.nil?
8
+ @params['mocean-api-secret'] = api_secret unless api_secret.nil?
9
+ end
10
+
11
+ def api_key=(api_key)
12
+ @params['mocean-api-key'] = api_key
13
+ end
14
+
15
+ def api_secret=(api_secret)
16
+ @params['mocean-api-secret'] = api_secret
17
+ end
18
+
19
+ def auth_method
20
+ 'basic'
21
+ end
22
+
23
+ def params
24
+ @params
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -1,14 +1,70 @@
1
- class Client
2
- attr_reader :api_key,:api_secret
3
- def initialize api_key = '',api_secret = ''
4
- @api_key = api_key
5
- @api_secret = api_secret
6
- end
7
-
8
- def set_api_key(api_key)
9
- @api_key = api_key
10
- end
11
- def set_api_secret(api_secret)
12
- @api_secret = api_secret
13
- end
14
- end
1
+ module Moceansdk
2
+
3
+ class Client
4
+ def initialize(obj_auth, options = nil)
5
+ unless obj_auth.is_a? Auth::AbstractAuth
6
+ raise Exceptions::MoceanError, 'auth object must extend AbstractAuth'
7
+ end
8
+
9
+ if obj_auth.auth_method.casecmp('basic').zero?
10
+ if Utils.nil_or_empty?(obj_auth.params['mocean-api-key']) || Utils.nil_or_empty?(obj_auth.params['mocean-api-secret'])
11
+ raise Exceptions::RequiredFieldException, "api key and api secret for client object can't be empty"
12
+ end
13
+ else
14
+ raise Exceptions::MoceanError, 'unsupported auth method'
15
+ end
16
+
17
+ @transmitter = if options.is_a? Modules::Transmitter
18
+ options
19
+ else
20
+ Modules::Transmitter.new(options)
21
+ end
22
+
23
+ @obj_auth = obj_auth
24
+ end
25
+
26
+ def sms
27
+ Modules::Message::Sms.new(@obj_auth, @transmitter)
28
+ end
29
+
30
+ def flash_sms
31
+ sms = Modules::Message::Sms.new(@obj_auth, @transmitter)
32
+ sms.mclass = 1
33
+ sms.alt_dcs = 1
34
+ sms
35
+ end
36
+
37
+ def pricing
38
+ Modules::Account::Pricing.new(@obj_auth, @transmitter)
39
+ end
40
+
41
+ def balance
42
+ Modules::Account::Balance.new(@obj_auth, @transmitter)
43
+ end
44
+
45
+ def message_status
46
+ Modules::Message::MessageStatus.new(@obj_auth, @transmitter)
47
+ end
48
+
49
+ def verify_request
50
+ Modules::Message::VerifyRequest.new(@obj_auth, @transmitter)
51
+ end
52
+
53
+ def verify_validate
54
+ Modules::Message::VerifyValidate.new(@obj_auth, @transmitter)
55
+ end
56
+
57
+ def number_lookup
58
+ Modules::NumberLookup::NumberLookup.new(@obj_auth, @transmitter)
59
+ end
60
+
61
+ def voice
62
+ Modules::Voice::Voice.new(@obj_auth, @transmitter)
63
+ end
64
+
65
+ def command
66
+ Modules::Command::Command.new(@obj_auth, @transmitter)
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,18 @@
1
+ module Moceansdk
2
+ module Exceptions
3
+
4
+ class MoceanError < StandardError
5
+ attr_reader :error_response
6
+
7
+ def initialize(msg, error_response = nil)
8
+ if error_response.nil?
9
+ super(msg)
10
+ else
11
+ super(error_response['err_msg'])
12
+ @error_response = error_response
13
+ end
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,8 @@
1
+ module Moceansdk
2
+ module Exceptions
3
+
4
+ class RequiredFieldException < MoceanError
5
+ end
6
+
7
+ end
8
+ end
@@ -0,0 +1,54 @@
1
+ module Moceansdk
2
+ module Modules
3
+
4
+ class AbstractClient
5
+ attr_accessor :params
6
+
7
+ def initialize(obj_auth, transmitter)
8
+ @params = obj_auth.params
9
+ @transmitter = transmitter
10
+ end
11
+
12
+ def create(params = {})
13
+ @params = @params.merge(params) if params.is_a? Hash
14
+ end
15
+
16
+ def create_final_params
17
+ final_params = {}
18
+ @params.each do |key, value|
19
+ unless value.nil?
20
+ param_prefix_set?(key) ? final_params[key] = value : final_params["mocean-#{key}"] = value
21
+ end
22
+ end
23
+
24
+ # convert string hash to symbol hash
25
+ @params = Moceansdk::Utils.convert_to_symbol_hash(final_params)
26
+ end
27
+
28
+ def param_prefix_set?(key)
29
+ cloned_key = if key.is_a? String
30
+ key
31
+ else
32
+ key.to_s
33
+ end
34
+
35
+ return false if cloned_key.scan(/^mocean-/i).empty?
36
+
37
+ true
38
+ end
39
+
40
+ def required_field_set?
41
+ if @required_fields.is_a?(Array) && !@required_fields.empty?
42
+ @required_fields.each do |field|
43
+ if @params[:"#{field}"].nil?
44
+ raise Moceansdk::Exceptions::RequiredFieldException, "#{field} is mandatory field, can't leave empty"
45
+ end
46
+ end
47
+ end
48
+
49
+ true
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -1,22 +1,26 @@
1
- require_relative "../abstract"
2
-
3
- class Balance < MoceanFactory
4
- def initialize client
5
- super(client)
6
- @required_fields = ['mocean-api-key','mocean-api-secret']
7
- end
8
-
9
- def setRespFormat param
10
- @params['mocean-resp-format'] = param
11
- return self
12
- end
13
-
14
- def inquiry params = {}
15
- create(params)
16
- createFinalParams
17
- isRequiredFieldsSet
18
- response = Transmitter.new('/rest/1/account/balance','get', @params)
19
- reset
20
- return response.getResponse()
21
- end
22
- end
1
+ module Moceansdk
2
+ module Modules
3
+ module Account
4
+
5
+ class Balance < Moceansdk::Modules::AbstractClient
6
+ def initialize(obj_auth, transmitter)
7
+ super(obj_auth, transmitter)
8
+ @required_fields = ['mocean-api-key', 'mocean-api-secret']
9
+ end
10
+
11
+ def resp_format=(param)
12
+ @params['mocean-resp-format'] = param
13
+ end
14
+
15
+ def inquiry(params = {})
16
+ create(params)
17
+ create_final_params
18
+ required_field_set?
19
+
20
+ @transmitter.get('/account/balance', @params)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end