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
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