termii_ruby 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 71c1cf1dc8fcfaaf33a33624d3fd0e0c891ff19fda4e462d3c649de79ee82898
4
- data.tar.gz: 060b6b77bd2ae007cc21abe66977bc56e5ad667424f7de5bf3eb6f394d7a67dd
3
+ metadata.gz: 845e38ac1d73b88056bd65863f81b0d46d252d773decdf6326711014db0bac10
4
+ data.tar.gz: fe3813e56c0eead5056e5546d10ba9fa67977551003950fc48e93f216540a488
5
5
  SHA512:
6
- metadata.gz: 8dd27e9102e0c0cccf49d040a82272cf9d2e3cff4a8ba3d573e0d89d9f1a842b36934729c98c957fa0cea1dc09203fe0624aabffcdbd237c2a438c92fa43b4c2
7
- data.tar.gz: 70b70e594906908edaf7d42e1cdb675bd7b31a40c513134a765044890dc61dec21e57e1cf6416d2904626f1efd552225f29b600396fbbe260015f21e7657cefc
6
+ metadata.gz: 8b8f959a635d3f0e35a19a91b38b14e30464dcc1419af766d8c4c89dbf79156d58ba0599a769d580c497255fbbc5e6683fed69281e809375bae198bec3f1b53d
7
+ data.tar.gz: 6b21733a176c75782c23541f78ea5ba6d066e4ad200ed616f80b27ff91c1e3d030f3d57b411d1832930a43a953d119d1c81943f6a06c2be100aa8d2425249cef
data/.rubocop.yml CHANGED
@@ -25,4 +25,7 @@ Layout/LineLength:
25
25
  Enabled: false
26
26
 
27
27
  Lint/MissingSuper:
28
+ Enabled: false
29
+
30
+ Metrics/BlockLength:
28
31
  Enabled: false
data/Gemfile CHANGED
@@ -10,6 +10,9 @@ gem "rspec", "~> 3.0"
10
10
 
11
11
  gem "faraday", "~> 2.7", ">= 2.7.4"
12
12
  gem "faraday-retry"
13
+ group :test do
14
+ gem "webmock", "~> 3.18", ">= 3.18.1"
15
+ end
13
16
 
14
17
  # gem "pry", "~> 0.13.1"
15
18
  gem "rubocop", "~> 1.21"
data/Gemfile.lock CHANGED
@@ -1,12 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- termii_ruby (0.1.0)
4
+ termii_ruby (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ addressable (2.8.4)
10
+ public_suffix (>= 2.0.2, < 6.0)
9
11
  ast (2.4.2)
12
+ crack (0.4.5)
13
+ rexml
10
14
  diff-lcs (1.5.0)
11
15
  faraday (2.7.4)
12
16
  faraday-net_http (>= 2.0, < 3.1)
@@ -14,10 +18,12 @@ GEM
14
18
  faraday-net_http (3.0.2)
15
19
  faraday-retry (2.1.0)
16
20
  faraday (~> 2.0)
21
+ hashdiff (1.0.1)
17
22
  json (2.6.3)
18
23
  parallel (1.23.0)
19
24
  parser (3.2.2.1)
20
25
  ast (~> 2.4.1)
26
+ public_suffix (5.0.1)
21
27
  rainbow (3.1.1)
22
28
  rake (13.0.6)
23
29
  regexp_parser (2.8.0)
@@ -50,6 +56,10 @@ GEM
50
56
  ruby-progressbar (1.13.0)
51
57
  ruby2_keywords (0.0.5)
52
58
  unicode-display_width (2.4.2)
59
+ webmock (3.18.1)
60
+ addressable (>= 2.8.0)
61
+ crack (>= 0.3.2)
62
+ hashdiff (>= 0.4.0, < 2.0.0)
53
63
 
54
64
  PLATFORMS
55
65
  x86_64-linux
@@ -61,6 +71,7 @@ DEPENDENCIES
61
71
  rspec (~> 3.0)
62
72
  rubocop (~> 1.21)
63
73
  termii_ruby!
74
+ webmock (~> 3.18, >= 3.18.1)
64
75
 
65
76
  BUNDLED WITH
66
77
  2.3.5
data/README.md CHANGED
@@ -9,7 +9,7 @@ TODO: Delete this and the text above, and describe your gem
9
9
  Add this line to your application's Gemfile:
10
10
 
11
11
  ```ruby
12
- gem 'termii_ruby'
12
+ gem 'termii_ruby', '~> 0.1.0'
13
13
  ```
14
14
 
15
15
  And then execute:
@@ -22,7 +22,7 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+
26
26
 
27
27
  ## Development
28
28
 
@@ -32,7 +32,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
32
 
33
33
  ## Contributing
34
34
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/termii_ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/termii_ruby/blob/master/CODE_OF_CONDUCT.md).
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/collinsugwu/termii_ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/collinsugwu/termii_ruby/blob/master/CODE_OF_CONDUCT.md).
36
36
 
