From 35e4214fd35d952b8958a4096bf75468eaa4b22a Mon Sep 17 00:00:00 2001 From: Karl Lingiah Date: Tue, 23 Apr 2024 10:32:26 +0100 Subject: [PATCH] Update Messages API implementation (#308) * Minor usage improvements to Messages API implementation --- .github/workflows/ci.yml | 3 +-- CHANGES.md | 1 + lib/vonage/messaging.rb | 11 ++++++++--- test/vonage/messaging_test.rb | 17 +++++++++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a49cf092..f7859441 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,8 +32,7 @@ jobs: uses: ruby/setup-ruby@v1 with: ruby-version: ${{ matrix.ruby }} - - name: Install dependencies - run: bundle install + bundler-cache: true - name: Run tests run: bundle exec rake test env: diff --git a/CHANGES.md b/CHANGES.md index 4969de7a..0b349f3d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,7 @@ # 7.24.0 * Updating Video API functionality with methods for Live Captions, Audio Connector, Experience Composer, and a `publisheronly` cleint token role. [#307](https://github.com/Vonage/vonage-ruby-sdk/pull/307) +* Updating Messages API implementation to add a delegator for the `Message` class, and enforce some required args in `Messaging#send`. [#308](https://github.com/Vonage/vonage-ruby-sdk/pull/308) # 7.23.0 diff --git a/lib/vonage/messaging.rb b/lib/vonage/messaging.rb index 29fdc89d..f06d76b8 100644 --- a/lib/vonage/messaging.rb +++ b/lib/vonage/messaging.rb @@ -1,16 +1,21 @@ # typed: true # frozen_string_literal: true +require 'forwardable' module Vonage class Messaging < Namespace + extend Forwardable + self.authentication = BearerToken self.request_body = JSON + def_delegators Message, *Message::CHANNELS.keys + # Send a Message. # # @example - # message = Vonage::Messaging::Message.sms(message: "Hello world!") + # message = client.messaging.sms(message: "Hello world!") # response = client.messaging.send(to: "447700900000", from: "447700900001", **message) # # @option params [required, String] :to @@ -22,8 +27,8 @@ class Messaging < Namespace # # @see https://developer.vonage.com/api/messages-olympus#SendMessage # - def send(params) - request('/v1/messages', params: params, type: Post) + def send(to:, from:, **message) + request('/v1/messages', params: {to: to, from: from, **message}, type: Post) end # Validate a JSON Web Token from a Messages API Webhook. diff --git a/test/vonage/messaging_test.rb b/test/vonage/messaging_test.rb index bbdffdb6..66f70d4d 100644 --- a/test/vonage/messaging_test.rb +++ b/test/vonage/messaging_test.rb @@ -10,6 +10,15 @@ def messaging_uri 'https://api.nexmo.com/v1/messages' end + def test_valid_message_delegator + message = Vonage::Messaging::Message.sms(message: "Hello world!") + assert_equal message, messaging.sms(message: "Hello world!") + end + + def test_invalid_message_delegator + assert_raises { messaging.invalid } + end + def test_send_method params = { to: "447700900000", @@ -26,6 +35,14 @@ def test_send_method assert_kind_of Vonage::Response, messaging.send(to: "447700900000", from: "447700900001", **message) end + def test_send_method_without_to + assert_raises(ArgumentError) { messaging.send(from: "447700900001", message: "Hello world!") } + end + + def test_send_method_without_from + assert_raises(ArgumentError) { messaging.send(to: "447700900000", message: "Hello world!") } + end + def test_verify_webhook_token_method_with_valid_secret_passed_in verification = messaging.verify_webhook_token(token: sample_webhook_token, signature_secret: sample_valid_signature_secret)