whatsapp_sdk 0.0.2 → 0.3.0
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.
- checksums.yaml +4 -4
 - data/.rubocop.yml +15 -2
 - data/CHANGELOG.md +16 -1
 - data/Gemfile +5 -2
 - data/Gemfile.lock +19 -7
 - data/README.md +115 -84
 - data/example.rb +207 -0
 - data/lib/version.rb +1 -1
 - data/lib/whatsapp_sdk/api/client.rb +28 -8
 - data/lib/whatsapp_sdk/api/medias.rb +101 -0
 - data/lib/whatsapp_sdk/api/messages.rb +90 -23
 - data/lib/whatsapp_sdk/api/phone_numbers.rb +8 -4
 - data/lib/whatsapp_sdk/api/request.rb +9 -3
 - data/lib/whatsapp_sdk/api/response.rb +7 -13
 - data/lib/whatsapp_sdk/api/responses/error_response.rb +10 -19
 - data/lib/whatsapp_sdk/api/responses/media_data_response.rb +29 -0
 - data/lib/whatsapp_sdk/api/responses/message_error_response.rb +30 -0
 - data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +3 -3
 - data/lib/whatsapp_sdk/api/responses/success_response.rb +26 -0
 - data/lib/whatsapp_sdk/configuration.rb +34 -0
 - data/lib/whatsapp_sdk/resource/button_parameter.rb +65 -0
 - data/lib/whatsapp_sdk/resource/component.rb +85 -0
 - data/lib/whatsapp_sdk/resource/currency.rb +36 -0
 - data/lib/whatsapp_sdk/resource/date_time.rb +22 -0
 - data/lib/whatsapp_sdk/resource/media.rb +86 -0
 - data/lib/whatsapp_sdk/resource/parameter_object.rb +134 -0
 - data/lib/whatsapp_sdk.rb +15 -1
 - data/tmp/whatsapp.png +0 -0
 - data/whatsapp_sdk.gemspec +12 -8
 - metadata +41 -10
 
| 
         @@ -1,32 +1,23 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require_relative "data_response"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
       3 
5 
     | 
    
         
             
            module WhatsappSdk
         
     | 
| 
       4 
6 
     | 
    
         
             
              module Api
         
     | 
| 
       5 
7 
     | 
    
         
             
                module Responses
         
     | 
| 
       6 
     | 
    
         
            -
                  class ErrorResponse
         
     | 
| 
       7 
     | 
    
         
            -
                     
     | 
| 
      
 8 
     | 
    
         
            +
                  class ErrorResponse < DataResponse
         
     | 