37
37
  ## License
38
38
 
@@ -40,4 +40,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
40
40
 
41
41
  ## Code of Conduct
42
42
 
43
- Everyone interacting in the TermiiRuby project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/termii_ruby/blob/master/CODE_OF_CONDUCT.md).
43
+ Everyone interacting in the TermiiRuby project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/collinsugwu/termii_ruby/blob/master/CODE_OF_CONDUCT.md).
@@ -1,12 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
-
4
3
  module TermiiRuby
4
+ #
5
+ # @author Collins
6
+ # A class to enforce the request methods
7
+ # @abstract
8
+ #
5
9
  class AbstractClient
10
+ #
11
+ # Ensure the subclass implements the make_get_request method
12
+ #
13
+ # @return [Object] NotImplementedError
14
+ #
6
15
  def make_get_request
7
16
  raise NotImplementedError, "Subclasses must implement the make_get_request method"
8
17
  end
9
18
 
19
+ #
20
+ # Ensure the subclass implements the make_post_request method
21
+ #
22
+ # @return [Object] NotImplementedError
23
+ #
10
24
  def make_post_request
11
25
  raise NotImplementedError, "Subclasses must implement the make_post_request method"
12
26
  end
@@ -6,6 +6,10 @@ require "faraday/retry"
6
6
  require_relative "abstract_client"
7
7
 
8
8
  module TermiiRuby
9
+ #
10
+ # @author Collins Ugwu
11
+ # Client class to make request to Termii endpoints
12
+ #
9
13
  class Client < TermiiRuby::AbstractClient
10
14
  def initialize(api_key)
11
15
  @api_key = api_key
@@ -24,10 +28,7 @@ module TermiiRuby
24
28
  end
25
29
  end
26
30
 
27
- {
28
- status: response.status,
29
- data: response.body
30
- }
31
+ request_response(response)
31
32
  end
32
33
 
33
34
  def make_post_request(endpoint, args = {})
@@ -38,14 +39,18 @@ module TermiiRuby
38
39
  req.body = args.to_json
39
40
  end
40
41
 
42
+ request_response(response)
43
+ end
44
+
45
+ private
46
+
47
+ def request_response(response)
41
48
  {
42
49
  status: response.status,
43
50
  data: response.body
44
51
  }
45
52
  end
46
53
 
47
- private
48
-
49
54
  def request_url(endpoint)
50
55
  "#{base_url}/#{endpoint}"
51
56
  end
@@ -5,6 +5,10 @@ require_relative "termii"
5
5
  require_relative "client"
6
6
 
7
7
  module TermiiRuby
8
+ #
9
+ # @author Collins Ugwu
10
+ # Retrieve real-time delivery report of messages sent to customers as well as the status of their contacts
11
+ #
8
12
  class Insight < TermiiRuby::Termii
9
13
  QUERY = "phone_number"
10
14
 
@@ -15,10 +19,23 @@ module TermiiRuby
15
19
 
16
20
  def verify; end
17
21
 
22
+ #
23
+ # The Balance API returns your total balance and balance information from your wallet, such as currency.
24
+ #
25
+ # @return [JSON] JSON object
26
+ #
18
27
  def balance
19
28
  @client.make_get_request(GET_BALANCE)
20
29
  end
21
30
 
31
+ #
32
+ # The search API allows businesses verify phone numbers and automatically detect their status as well as current network
33
+ #
34
+ # @param [String] phone_number Represents the phone number to be verified. Phone number must be in the international format (Example: 23490126727)
35
+ # @param [Hash] query Hash of the query params
36
+ #
37
+ # @return [JSON] JSON object
38
+ #
22
39
  def search(phone_number, query = {})
23
40
  if query.empty?
