whatsapp_sdk 0.12.1 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/codeql-analysis.yml +8 -6
- data/.gitignore +1 -0
- data/.rubocop.yml +0 -3
- data/CHANGELOG.md +9 -7
- data/Gemfile +0 -4
- data/Gemfile.lock +1 -20
- data/README.md +35 -55
- data/SECURITY.md +21 -0
- data/example.rb +23 -15
- data/lib/whatsapp_sdk/api/api_configuration.rb +2 -5
- data/lib/whatsapp_sdk/api/business_profile.rb +0 -12
- data/lib/whatsapp_sdk/api/client.rb +7 -43
- data/lib/whatsapp_sdk/api/medias.rb +8 -15
- data/lib/whatsapp_sdk/api/messages.rb +4 -81
- data/lib/whatsapp_sdk/api/phone_numbers.rb +0 -14
- data/lib/whatsapp_sdk/api/request.rb +0 -2
- data/lib/whatsapp_sdk/api/response.rb +1 -20
- data/lib/whatsapp_sdk/api/responses/business_profile_data_response.rb +11 -34
- data/lib/whatsapp_sdk/api/responses/data_response.rb +0 -9
- data/lib/whatsapp_sdk/api/responses/error_response.rb +1 -8
- data/lib/whatsapp_sdk/api/responses/generic_error_response.rb +8 -26
- data/lib/whatsapp_sdk/api/responses/media_data_response.rb +8 -26
- data/lib/whatsapp_sdk/api/responses/message_data_response.rb +4 -20
- data/lib/whatsapp_sdk/api/responses/message_error_response.rb +0 -1
- data/lib/whatsapp_sdk/api/responses/message_template_namespace_data_response.rb +3 -13
- data/lib/whatsapp_sdk/api/responses/phone_number_data_response.rb +19 -37
- data/lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb +2 -9
- data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +1 -6
- data/lib/whatsapp_sdk/api/responses/success_response.rb +1 -5
- data/lib/whatsapp_sdk/api/responses/template_data_response.rb +2 -7
- data/lib/whatsapp_sdk/api/responses/templates_data_response.rb +2 -9
- data/lib/whatsapp_sdk/api/templates.rb +3 -27
- data/lib/whatsapp_sdk/configuration.rb +2 -24
- data/lib/whatsapp_sdk/error.rb +0 -1
- data/lib/whatsapp_sdk/resource/address.rb +1 -30
- data/lib/whatsapp_sdk/resource/address_type.rb +3 -8
- data/lib/whatsapp_sdk/resource/business_profile.rb +0 -3
- data/lib/whatsapp_sdk/resource/button_parameter.rb +4 -20
- data/lib/whatsapp_sdk/resource/component.rb +12 -43
- data/lib/whatsapp_sdk/resource/contact.rb +1 -30
- data/lib/whatsapp_sdk/resource/contact_response.rb +1 -9
- data/lib/whatsapp_sdk/resource/currency.rb +0 -8
- data/lib/whatsapp_sdk/resource/date_time.rb +0 -6
- data/lib/whatsapp_sdk/resource/email.rb +1 -10
- data/lib/whatsapp_sdk/resource/errors.rb +1 -17
- data/lib/whatsapp_sdk/resource/interactive.rb +6 -27
- data/lib/whatsapp_sdk/resource/interactive_action.rb +10 -24
- data/lib/whatsapp_sdk/resource/interactive_action_reply_button.rb +5 -19
- data/lib/whatsapp_sdk/resource/interactive_action_section.rb +1 -11
- data/lib/whatsapp_sdk/resource/interactive_action_section_row.rb +0 -11
- data/lib/whatsapp_sdk/resource/interactive_body.rb +0 -10
- data/lib/whatsapp_sdk/resource/interactive_footer.rb +0 -10
- data/lib/whatsapp_sdk/resource/interactive_header.rb +25 -53
- data/lib/whatsapp_sdk/resource/location.rb +44 -0
- data/lib/whatsapp_sdk/resource/media.rb +10 -46
- data/lib/whatsapp_sdk/resource/media_types.rb +0 -3
- data/lib/whatsapp_sdk/resource/message.rb +0 -5
- data/lib/whatsapp_sdk/resource/name.rb +1 -28
- data/lib/whatsapp_sdk/resource/org.rb +1 -13
- data/lib/whatsapp_sdk/resource/parameter_object.rb +71 -74
- data/lib/whatsapp_sdk/resource/phone_number.rb +1 -13
- data/lib/whatsapp_sdk/resource/template.rb +23 -36
- data/lib/whatsapp_sdk/resource/url.rb +1 -10
- data/lib/whatsapp_sdk/version.rb +1 -2
- data/lib/whatsapp_sdk.rb +0 -4
- data/whatsapp_sdk.gemspec +0 -3
- metadata +5 -49
- data/sorbet/config +0 -6
- data/sorbet/rbi/annotations/faraday.rbi +0 -17
- data/sorbet/rbi/annotations/mocha.rbi +0 -34
- data/sorbet/rbi/annotations/rainbow.rbi +0 -269
- data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +0 -270
- data/sorbet/rbi/gems/faraday-net_http@2.0.3.rbi +0 -182
- data/sorbet/rbi/gems/faraday@2.3.0.rbi +0 -2494
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -272
- data/sorbet/rbi/gems/minitest@5.16.1.rbi +0 -1459
- data/sorbet/rbi/gems/mocha@1.14.0.rbi +0 -60
- data/sorbet/rbi/gems/multipart-post@2.2.3.rbi +0 -239
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -150
- data/sorbet/rbi/gems/oj@3.13.14.rbi +0 -589
- data/sorbet/rbi/gems/zeitwerk@2.6.0.rbi +0 -867
- data/sorbet/rbi/todo.rbi +0 -8
- data/sorbet/shims/request.rbi +0 -10
- data/sorbet/tapioca/config.yml +0 -13
- data/sorbet/tapioca/require.rb +0 -4
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -7,48 +6,31 @@ module WhatsappSdk
|
|
7
6
|
module Api
|
8
7
|
module Responses
|
9
8
|
class PhoneNumberDataResponse < DataResponse
|
10
|
-
|
11
|
-
|
9
|
+
attr_accessor :id, :verified_name, :display_phone_number, :quality_rating, :is_pin_enabled,
|
10
|
+
:is_official_business_account, :account_mode, :certificate, :code_verification_status,
|
11
|
+
:eligibility_for_api_business_global_search, :name_status, :new_name_status, :status,
|
12
|
+
:search_visibility, :messaging_limit_tier
|
12
13
|
|
13
|
-
sig { returns(String) }
|
14
|
-
attr_accessor :verified_name
|
15
|
-
|
16
|
-
sig { returns(String) }
|
17
|
-
attr_accessor :display_phone_number
|
18
|
-
|
19
|
-
sig { returns(String) }
|
20
|
-
attr_accessor :quality_rating
|
21
|
-
|
22
|
-
sig { returns(T::Boolean) }
|
23
|
-
attr_accessor :is_pin_enabled, :is_official_business_account
|
24
|
-
|
25
|
-
sig { returns(T.nilable(String)) }
|
26
|
-
attr_accessor :account_mode, :code_verification_status, :eligibility_for_api_business_global_search,
|
27
|
-
:certificate, :name_status, :new_name_status, :status, :search_visibility
|
28
|
-
|
29
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
30
14
|
def initialize(response)
|
31
|
-
@id =
|
32
|
-
@verified_name =
|
33
|
-
@display_phone_number =
|
34
|
-
@quality_rating =
|
35
|
-
@is_pin_enabled =
|
36
|
-
@is_official_business_account =
|
37
|
-
@account_mode =
|
38
|
-
@certificate =
|
39
|
-
@code_verification_status =
|
40
|
-
@eligibility_for_api_business_global_search =
|
41
|
-
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@
|
45
|
-
@
|
46
|
-
@messaging_limit_tier = T.let(response["messaging_limit_tier"], T.nilable(String))
|
15
|
+
@id = response["id"]
|
16
|
+
@verified_name = response["verified_name"]
|
17
|
+
@display_phone_number = response["display_phone_number"]
|
18
|
+
@quality_rating = response["quality_rating"]
|
19
|
+
@is_pin_enabled = response["is_pin_enabled"]
|
20
|
+
@is_official_business_account = response["is_official_business_account"]
|
21
|
+
@account_mode = response["account_mode"]
|
22
|
+
@certificate = response["certificate"]
|
23
|
+
@code_verification_status = response["code_verification_status"]
|
24
|
+
@eligibility_for_api_business_global_search = response["eligibility_for_api_business_global_search"]
|
25
|
+
@name_status = response["name_status"]
|
26
|
+
@new_name_status = response["new_name_status"]
|
27
|
+
@status = response["status"]
|
28
|
+
@search_visibility = response["search_visibility"]
|
29
|
+
@messaging_limit_tier = response["messaging_limit_tier"]
|
47
30
|
|
48
31
|
super(response)
|
49
32
|
end
|
50
33
|
|
51
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(PhoneNumberDataResponse)) }
|
52
34
|
def self.build_from_response(response:)
|
53
35
|
return unless response["id"]
|
54
36
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -8,19 +7,14 @@ module WhatsappSdk
|
|
8
7
|
module Api
|
9
8
|
module Responses
|
10
9
|
class PhoneNumbersDataResponse < DataResponse
|
11
|
-
sig { returns(T::Array[PhoneNumberDataResponse]) }
|
12
10
|
attr_reader :phone_numbers
|
13
11
|
|
14
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
15
12
|
def initialize(response)
|
16
|
-
@phone_numbers =
|
17
|
-
|
18
|
-
T::Array[PhoneNumberDataResponse]
|
19
|
-
)
|
13
|
+
@phone_numbers = response['data']&.map { |phone_number| parse_phone_number(phone_number) }
|
14
|
+
|
20
15
|
super(response)
|
21
16
|
end
|
22
17
|
|
23
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(PhoneNumbersDataResponse)) }
|
24
18
|
def self.build_from_response(response:)
|
25
19
|
return unless response["data"]
|
26
20
|
|
@@ -29,7 +23,6 @@ module WhatsappSdk
|
|
29
23
|
|
30
24
|
private
|
31
25
|
|
32
|
-
sig { params(phone_number: T::Hash[T.untyped, T.untyped]).returns(PhoneNumberDataResponse) }
|
33
26
|
def parse_phone_number(phone_number)
|
34
27
|
PhoneNumberDataResponse.new(phone_number)
|
35
28
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "../request"
|
@@ -10,21 +9,17 @@ module WhatsappSdk
|
|
10
9
|
module Api
|
11
10
|
module Responses
|
12
11
|
class ReadMessageDataResponse < DataResponse
|
13
|
-
extend T::Sig
|
14
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
15
12
|
def initialize(response:)
|
16
|
-
@success =
|
13
|
+
@success = response["success"]
|
17
14
|
super(response)
|
18
15
|
end
|
19
16
|
|
20
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(ReadMessageDataResponse)) }
|
21
17
|
def self.build_from_response(response:)
|
22
18
|
return if response["error"]
|
23
19
|
|
24
20
|
new(response: response)
|
25
21
|
end
|
26
22
|
|
27
|
-
sig { returns(T::Boolean) }
|
28
23
|
def success?
|
29
24
|
@success
|
30
25
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -7,20 +6,17 @@ module WhatsappSdk
|
|
7
6
|
module Api
|
8
7
|
module Responses
|
9
8
|
class SuccessResponse < DataResponse
|
10
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
11
9
|
def initialize(response:)
|
12
|
-
@success =
|
10
|
+
@success = response["success"]
|
13
11
|
super(response)
|
14
12
|
end
|
15
13
|
|
16
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(SuccessResponse)) }
|
17
14
|
def self.build_from_response(response:)
|
18
15
|
return unless response["success"]
|
19
16
|
|
20
17
|
new(response: response)
|
21
18
|
end
|
22
19
|
|
23
|
-
sig { returns(T::Boolean) }
|
24
20
|
def success?
|
25
21
|
@success
|
26
22
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -8,17 +7,14 @@ module WhatsappSdk
|
|
8
7
|
module Api
|
9
8
|
module Responses
|
10
9
|
class TemplateDataResponse < DataResponse
|
11
|
-
sig { returns(::WhatsappSdk::Resource::Template) }
|
12
10
|
attr_reader :template
|
13
11
|
|
14
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
15
12
|
def initialize(response:)
|
16
13
|
@template = parse_template(response)
|
17
14
|
|
18
15
|
super(response)
|
19
16
|
end
|
20
17
|
|
21
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(TemplateDataResponse)) }
|
22
18
|
def self.build_from_response(response:)
|
23
19
|
return unless response["id"]
|
24
20
|
|
@@ -27,10 +23,9 @@ module WhatsappSdk
|
|
27
23
|
|
28
24
|
private
|
29
25
|
|
30
|
-
sig { params(template_json: T::Hash[T.untyped, T.untyped]).returns(::WhatsappSdk::Resource::Template) }
|
31
26
|
def parse_template(template_json)
|
32
|
-
status =
|
33
|
-
category =
|
27
|
+
status = template_json["status"]
|
28
|
+
category = template_json["category"]
|
34
29
|
id = template_json["id"]
|
35
30
|
language = template_json["language"]
|
36
31
|
name = template_json["name"]
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -8,19 +7,14 @@ module WhatsappSdk
|
|
8
7
|
module Api
|
9
8
|
module Responses
|
10
9
|
class TemplatesDataResponse < DataResponse
|
11
|
-
sig { returns(T::Array[TemplateDataResponse]) }
|
12
10
|
attr_reader :templates
|
13
11
|
|
14
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
15
12
|
def initialize(response)
|
16
|
-
@templates =
|
17
|
-
|
18
|
-
T::Array[TemplateDataResponse]
|
19
|
-
)
|
13
|
+
@templates = response['data']&.map { |template| parse_templates(template) }
|
14
|
+
|
20
15
|
super(response)
|
21
16
|
end
|
22
17
|
|
23
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(TemplatesDataResponse)) }
|
24
18
|
def self.build_from_response(response:)
|
25
19
|
return unless response["data"]
|
26
20
|
|
@@ -29,7 +23,6 @@ module WhatsappSdk
|
|
29
23
|
|
30
24
|
private
|
31
25
|
|
32
|
-
sig { params(template: T::Hash[T.untyped, T.untyped]).returns(TemplateDataResponse) }
|
33
26
|
def parse_templates(template)
|
34
27
|
TemplateDataResponse.new(response: template)
|
35
28
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "request"
|
@@ -13,15 +12,11 @@ require_relative "../resource/languages"
|
|
13
12
|
module WhatsappSdk
|
14
13
|
module Api
|
15
14
|
class Templates < Request
|
16
|
-
DEFAULT_HEADERS =
|
15
|
+
DEFAULT_HEADERS = { 'Content-Type' => 'application/json' }.freeze
|
17
16
|
|
18
17
|
class InvalidCategoryError < StandardError
|
19
|
-
extend T::Sig
|
20
|
-
|
21
|
-
sig { returns(String) }
|
22
18
|
attr_reader :category
|
23
19
|
|
24
|
-
sig { params(category: String).void }
|
25
20
|
def initialize(category:)
|
26
21
|
@category = category
|
27
22
|
|
@@ -42,20 +37,10 @@ module WhatsappSdk
|
|
42
37
|
# Set to true to allow us to assign a category based on the template guidelines and the template's contents.
|
43
38
|
# This can prevent your template from being rejected for miscategorization.
|
44
39
|
# @return [Response] Response object.
|
45
|
-
sig do
|
46
|
-
params(
|
47
|
-
business_id: Integer,
|
48
|
-
name: String,
|
49
|
-
category: String,
|
50
|
-
language: String,
|
51
|
-
components_json: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]]),
|
52
|
-
allow_category_change: T.nilable(T::Boolean)
|
53
|
-
).returns(Response)
|
54
|
-
end
|
55
40
|
def create(
|
56
41
|
business_id:, name:, category:, language:, components_json: nil, allow_category_change: nil
|
57
42
|
)
|
58
|
-
unless WhatsappSdk::Resource::Template::Category.
|
43
|
+
unless WhatsappSdk::Resource::Template::Category.valid?(category)
|
59
44
|
raise InvalidCategoryError.new(category: category)
|
60
45
|
end
|
61
46
|
|
@@ -90,7 +75,6 @@ module WhatsappSdk
|
|
90
75
|
# @param business_id [Integer] The business ID.
|
91
76
|
# @param limit [Integer] Optional. Number of templates to return in a single page.
|
92
77
|
# @return [Response] Response object.
|
93
|
-
sig { params(business_id: Integer, limit: T.nilable(Integer)).returns(Response) }
|
94
78
|
def templates(business_id:, limit: 100)
|
95
79
|
params = {}
|
96
80
|
params["limit"] = limit if limit
|
@@ -113,7 +97,6 @@ module WhatsappSdk
|
|
113
97
|
#
|
114
98
|
# @param business_id [Integer] The business ID.
|
115
99
|
# @return [Response] Response object.
|
116
|
-
sig { params(business_id: Integer).returns(Response) }
|
117
100
|
def get_message_template_namespace(business_id:)
|
118
101
|
response = send_request(
|
119
102
|
endpoint: business_id.to_s,
|
@@ -139,7 +122,7 @@ module WhatsappSdk
|
|
139
122
|
# @param components_json [Json] Components that make up the template..
|
140
123
|
# return [Response] Response object.
|
141
124
|
def update(template_id:, category: nil, components_json: nil)
|
142
|
-
if category && !WhatsappSdk::Resource::Template::Category.
|
125
|
+
if category && !WhatsappSdk::Resource::Template::Category.valid?(category)
|
143
126
|
raise InvalidCategoryError.new(category: category)
|
144
127
|
end
|
145
128
|
|
@@ -173,13 +156,6 @@ module WhatsappSdk
|
|
173
156
|
# @param hsm_id [String] Optional. The template's id.
|
174
157
|
#
|
175
158
|
# @return [Response] Response object.
|
176
|
-
sig do
|
177
|
-
params(
|
178
|
-
business_id: Integer,
|
179
|
-
name: String,
|
180
|
-
hsm_id: T.nilable(String)
|
181
|
-
).returns(Response)
|
182
|
-
end
|
183
159
|
def delete(business_id:, name:, hsm_id: nil)
|
184
160
|
params = { name: name }
|
185
161
|
params[:hsm_id] = hsm_id if hsm_id
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
@@ -10,31 +9,11 @@ module WhatsappSdk
|
|
10
9
|
#
|
11
10
|
# The gem have access to the client through WhatsappSdk.configuration.client
|
12
11
|
class Configuration
|
13
|
-
|
14
|
-
|
15
|
-
logger_or_subclass_or_nil = T.nilable(T.any(Logger, T.class_of(Logger)))
|
16
|
-
|
17
|
-
sig { returns(String) }
|
18
|
-
attr_accessor :access_token
|
19
|
-
|
20
|
-
sig { returns(String) }
|
21
|
-
attr_accessor :api_version
|
12
|
+
attr_accessor :access_token, :api_version
|
22
13
|
|
23
14
|
# loggers like ActiveSupport::Logger (Rails.logger) is a subclass of Logger
|
24
|
-
|
25
|
-
attr_accessor :logger
|
15
|
+
attr_accessor :logger, :logger_options
|
26
16
|
|
27
|
-
sig { returns(Hash) }
|
28
|
-
attr_accessor :logger_options
|
29
|
-
|
30
|
-
sig do
|
31
|
-
params(
|
32
|
-
access_token: String,
|
33
|
-
api_version: String,
|
34
|
-
logger: logger_or_subclass_or_nil,
|
35
|
-
logger_options: Hash
|
36
|
-
).void
|
37
|
-
end
|
38
17
|
def initialize(
|
39
18
|
access_token = "",
|
40
19
|
api_version = Api::ApiConfiguration::DEFAULT_API_VERSION,
|
@@ -47,7 +26,6 @@ module WhatsappSdk
|
|
47
26
|
@logger_options = logger_options
|
48
27
|
end
|
49
28
|
|
50
|
-
sig { returns(Api::Client) }
|
51
29
|
def client
|
52
30
|
Api::Client.new(access_token, api_version, logger, logger_options)
|
53
31
|
end
|
data/lib/whatsapp_sdk/error.rb
CHANGED
@@ -1,38 +1,10 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Resource
|
6
5
|
class Address
|
7
|
-
|
6
|
+
attr_accessor :street, :city, :state, :zip, :country, :country_code, :type
|
8
7
|
|
9
|
-
sig { returns(String) }
|
10
|
-
attr_accessor :street
|
11
|
-
|
12
|
-
sig { returns(String) }
|
13
|
-
attr_accessor :city
|
14
|
-
|
15
|
-
sig { returns(String) }
|
16
|
-
attr_accessor :state
|
17
|
-
|
18
|
-
sig { returns(String) }
|
19
|
-
attr_accessor :zip
|
20
|
-
|
21
|
-
sig { returns(String) }
|
22
|
-
attr_accessor :country
|
23
|
-
|
24
|
-
sig { returns(String) }
|
25
|
-
attr_accessor :country_code
|
26
|
-
|
27
|
-
sig { returns(AddressType) }
|
28
|
-
attr_accessor :type
|
29
|
-
|
30
|
-
sig do
|
31
|
-
params(
|
32
|
-
street: String, city: String, state: String, zip: String,
|
33
|
-
country: String, country_code: String, type: AddressType
|
34
|
-
).void
|
35
|
-
end
|
36
8
|
def initialize(street:, city:, state:, zip:, country:, country_code:, type: AddressType::Home)
|
37
9
|
@street = street
|
38
10
|
@city = city
|
@@ -43,7 +15,6 @@ module WhatsappSdk
|
|
43
15
|
@type = type
|
44
16
|
end
|
45
17
|
|
46
|
-
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
47
18
|
def to_h
|
48
19
|
{
|
49
20
|
street: @street,
|
@@ -1,15 +1,10 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Resource
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
enums do
|
10
|
-
Home = new("Home")
|
11
|
-
Work = new("Work")
|
12
|
-
end
|
5
|
+
module AddressType
|
6
|
+
HOME = "Home"
|
7
|
+
WORK = "Work"
|
13
8
|
end
|
14
9
|
end
|
15
10
|
end
|
@@ -1,11 +1,8 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Resource
|
6
5
|
class BusinessProfile
|
7
|
-
extend T::Sig
|
8
|
-
|
9
6
|
VERTICAL_VALUES = %w[
|
10
7
|
UNDEFINED OTHER AUTO BEAUTY APPAREL EDU ENTERTAIN EVENT_PLAN FINANCE GROCERY
|
11
8
|
GOVT HOTEL HEALTH NONPROFIT PROF_SERVICES RETAIL TRAVEL RESTAURANT NOT_A_BIZ
|
@@ -1,24 +1,16 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Resource
|
6
5
|
class ButtonParameter
|
7
|
-
extend T::Sig
|
8
|
-
|
9
6
|
# Returns the button parameter type.
|
10
7
|
#
|
11
8
|
# @returns type [String] Valid options are payload and text.
|
12
|
-
sig { returns(Type) }
|
13
9
|
attr_accessor :type
|
14
10
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
enums do
|
19
|
-
Text = new("text")
|
20
|
-
Payload = new("payload")
|
21
|
-
end
|
11
|
+
module Type
|
12
|
+
TEXT = "text"
|
13
|
+
PAYLOAD = "payload"
|
22
14
|
end
|
23
15
|
|
24
16
|
# Required for quick_reply buttons.
|
@@ -26,31 +18,23 @@ module WhatsappSdk
|
|
26
18
|
# in addition to the display text on the button.
|
27
19
|
#
|
28
20
|
# @returns payload [String]
|
29
|
-
sig { returns(T.nilable(String)) }
|
30
21
|
attr_accessor :payload
|
31
22
|
|
32
23
|
# Required for URL buttons.
|
33
24
|
# Developer-provided suffix that is appended to the predefined prefix URL in the template.
|
34
25
|
#
|
35
26
|
# @returns text [String]
|
36
|
-
sig { returns(T.nilable(String)) }
|
37
27
|
attr_accessor :text
|
38
28
|
|
39
|
-
sig do
|
40
|
-
params(
|
41
|
-
type: Type, payload: T.nilable(String), text: T.nilable(String)
|
42
|
-
).void
|
43
|
-
end
|
44
29
|
def initialize(type:, payload: nil, text: nil)
|
45
30
|
@type = type
|
46
31
|
@payload = payload
|
47
32
|
@text = text
|
48
33
|
end
|
49
34
|
|
50
|
-
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
51
35
|
def to_json
|
52
36
|
json = {
|
53
|
-
type: type
|
37
|
+
type: type
|
54
38
|
}
|
55
39
|
json[:payload] = payload if payload
|
56
40
|
json[:text] = text if text
|
@@ -1,21 +1,11 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Resource
|
6
5
|
class Component
|
7
|
-
extend T::Sig
|
8
|
-
|
9
6
|
class InvalidField < StandardError
|
10
|
-
|
11
|
-
|
12
|
-
sig { returns(Symbol) }
|
13
|
-
attr_reader :field
|
7
|
+
attr_reader :field, :message
|
14
8
|
|
15
|
-
sig { returns(String) }
|
16
|
-
attr_reader :message
|
17
|
-
|
18
|
-
sig { params(field: Symbol, message: String).void }
|
19
9
|
def initialize(field, message)
|
20
10
|
@field = field
|
21
11
|
@message = message
|
@@ -23,35 +13,25 @@ module WhatsappSdk
|
|
23
13
|
end
|
24
14
|
end
|
25
15
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
Header = new("header")
|
31
|
-
Body = new("body")
|
32
|
-
Button = new("button")
|
33
|
-
end
|
16
|
+
module Type
|
17
|
+
HEADER = "header"
|
18
|
+
BODY = "body"
|
19
|
+
BUTTON = "button"
|
34
20
|
end
|
35
21
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
enums do
|
40
|
-
QuickReply = new("quick_reply")
|
41
|
-
Url = new("url")
|
42
|
-
end
|
22
|
+
module Subtype
|
23
|
+
QUICK_REPLY = "quick_reply"
|
24
|
+
URL = "url"
|
43
25
|
end
|
44
26
|
|
45
27
|
# Returns the Component type.
|
46
28
|
#
|
47
29
|
# @returns type [String]. Supported Options are header, body and button.
|
48
|
-
sig { returns(Type) }
|
49
30
|
attr_accessor :type
|
50
31
|
|
51
32
|
# Returns the parameters of the component. For button type, it's required.
|
52
33
|
#
|
53
34
|
# @returns parameter [Array<ButtonParameter, ParameterObject>] .
|
54
|
-
sig { returns(T::Array[T.any(ButtonParameter, ParameterObject)]) }
|
55
35
|
attr_accessor :parameters
|
56
36
|
|
57
37
|
# Returns the Type of button to create. Required when type=button. Not used for the other types.
|
@@ -62,51 +42,40 @@ module WhatsappSdk
|
|
62
42
|
# appending the text parameter to the predefined prefix URL in the template.
|
63
43
|
#
|
64
44
|
# @returns subtype [String]. Valid options are quick_reply and url.
|
65
|
-
sig { returns(T.nilable(Component::Subtype)) }
|
66
45
|
attr_accessor :sub_type
|
67
46
|
|
68
47
|
# Required when type=button. Not used for the other types.
|
69
48
|
# Position index of the button. You can have up to 3 buttons using index values of 0 to 2.
|
70
49
|
#
|
71
50
|
# @returns index [Integer].
|
72
|
-
sig { returns(T.nilable(Integer)) }
|
73
51
|
attr_accessor :index
|
74
52
|
|
75
|
-
sig { params(parameter: T.any(ButtonParameter, ParameterObject)).void }
|
76
53
|
def add_parameter(parameter)
|
77
54
|
@parameters << parameter
|
78
55
|
end
|
79
56
|
|
80
|
-
sig do
|
81
|
-
params(
|
82
|
-
type: Type, parameters: T::Array[T.any(ButtonParameter, ParameterObject)],
|
83
|
-
sub_type: T.nilable(Component::Subtype), index: T.nilable(Integer)
|
84
|
-
).void
|
85
|
-
end
|
86
57
|
def initialize(type:, parameters: [], sub_type: nil, index: nil)
|
87
58
|
@parameters = parameters
|
88
59
|
@type = type
|
89
60
|
@sub_type = sub_type
|
90
|
-
@index = index.nil? && type == Type::
|
61
|
+
@index = index.nil? && type == Type::BUTTON ? 0 : index
|
91
62
|
validate_fields
|
92
63
|
end
|
93
64
|
|
94
|
-
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
95
65
|
def to_json
|
96
66
|
json = {
|
97
|
-
type: type
|
67
|
+
type: type,
|
98
68
|
parameters: parameters.map(&:to_json)
|
99
69
|
}
|
100
|
-
json[:sub_type] = sub_type
|
70
|
+
json[:sub_type] = sub_type if sub_type
|
101
71
|
json[:index] = index if index
|
102
72
|
json
|
103
73
|
end
|
104
74
|
|
105
75
|
private
|
106
76
|
|
107
|
-
sig { void }
|
108
77
|
def validate_fields
|
109
|
-
return if type == Type::
|
78
|
+
return if type == Type::BUTTON
|
110
79
|
|
111
80
|
raise InvalidField.new(:sub_type, 'sub_type is not required when type is not button') if sub_type
|
112
81
|
|
@@ -1,38 +1,10 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Resource
|
6
5
|
class Contact
|
7
|
-
|
6
|
+
attr_accessor :addresses, :birthday, :emails, :name, :org, :phones, :urls
|
8
7
|
|
9
|
-
sig { returns(T::Array[Address]) }
|
10
|
-
attr_accessor :addresses
|
11
|
-
|
12
|
-
sig { returns(String) }
|
13
|
-
attr_accessor :birthday
|
14
|
-
|
15
|
-
sig { returns(T::Array[Email]) }
|
16
|
-
attr_accessor :emails
|
17
|
-
|
18
|
-
sig { returns(Name) }
|
19
|
-
attr_accessor :name
|
20
|
-
|
21
|
-
sig { returns(Org) }
|
22
|
-
attr_accessor :org
|
23
|
-
|
24
|
-
sig { returns(T::Array[PhoneNumber]) }
|
25
|
-
attr_accessor :phones
|
26
|
-
|
27
|
-
sig { returns(T::Array[Url]) }
|
28
|
-
attr_accessor :urls
|
29
|
-
|
30
|
-
sig do
|
31
|
-
params(
|
32
|
-
addresses: T::Array[Address], birthday: String, emails: T::Array[Email],
|
33
|
-
name: Name, org: Org, phones: T::Array[PhoneNumber], urls: T::Array[Url]
|
34
|
-
).void
|
35
|
-
end
|
36
8
|
def initialize(addresses:, birthday:, emails:, name:, org:, phones:, urls:)
|
37
9
|
@addresses = addresses
|
38
10
|
@birthday = birthday
|
@@ -43,7 +15,6 @@ module WhatsappSdk
|
|
43
15
|
@urls = urls
|
44
16
|
end
|
45
17
|
|
46
|
-
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
47
18
|
def to_h
|
48
19
|
{
|
49
20
|
addresses: addresses.map(&:to_h),
|