| 
      
 9 
     | 
    
         
            +
                    attr_accessor :error, :status
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
                    def initialize( 
     | 
| 
       10 
     | 
    
         
            -
                      @ 
     | 
| 
       11 
     | 
    
         
            -
                      @ 
     | 
| 
       12 
     | 
    
         
            -
                       
     | 
| 
       13 
     | 
    
         
            -
                      @type = type
         
     | 
| 
       14 
     | 
    
         
            -
                      @data = data
         
     | 
| 
       15 
     | 
    
         
            -
                      @fbtrace_id = fbtrace_id
         
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(response:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @error = response["error"]
         
     | 
| 
      
 13 
     | 
    
         
            +
                      @status = response["status"]
         
     | 
| 
      
 14 
     | 
    
         
            +
                      super(response)
         
     | 
| 
       16 
15 
     | 
    
         
             
                    end
         
     | 
| 
       17 
16 
     | 
    
         | 
| 
       18 
17 
     | 
    
         
             
                    def self.build_from_response(response:)
         
     | 
| 
       19 
     | 
    
         
            -
                       
     | 
| 
       20 
     | 
    
         
            -
                      return unless error_response
         
     | 
| 
      
 18 
     | 
    
         
            +
                      return unless response["error"]
         
     | 
| 
       21 
19 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
                      new(
         
     | 
| 
       23 
     | 
    
         
            -
                        code: error_response["code"],
         
     | 
| 
       24 
     | 
    
         
            -
                        subcode: error_response["error_subcode"],
         
     | 
| 
       25 
     | 
    
         
            -
                        message: error_response["message"],
         
     | 
| 
       26 
     | 
    
         
            -
                        type: error_response["type"],
         
     | 
| 
       27 
     | 
    
         
            -
                        data: error_response["data"],
         
     | 
| 
       28 
     | 
    
         
            -
                        fbtrace_id: error_response["fbtrace_id"]
         
     | 
| 
       29 
     | 
    
         
            -
                      )
         
     | 
| 
      
 20 
     | 
    
         
            +
                      new(response: response)
         
     | 
| 
       30 
21 
     | 
    
         
             
                    end
         
     | 
| 
       31 
22 
     | 
    
         
             
                  end
         
     | 
| 
       32 
23 
     | 
    
         
             
                end
         
     | 
| 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "data_response"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Api
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Responses
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class MediaDataResponse < DataResponse
         
     | 
| 
      
 9 
     | 
    
         
            +
                    attr_accessor :id, :url, :mime_type, :sha256, :file_size, :messaging_product
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(response)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @id = response["id"]
         
     | 
| 
      
 13 
     | 
    
         
            +
                      @messaging_product = response["messaging_product"]
         
     | 
| 
      
 14 
     | 
    
         
            +
                      @url = response["url"]
         
     | 
| 
      
 15 
     | 
    
         
            +
                      @mime_type = response["mime_type"]
         
     | 
| 
      
 16 
     | 
    
         
            +
                      @sha256 = response["sha256"]
         
     | 
| 
      
 17 
     | 
    
         
            +
                      @file_size = response["file_size"]
         
     | 
| 
      
 18 
     | 
    
         
            +
                      super(response)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    def self.build_from_response(response:)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      return unless response["id"]
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                      new(response)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "error_response"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Api
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Responses
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class MessageErrorResponse < ErrorResponse
         
     | 
| 
      
 9 
     | 
    
         
            +
                    attr_reader :code, :subcode, :message, :type, :data, :fbtrace_id
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    def initialize(response:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @code = response["code"]
         
     | 
| 
      
 13 
     | 
    
         
            +
                      @subcode = response["error_subcode"]
         
     | 
| 
      
 14 
     | 
    
         
            +
                      @message = response["message"]
         
     | 
| 
      
 15 
     | 
    
         
            +
                      @type = response["type"]
         
     | 
| 
      
 16 
     | 
    
         
            +
                      @data = response["data"]
         
     | 
| 
      
 17 
     | 
    
         
            +
                      @fbtrace_id = response["fbtrace_id"]
         
     | 
| 
      
 18 
     | 
    
         
            +
                      super(response: response)
         
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    def self.build_from_response(response:)
         
     | 
| 
      
 22 
     | 
    
         
            +
                      error_response = response["error"]
         
     | 
| 
      
 23 
     | 
    
         
            +
                      return unless error_response
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                      new(response: error_response)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -8,11 +8,11 @@ require_relative "../../resource/contact_response" 
     | 
|
| 
       8 
8 
     | 
    
         
             
            module WhatsappSdk
         
     | 
| 
       9 
9 
     | 
    
         
             
              module Api
         
     | 
| 
       10 
10 
     | 
    
         
             
                module Responses
         
     | 
| 
       11 
     | 
    
         
            -
                  class  
     | 
| 
       12 
     | 
    
         
            -
                    attr_reader : 
     | 
| 
      
 11 
     | 
    
         
            +
                  class ReadMessageDataResponse < DataResponse
         
     | 
| 
      
 12 
     | 
    
         
            +
                    attr_reader :success
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         
             
                    def initialize(response:)
         
     | 
| 
       15 
     | 
    
         
            -
                      @ 
     | 
| 
      
 15 
     | 
    
         
            +
                      @success = response["success"]
         
     | 
| 
       16 
16 
     | 
    
         
             
                      super(response)
         
     | 
| 
       17 
17 
     | 
    
         
             
                    end
         
     | 
| 
       18 
18 
     | 
    
         | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require_relative "data_response"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 6 
     | 
    
         
            +
              module Api
         
     | 
| 
      
 7 
     | 
    
         
            +
                module Responses
         
     | 
| 
      
 8 
     | 
    
         
            +
                  class SuccessResponse < DataResponse
         
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(response:)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @success = response["success"]
         
     | 
| 
      
 11 
     | 
    
         
            +
                      super(response)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    def self.build_from_response(response:)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      return unless response["success"]
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                      new(response: response)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                    def success?
         
     | 
| 
      
 21 
     | 
    
         
            +
                      @success
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              # This module allows client instantiating the client as a singleton like the following example:
         
     | 
| 
      
 5 
     | 
    
         
            +
              # WhatsappSdk.configure do |config|
         
     | 
| 
      
 6 
     | 
    
         
            +
              #   config.access_token = ACCESS_TOKEN
         
     | 
| 
      
 7 
     | 
    
         
            +
              # end
         
     | 
| 
      
 8 
     | 
    
         
            +
              #
         
     | 
| 
      
 9 
     | 
    
         
            +
              # The gem have access to the client through WhatsappSdk.configuration.client
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 12 
     | 
    
         
            +
                def configuration
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @configuration ||= Configuration.new
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def configure
         
     | 
| 
      
 17 
     | 
    
         
            +
                  yield(configuration)
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              class Configuration
         
     | 
| 
      
 22 
     | 
    
         
            +
                attr_accessor :access_token
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def initialize(access_token = nil)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @access_token = access_token
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def client
         
     | 
| 
      
 29 
     | 
    
         
            +
                  return unless access_token
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  WhatsappSdk::Api::Client.new(access_token)
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,65 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
                class ButtonParameter
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class InvalidType < StandardError
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attr_accessor :message
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(type)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @message = "invalid type #{type}. type should be text or payload"
         
     | 
| 
      
 11 
     | 
    
         
            +
                      super
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  # Returns the button parameter type.
         
     | 
| 
      
 16 
     | 
    
         
            +
                  #
         
     | 
| 
      
 17 
     | 
    
         
            +
                  # @returns type [String] Valid options are payload and text.
         
     | 
| 
      
 18 
     | 
    
         
            +
                  attr_accessor :type
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  module Type
         
     | 
| 
      
 21 
     | 
    
         
            +
                    TEXT = "text"
         
     | 
| 
      
 22 
     | 
    
         
            +
                    PAYLOAD = "payload"
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    VALID_TYPES = [PAYLOAD, TEXT].freeze
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  # Required for quick_reply buttons.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  # Returns the button payload. Developer-defined payload that is returned when the button is clicked
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # in addition to the display text on the button.
         
     | 
| 
      
 30 
     | 
    
         
            +
                  #
         
     | 
| 
      
 31 
     | 
    
         
            +
                  # @returns payload [String]
         
     | 
| 
      
 32 
     | 
    
         
            +
                  attr_accessor :payload
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  # Required for URL buttons.
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # Developer-provided suffix that is appended to the predefined prefix URL in the template.
         
     | 
| 
      
 36 
     | 
    
         
            +
                  #
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # @returns text [String]
         
     | 
| 
      
 38 
     | 
    
         
            +
                  attr_accessor :text
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  def initialize(type:, payload: nil, text: nil)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @type = type
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @payload = payload
         
     | 
| 
      
 43 
     | 
    
         
            +
                    @text = text
         
     | 
| 
      
 44 
     | 
    
         
            +
                    validate
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  def to_json(*_args)
         
     | 
| 
      
 48 
     | 
    
         
            +
                    json = {
         
     | 
| 
      
 49 
     | 
    
         
            +
                      type: type
         
     | 
| 
      
 50 
     | 
    
         
            +
                    }
         
     | 
| 
      
 51 
     | 
    
         
            +
                    json[:payload] = payload if payload
         
     | 
| 
      
 52 
     | 
    
         
            +
                    json[:text] = text if text
         
     | 
| 
      
 53 
     | 
    
         
            +
                    json
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
                  private
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  def validate
         
     | 
| 
      
 59 
     | 
    
         
            +
                    return if Type::VALID_TYPES.include?(type)
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    raise InvalidType, type
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,85 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Component
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class InvalidField < StandardError
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attr_reader :field, :message
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(field, message)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @field = field
         
     | 
| 
      
 11 
     | 
    
         
            +
                      @message = message
         
     | 
| 
      
 12 
     | 
    
         
            +
                      super(message)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  module Type
         
     | 
| 
      
 17 
     | 
    
         
            +
                    HEADER = 'header'
         
     | 
| 
      
 18 
     | 
    
         
            +
                    BODY = 'body'
         
     | 
| 
      
 19 
     | 
    
         
            +
                    BUTTON = 'button'
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  module Subtype
         
     | 
| 
      
 23 
     | 
    
         
            +
                    QUICK_REPLY = "quick_reply"
         
     | 
| 
      
 24 
     | 
    
         
            +
                    URL = "url"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  # Returns the Component type.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #
         
     | 
| 
      
 29 
     | 
    
         
            +
                  # @returns type [String]. Supported Options are header, body and button.
         
     | 
| 
      
 30 
     | 
    
         
            +
                  attr_accessor :type
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  # Returns the parameters of the component. For button type, it's required.
         
     | 
| 
      
 33 
     | 
    
         
            +
                  #
         
     | 
| 
      
 34 
     | 
    
         
            +
                  # @returns parameter [Array<ButtonParameter, ParameterObject>] .
         
     | 
| 
      
 35 
     | 
    
         
            +
                  attr_accessor :parameters
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  # Returns the Type of button to create. Required when type=button. Not used for the other types.
         
     | 
| 
      
 38 
     | 
    
         
            +
                  # Supported Options
         
     | 
| 
      
 39 
     | 
    
         
            +
                  # quick_reply: Refers to a previously created quick reply button
         
     | 
| 
      
 40 
     | 
    
         
            +
                  # that allows for the customer to return a predefined message.
         
     | 
| 
      
 41 
     | 
    
         
            +
                  # url: Refers to a previously created button that allows the customer to visit the URL generated by
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # appending the text parameter to the predefined prefix URL in the template.
         
     | 
| 
      
 43 
     | 
    
         
            +
                  #
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # @returns subtype [String]. Valid options are quick_reply and url.
         
     | 
| 
      
 45 
     | 
    
         
            +
                  attr_accessor :sub_type
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  # Required when type=button. Not used for the other types.
         
     | 
| 
      
 48 
     | 
    
         
            +
                  # Position index of the button. You can have up to 3 buttons using index values of 0 to 2.
         
     | 
| 
      
 49 
     | 
    
         
            +
                  #
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # @returns index [Integer].
         
     | 
| 
      
 51 
     | 
    
         
            +
                  attr_accessor :index
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  def add_parameter(parameter)
         
     | 
| 
      
 54 
     | 
    
         
            +
                    @parameters << parameter
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  def initialize(type:, parameters: [], sub_type: nil, index: nil)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    @parameters = parameters
         
     | 
| 
      
 59 
     | 
    
         
            +
                    @type = type
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @sub_type = sub_type
         
     | 
| 
      
 61 
     | 
    
         
            +
                    @index = index.nil? && type == Type::BUTTON ? 0 : index
         
     | 
| 
      
 62 
     | 
    
         
            +
                    validate_fields
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                  def to_json(*_args)
         
     | 
| 
      
 66 
     | 
    
         
            +
                    json = {
         
     | 
| 
      
 67 
     | 
    
         
            +
                      type: type,
         
     | 
| 
      
 68 
     | 
    
         
            +
                      parameters: parameters.map(&:to_json)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    }
         
     | 
| 
      
 70 
     | 
    
         
            +
                    json[:sub_type] = sub_type if sub_type
         
     | 
| 
      
 71 
     | 
    
         
            +
                    json[:index] = index if index
         
     | 
| 
      
 72 
     | 
    
         
            +
                    json
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  private
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  def validate_fields
         
     | 
| 
      
 78 
     | 
    
         
            +
                    return if type == Type::BUTTON
         
     | 
| 
      
 79 
     | 
    
         
            +
                    raise InvalidField.new(:sub_type, 'sub_type is not required when type is not button') if sub_type
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                    raise InvalidField.new(:index, 'index is not required when type is not button') if index
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
              end
         
     | 
| 
      
 85 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Currency
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Returns default text if localization fails.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  #
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # @returns fallback_value [String].
         
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_accessor :fallback_value
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  # Currency code as defined in ISO 4217.
         
     | 
| 
      
 12 
     | 
    
         
            +
                  #
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # @returns code [String].
         
     | 
| 
      
 14 
     | 
    
         
            +
                  attr_accessor :code
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  # Amount multiplied by 1000.
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # @returns code [Float].
         
     | 
| 
      
 19 
     | 
    
         
            +
                  attr_accessor :amount
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  def initialize(fallback_value:, code:, amount:)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @fallback_value = fallback_value
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @code = code
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @amount = amount
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  def to_json(*_args)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    {
         
     | 
| 
      
 29 
     | 
    
         
            +
                      fallback_value: fallback_value,
         
     | 
| 
      
 30 
     | 
    
         
            +
                      code: code,
         
     | 
| 
      
 31 
     | 
    
         
            +
                      amount_1000: amount
         
     | 
| 
      
 32 
     | 
    
         
            +
                    }
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
                class DateTime
         
     | 
| 
      
 6 
     | 
    
         
            +
                  # Returns default text if localization fails.
         
     | 
| 
      
 7 
     | 
    
         
            +
                  #
         
     | 
| 
      
 8 
     | 
    
         
            +
                  # @returns fallback_value [String].
         
     | 
| 
      
 9 
     | 
    
         
            +
                  attr_accessor :fallback_value
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def initialize(fallback_value:)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    @fallback_value = fallback_value
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def to_json(*_args)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    {
         
     | 
| 
      
 17 
     | 
    
         
            +
                      fallback_value: fallback_value
         
     | 
| 
      
 18 
     | 
    
         
            +
                    }
         
     | 
| 
      
 19 
     | 
    
         
            +
                  end
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,86 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
                class Media
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class InvalidMedia < StandardError
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attr_reader :field, :message
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(field, message)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @field = field
         
     | 
| 
      
 11 
     | 
    
         
            +
                      @message = message
         
     | 
| 
      
 12 
     | 
    
         
            +
                      super(message)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  # Returns media id.
         
     | 
| 
      
 17 
     | 
    
         
            +
                  #
         
     | 
| 
      
 18 
     | 
    
         
            +
                  # @returns id [String].
         
     | 
| 
      
 19 
     | 
    
         
            +
                  attr_accessor :id
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  module Type
         
     | 
| 
      
 22 
     | 
    
         
            +
                    AUDIO = 'audio'
         
     | 
| 
      
 23 
     | 
    
         
            +
                    DOCUMENT = 'document'
         
     | 
| 
      
 24 
     | 
    
         
            +
                    IMAGE = 'image'
         
     | 
| 
      
 25 
     | 
    
         
            +
                    VIDEO = 'video'
         
     | 
| 
      
 26 
     | 
    
         
            +
                    STICKER = 'sticker'
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    VALID_TYPES = [AUDIO, DOCUMENT, IMAGE, VIDEO, STICKER].freeze
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                  # @returns type [String]. Valid options ar audio, document, image, video and sticker.
         
     | 
| 
      
 32 
     | 
    
         
            +
                  attr_accessor :type
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  # The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.
         
     | 
| 
      
 35 
     | 
    
         
            +
                  # Do not use this field when the message type is set to text.
         
     | 
| 
      
 36 
     | 
    
         
            +
                  #
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # @returns link [String].
         
     | 
| 
      
 38 
     | 
    
         
            +
                  attr_accessor :link
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                  # Describes the specified document or image media.
         
     | 
| 
      
 41 
     | 
    
         
            +
                  #
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # @returns caption [String].
         
     | 
| 
      
 43 
     | 
    
         
            +
                  attr_accessor :caption
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  # Describes the filename for the specific document. Use only with document media.
         
     | 
| 
      
 46 
     | 
    
         
            +
                  #
         
     | 
| 
      
 47 
     | 
    
         
            +
                  # @returns filename [String].
         
     | 
| 
      
 48 
     | 
    
         
            +
                  attr_accessor :filename
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                  def initialize(type:, id: nil, link: nil, caption: nil, filename: nil)
         
     | 
| 
      
 51 
     | 
    
         
            +
                    @type = type
         
     | 
| 
      
 52 
     | 
    
         
            +
                    @id = id
         
     | 
| 
      
 53 
     | 
    
         
            +
                    @link = link
         
     | 
| 
      
 54 
     | 
    
         
            +
                    @caption = caption
         
     | 
| 
      
 55 
     | 
    
         
            +
                    @filename = filename
         
     | 
| 
      
 56 
     | 
    
         
            +
                    validate_media
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  def to_json(*_args)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    json = {}
         
     | 
| 
      
 61 
     | 
    
         
            +
                    json[:id] = id unless id.nil?
         
     | 
| 
      
 62 
     | 
    
         
            +
                    json[:link] = link unless link.nil?
         
     | 
| 
      
 63 
     | 
    
         
            +
                    json[:caption] = caption unless caption.nil?
         
     | 
| 
      
 64 
     | 
    
         
            +
                    json[:filename] = filename unless filename.nil?
         
     | 
| 
      
 65 
     | 
    
         
            +
                    json
         
     | 
| 
      
 66 
     | 
    
         
            +
                  end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                  private
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                  def validate_media
         
     | 
| 
      
 71 
     | 
    
         
            +
                    unless Type::VALID_TYPES.include?(type)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      raise InvalidMedia.new(:type, "invalid type. type should be audio, document, image, video or sticker")
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
                    if filename && (type != Type::DOCUMENT)
         
     | 
| 
      
 75 
     | 
    
         
            +
                      raise InvalidMedia.new(:filename, "filename can only be used with document")
         
     | 
| 
      
 76 
     | 
    
         
            +
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                    if caption && !(type == Type::DOCUMENT || type == Type::IMAGE)
         
     | 
| 
      
 79 
     | 
    
         
            +
                      raise InvalidMedia.new(:caption, "caption can only be used with document or image")
         
     | 
| 
      
 80 
     | 
    
         
            +
                    end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                    true
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,134 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module WhatsappSdk
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
                class ParameterObject
         
     | 
| 
      
 6 
     | 
    
         
            +
                  class InvalidType < StandardError
         
     | 
| 
      
 7 
     | 
    
         
            +
                    attr_accessor :message
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def initialize(type)
         
     | 
| 
      
 10 
     | 
    
         
            +
                      @message = "invalid type #{type}. type should be text, currency, date_time, image, document or video"
         
     | 
| 
      
 11 
     | 
    
         
            +
                      super
         
     | 
| 
      
 12 
     | 
    
         
            +
                    end
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  class MissingValue < StandardError
         
     | 
| 
      
 16 
     | 
    
         
            +
                    attr_reader :field, :message
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    def initialize(field, message)
         
     | 
| 
      
 19 
     | 
    
         
            +
                      @field = field
         
     | 
| 
      
 20 
     | 
    
         
            +
                      @message = message
         
     | 
| 
      
 21 
     | 
    
         
            +
                      super(message)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  # Returns the parameter type.
         
     | 
| 
      
 26 
     | 
    
         
            +
                  #
         
     | 
| 
      
 27 
     | 
    
         
            +
                  # @returns type [String] Valid options are text, currency, date_time, image, document, video.
         
     | 
| 
      
 28 
     | 
    
         
            +
                  attr_accessor :type
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  module Type
         
     | 
| 
      
 31 
     | 
    
         
            +
                    TEXT = "text"
         
     | 
| 
      
 32 
     | 
    
         
            +
                    CURRENCY = "currency"
         
     | 
| 
      
 33 
     | 
    
         
            +
                    DATE_TIME = "date_time"
         
     | 
| 
      
 34 
     | 
    
         
            +
                    IMAGE = "image"
         
     | 
| 
      
 35 
     | 
    
         
            +
                    DOCUMENT = "document"
         
     | 
| 
      
 36 
     | 
    
         
            +
                    VIDEO = "video"
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    VALID_TYPES = [TEXT, CURRENCY, DATE_TIME, IMAGE, DOCUMENT, VIDEO].freeze
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  # Returns Text string if the parameter object type is text.
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # For the header component, the character limit is 60 characters.
         
     | 
| 
      
 43 
     | 
    
         
            +
                  # For the body component, the character limit is 1024 characters.
         
     | 
| 
      
 44 
     | 
    
         
            +
                  #
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # @returns text [String]
         
     | 
| 
      
 46 
     | 
    
         
            +
                  attr_accessor :text
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  # Returns Currency if the parameter object type is currency.
         
     | 
| 
      
 49 
     | 
    
         
            +
                  #
         
     | 
| 
      
 50 
     | 
    
         
            +
                  # @returns currency [Currency]
         
     | 
| 
      
 51 
     | 
    
         
            +
                  attr_accessor :currency
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                  # Returns date_time if the parameter object type is date_time.
         
     | 
| 
      
 54 
     | 
    
         
            +
                  #
         
     | 
| 
      
 55 
     | 
    
         
            +
                  # @returns date_time [DateTime]
         
     | 
| 
      
 56 
     | 
    
         
            +
                  attr_accessor :date_time
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                  # Returns image if the parameter object type is image.
         
     | 
| 
      
 59 
     | 
    
         
            +
                  #
         
     | 
| 
      
 60 
     | 
    
         
            +
                  # @returns image [Media]
         
     | 
| 
      
 61 
     | 
    
         
            +
                  attr_accessor :image
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  # Returns document if the parameter object type is document.
         
     | 
| 
      
 64 
     | 
    
         
            +
                  #
         
     | 
| 
      
 65 
     | 
    
         
            +
                  # @returns document [Media]
         
     | 
| 
      
 66 
     | 
    
         
            +
                  attr_accessor :document
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                  # Returns video if the parameter object type is video.
         
     | 
| 
      
 69 
     | 
    
         
            +
                  #
         
     | 
| 
      
 70 
     | 
    
         
            +
                  # @returns video [Media]
         
     | 
| 
      
 71 
     | 
    
         
            +
                  attr_accessor :video
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  def initialize(type:, text: nil, currency: nil, date_time: nil, image: nil, document: nil, video: nil)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    @type = type
         
     | 
| 
      
 75 
     | 
    
         
            +
                    @text = text
         
     | 
| 
      
 76 
     | 
    
         
            +
                    @currency = currency
         
     | 
| 
      
 77 
     | 
    
         
            +
                    @date_time = date_time
         
     | 
| 
      
 78 
     | 
    
         
            +
                    @image = image
         
     | 
| 
      
 79 
     | 
    
         
            +
                    @document = document
         
     | 
| 
      
 80 
     | 
    
         
            +
                    @video = video
         
     | 
| 
      
 81 
     | 
    
         
            +
                    validate
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  def to_json(*_args)
         
     | 
| 
      
 85 
     | 
    
         
            +
                    json = { type: type }
         
     | 
| 
      
 86 
     | 
    
         
            +
                    json[type.to_sym] = case type
         
     | 
| 
      
 87 
     | 
    
         
            +
                                        when "text"
         
     | 
| 
      
 88 
     | 
    
         
            +
                                          text
         
     | 
| 
      
 89 
     | 
    
         
            +
                                        when "currency"
         
     | 
| 
      
 90 
     | 
    
         
            +
                                          currency.to_json
         
     | 
| 
      
 91 
     | 
    
         
            +
                                        when "date_time"
         
     | 
| 
      
 92 
     | 
    
         
            +
                                          date_time.to_json
         
     | 
| 
      
 93 
     | 
    
         
            +
                                        when "image"
         
     | 
| 
      
 94 
     | 
    
         
            +
                                          image.to_json
         
     | 
| 
      
 95 
     | 
    
         
            +
                                        when "document"
         
     | 
| 
      
 96 
     | 
    
         
            +
                                          document.to_json
         
     | 
| 
      
 97 
     | 
    
         
            +
                                        when "video"
         
     | 
| 
      
 98 
     | 
    
         
            +
                                          video.to_json
         
     | 
| 
      
 99 
     | 
    
         
            +
                                        else
         
     | 
| 
      
 100 
     | 
    
         
            +
                                          raise "Invalid type: #{type}"
         
     | 
| 
      
 101 
     | 
    
         
            +
                                        end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                    json
         
     | 
| 
      
 104 
     | 
    
         
            +
                  end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                  private
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
                  def validate
         
     | 
| 
      
 109 
     | 
    
         
            +
                    validate_attributes
         
     | 
| 
      
 110 
     | 
    
         
            +
                    validate_type
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  def validate_type
         
     | 
| 
      
 114 
     | 
    
         
            +
                    return if Type::VALID_TYPES.include?(type)
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                    raise InvalidType, type
         
     | 
| 
      
 117 
     | 
    
         
            +
                  end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
                  def validate_attributes
         
     | 
| 
      
 120 
     | 
    
         
            +
                    [
         
     | 
| 
      
 121 
     | 
    
         
            +
                      [:text, text],
         
     | 
| 
      
 122 
     | 
    
         
            +
                      [:currency, currency],
         
     | 
| 
      
 123 
     | 
    
         
            +
                      [:date_time, date_time],
         
     | 
| 
      
 124 
     | 
    
         
            +
                      [:image, image],
         
     | 
| 
      
 125 
     | 
    
         
            +
                      [:document, document],
         
     | 
| 
      
 126 
     | 
    
         
            +
                      [:video, video]
         
     | 
| 
      
 127 
     | 
    
         
            +
                    ].each do |type_sym, value|
         
     | 
| 
      
 128 
     | 
    
         
            +
                      next unless type == type_sym
         
     | 
| 
      
 129 
     | 
    
         
            +
                      raise MissingValue.new(type, "#{type} is required when the type is #{type}") if value.nil?
         
     | 
| 
      
 130 
     | 
    
         
            +
                    end
         
     | 
| 
      
 131 
     | 
    
         
            +
                  end
         
     | 
| 
      
 132 
     | 
    
         
            +
                end
         
     | 
| 
      
 133 
     | 
    
         
            +
              end
         
     | 
| 
      
 134 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/whatsapp_sdk.rb
    CHANGED
    
    | 
         @@ -1,24 +1,38 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            # Configuration
         
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative "whatsapp_sdk/configuration"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       3 
6 
     | 
    
         
             
            # APIs
         
     | 
| 
       4 
7 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/phone_numbers"
         
     | 
| 
       5 
8 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/messages"
         
     | 
| 
      
 9 
     | 
    
         
            +
            require_relative "whatsapp_sdk/api/medias"
         
     | 
| 
       6 
10 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/client"
         
     | 
| 
       7 
11 
     | 
    
         | 
| 
       8 
12 
     | 
    
         
             
            # APIs responses
         
     | 
| 
       9 
13 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/responses/message_data_response"
         
     | 
| 
       10 
14 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/responses/phone_number_data_response"
         
     | 
| 
       11 
15 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/responses/phone_numbers_data_response"
         
     | 
| 
       12 
     | 
    
         
            -
            require_relative "whatsapp_sdk/api/responses/ 
     | 
| 
      
 16 
     | 
    
         
            +
            require_relative "whatsapp_sdk/api/responses/message_error_response"
         
     | 
| 
       13 
17 
     | 
    
         
             
            require_relative "whatsapp_sdk/api/responses/data_response"
         
     | 
| 
      
 18 
     | 
    
         
            +
            require_relative "whatsapp_sdk/api/responses/read_message_data_response"
         
     | 
| 
      
 19 
     | 
    
         
            +
            require_relative "whatsapp_sdk/api/responses/media_data_response"
         
     | 
| 
      
 20 
     | 
    
         
            +
            require_relative "whatsapp_sdk/api/responses/success_response"
         
     | 
| 
      
 21 
     | 
    
         
            +
            require_relative "whatsapp_sdk/api/responses/error_response"
         
     | 
| 
       14 
22 
     | 
    
         | 
| 
       15 
23 
     | 
    
         
             
            # Resources
         
     | 
| 
       16 
24 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/address"
         
     | 
| 
      
 25 
     | 
    
         
            +
            require_relative "whatsapp_sdk/resource/button_parameter"
         
     | 
| 
      
 26 
     | 
    
         
            +
            require_relative "whatsapp_sdk/resource/component"
         
     | 
| 
       17 
27 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/contact_response"
         
     | 
| 
       18 
28 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/contact"
         
     | 
| 
      
 29 
     | 
    
         
            +
            require_relative "whatsapp_sdk/resource/currency"
         
     | 
| 
      
 30 
     | 
    
         
            +
            require_relative "whatsapp_sdk/resource/date_time"
         
     | 
| 
       19 
31 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/email"
         
     | 
| 
      
 32 
     | 
    
         
            +
            require_relative "whatsapp_sdk/resource/media"
         
     | 
| 
       20 
33 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/message"
         
     | 
| 
       21 
34 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/name"
         
     | 
| 
       22 
35 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/org"
         
     | 
| 
      
 36 
     | 
    
         
            +
            require_relative "whatsapp_sdk/resource/parameter_object"
         
     | 
| 
       23 
37 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/phone_number"
         
     | 
| 
       24 
38 
     | 
    
         
             
            require_relative "whatsapp_sdk/resource/url"
         
     | 
    
        data/tmp/whatsapp.png
    ADDED
    
    | 
         Binary file 
     |