24
41
  query = {
@@ -29,6 +46,14 @@ module TermiiRuby
29
46
  @client.make_get_request(SEARCH, query)
30
47
  end
31
48
 
49
+ #
50
+ # The status API allows businesses to detect if a number is fake or has ported to a new network.
51
+ #
52
+ # @param [<Type>] phone_number Represents the phone number to be verified. Phone number must be in the international format (Example: 2348753243651)
53
+ # @param [Hash] query Hash of the query params
54
+ #
55
+ # @return [JSON] JSON object
56
+ #
32
57
  def status(phone_number, query = {})
33
58
  if query.empty?
34
59
  query = {
@@ -39,6 +64,11 @@ module TermiiRuby
39
64
  @client.make_get_request(STATUS, query)
40
65
  end
41
66
 
67
+ #
68
+ # This Inbox API returns reports for messages sent across the sms, voice & whatsapp channels. Reports can either display all messages on termii or a single message.
69
+ #
70
+ # @return [JSON] JSON object
71
+ #
42
72
  def history
43
73
  @client.make_get_request(HISTORY)
44
74
  end
@@ -5,12 +5,25 @@ require_relative "termii"
5
5
  require_relative "client"
6
6
 
7
7
  module TermiiRuby
8
+ #
9
+ # @author Collins Ugwu
10
+ # Sender Class for creating and fetching the sender ID
11
+ #
8
12
  class Sender < TermiiRuby::Termii
9
13
  def initialize(api_key)
10
14
  super()
11
15
  @client = TermiiRuby::Client.new(api_key)
12
16
  end
13
17
 
18
+ #
19
+ # Create a Sender ID
20
+ #
21
+ # @param [String] sender_id Represents the ID of the sender which can be alphanumeric or numeric
22
+ # @param [String] usecase A sample of the type of message sent.
23
+ # @param [String] company Represents the name of the company with the sender ID.
24
+ #
25
+ # @return [JSON] JSON object
26
+ #
14
27
  def create_sender(sender_id, usecase, company)
15
28
  data = {
16
29
  sender_id: sender_id,
@@ -20,6 +33,11 @@ module TermiiRuby
20
33
  @client.make_post_request(CREATE_SENDER, data)
21
34
  end
22
35
 
36
+ #
37
+ # A Sender ID is the name or number that identifies the sender of an SMS message.
38
+ #
39
+ # @return [JSON] JSON object
40
+ #
23
41
  def fetch_senders
24
42
  @client.make_get_request(FETCH_SENDER)
25
43
  end
@@ -1,13 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Base Class
4
-
5
3
  require_relative "mixins/endpoints"
6
4
 
7
5
  module TermiiRuby
6
+ #
7
+ # @author Collins Ugwu
8
+ # Base Termii Class
9
+ #
8
10
  class Termii
9
11
  include TermiiRuby::Mixins::Endpoints
10
- attr_accessor :message_text, :pin_type, :channel, :pin_attempts, :pin_length, :pin_time_to_live, :pin_placeholder
12
+
13
+ # @return [Stiring] Enum: "NUMERIC" "ALPHANUMERIC" Type of message that will be generated and sent as part of the OTP message. You can set message type to numeric or alphanumeric
14
+ attr_accessor :message_type
15
+
16
+ # @return [String] "NUMERIC"
17
+ attr_accessor :pin_type
18
+
19
+ # @return [String] This is the route through which the message is sent. It is either dnd, WhatsApp, or generic or email
20
+ attr_accessor :channel
21
+
22
+ # @return [Integer] Example: 3 Represents the number of times the PIN can be attempted before expiration. It has a minimum of one attempt
23
+ attr_accessor :pin_attempts
24
+
25
+ # @return [Integer] The length of the PIN code.It has a minimum of 4 and maximum of 8.
26
+ attr_accessor :pin_length
27
+
28
+ # @return [Interger] Represents how long the PIN is valid before expiration. The time is in minutes. The minimum time value is 0 and the maximum time value is 60
29
+ attr_accessor :pin_time_to_live
30
+
31
+ # @return [String] Example: "< 1234 >" PIN placeholder. Right before sending the message, PIN code placeholder will be replaced with generate PIN code.
32
+ attr_accessor :pin_placeholder
33
+
34
+ # @return [String] Represents short alphabetic codes developed to represent countries
35
+ attr_accessor :country_code
11
36
 
12
37
  def initialize
13
38
  @message_type = "NUMERIC"
@@ -20,10 +45,22 @@ module TermiiRuby
20
45
  @country_code = "NG"
21
46
  end
22
47
 
48
+ #
49
+ # Subclasses must implement the verify method
50
+ #
51
+ # @return [Object] NotImplementedError
52
+ #
23
53
  def verify
24
54
  raise NotImplementedError, "Subclasses must implement the verify method"
25
55
  end
26
56
 
57
+ #
58
+ # <Description>
59
+ #
60
+ # @param [<Type>] attrs <description>
61
+ #
62
+ # @return [<Type>] <description>
63
+ #
27
64
  def update_attributes(attrs)
28
65
  attrs.each do |key, value|
29
66
  self[key.to_s] = value
@@ -5,12 +5,25 @@ require_relative "termii"
5
5
  require_relative "client"
6
6
 
7
7
  module TermiiRuby
8
+ #
9
+ # @author Collins Ugwu
10
+ # Token allows businesses generate, send and verify one-time-passwords.
11
+ #
8
12
  class Token < TermiiRuby::Termii
9
13
  def initialize(api_key)
10
14
  super()
11
15
  @client = TermiiRuby::Client.new(api_key)
12
16
  end
13
17
 
18
+ #
19
+ # The send token API allows businesses trigger one-time-passwords (OTP) across any available messaging channel on Termii. One-time-passwords created are generated randomly and there's an option to set an expiry time.
20
+ #
21
+ # @param [string] to Represents the email address if the channel is set to email (Example: testshola@termii.com). It represents the destination phone number if other channels are selected. Phone number must be in the international format (Example: 23490126727)
22
+ # @param [string] from Represents the configuration ID if the channel is set to email (Example: 0a53c416-uocj-95af-ab3c306aellc). It can be found on your Termii dashboard. If other channels are selected, it represents a sender ID which can be alphanumeric or numeric. Alphanumeric sender ID length should be between 3 and 11 characters (Example:CompanyName)
23
+ # @param [string] message_text Text of a message that would be sent to the destination phone number
24
+ #
25
+ # @return [JSON] JSON object
26
+ #
14
27
  def send_otp_token(to, from, message_text)
15
28
  data = {
16
29
  to: to,
@@ -27,6 +40,13 @@ module TermiiRuby
27
40
  @client.make_post_request(SEND_OTP_TOKEN, data)
28
41
  end
29
42
 
43
+ #
44
+ # The voice token API enables you to generate and trigger one-time passwords (OTP) through the voice channel to a phone number. OTPs are generated and sent to the phone number and can only be verified using our Verify Token API .
45
+ #
46
+ # @param [string] phone_number The destination phone number. Phone number must be in the international format (Example: 23490126727)
47
+ #
48
+ # @return [JSON] JSON object
49
+ #
30
50
  def send_voice_token(phone_number)
31
51
  data = {
32
52
  phone_number: phone_number,
@@ -37,6 +57,14 @@ module TermiiRuby
37
57
  @client.make_post_request(SEND_VOICE_TOKEN, data)
38
58
  end
39
59
 
60
+ #
61
+ # The voice call API enables you to send messages from your application through our voice channel to a phone number. Only one-time-passwords (OTP) are allowed for now and these OTPs can not be verified using our Verify Token API.
62
+ #
63
+ # @param [String] phone_number The destination phone number. Phone number must be in the international format (Example: 23490126727)
64
+ # @param [Numeric] code Example: 3344, The code you want your users to receive. It has to be numeric and length must be between 4 and 8 digits.
65
+ #
66
+ # @return [JSON] JSON object
67
+ #
40
68
  def send_voice_call(phone_number, code)
41
69
  data = {
42
70
  phone_number: phone_number,
@@ -46,6 +74,13 @@ module TermiiRuby
46
74
  @client.make_post_request(SEND_VOICE_CALL, data)
47
75
  end
48
76
 
77
+ #
78
+ # This API returns OTP codes in JSON format which can be used within any web or mobile app.
79
+ #
80
+ # @param [String] phone_number Represents the destination phone number.Phone number must be in the international format (Example: 23490126727)
81
+ #
82
+ # @return [JSON] JSON object
83
+ #
49
84
  def send_in_app_token(phone_number)
50
85
  data = {
51
86
  phone_number: phone_number,
@@ -57,10 +92,18 @@ module TermiiRuby
57
92
  @client.make_post_request(SEND_IN_APP_TOKEN, data)
58
93
  end
59
94
 
60
- def verify(pin_id, pin)
95
+ #
96
+ # Verify token API, checks tokens sent to customers and returns a response confirming the status of the token. A token can either be confirmed as verified or expired based on the timer set for the token.
97
+ #
98
+ # @param [string] pin_id ID of the PIN sent (Example: "c8dcd048-5e7f-4347-8c89-4470c3af0b")
99
+ # @param [string] token The PIN code (Example: "195558")
100
+ #
101
+ # @return [JSON] JSON object
102
+ #
103
+ def verify(pin_id, token)
61
104
  data = {
62
105
  pin_id: pin_id,
63
- pin: pin
106
+ pin: token
64
107
  }
65
108
  @client.make_post_request(VERIFY_TOKEN, data)
66
109
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TermiiRuby
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
data/lib/termii_ruby.rb CHANGED
@@ -5,6 +5,9 @@ require_relative "termii_ruby/sender"
5
5
  require_relative "termii_ruby/token"
6
6
  require_relative "termii_ruby/insight"
7
7
 
8
+ #
9
+ # <Description>
10
+ #
8
11
  module TermiiRuby
9
12
  class Error < StandardError; end
10
13
  # Your code goes here...
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: termii_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Collins Ugwu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-27 00:00:00.000000000 Z
11
+ date: 2023-06-05 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Ruby gem for integrating Termii messaging API
14
14
  email: