whatsapp_sdk 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
- data/.github/workflows/codeql-analysis.yml +72 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +14 -0
- data/CHANGELOG.md +8 -1
- data/Gemfile +6 -0
- data/Gemfile.lock +48 -1
- data/README.md +107 -33
- data/Rakefile +1 -0
- data/bin/tapioca +30 -0
- data/example.rb +23 -20
- data/lib/version.rb +2 -1
- data/lib/whatsapp_sdk/api/client.rb +14 -3
- data/lib/whatsapp_sdk/api/medias.rb +12 -3
- data/lib/whatsapp_sdk/api/messages.rb +72 -14
- data/lib/whatsapp_sdk/api/phone_numbers.rb +3 -0
- data/lib/whatsapp_sdk/api/request.rb +2 -2
- data/lib/whatsapp_sdk/api/response.rb +17 -1
- data/lib/whatsapp_sdk/api/responses/data_response.rb +10 -3
- data/lib/whatsapp_sdk/api/responses/error_response.rb +8 -1
- data/lib/whatsapp_sdk/api/responses/media_data_response.rb +26 -7
- data/lib/whatsapp_sdk/api/responses/message_data_response.rb +20 -3
- data/lib/whatsapp_sdk/api/responses/message_error_response.rb +26 -7
- data/lib/whatsapp_sdk/api/responses/phone_number_data_response.rb +18 -5
- data/lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb +9 -1
- data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +10 -3
- data/lib/whatsapp_sdk/api/responses/success_response.rb +5 -1
- data/lib/whatsapp_sdk/configuration.rb +7 -14
- data/lib/whatsapp_sdk/error.rb +1 -0
- data/lib/whatsapp_sdk/resource/address.rb +30 -6
- data/lib/whatsapp_sdk/resource/address_type.rb +15 -0
- data/lib/whatsapp_sdk/resource/button_parameter.rb +19 -23
- data/lib/whatsapp_sdk/resource/component.rb +45 -13
- data/lib/whatsapp_sdk/resource/contact.rb +30 -1
- data/lib/whatsapp_sdk/resource/contact_response.rb +9 -1
- data/lib/whatsapp_sdk/resource/currency.rb +9 -1
- data/lib/whatsapp_sdk/resource/date_time.rb +7 -1
- data/lib/whatsapp_sdk/resource/email.rb +9 -5
- data/lib/whatsapp_sdk/resource/media.rb +44 -15
- data/lib/whatsapp_sdk/resource/message.rb +5 -0
- data/lib/whatsapp_sdk/resource/name.rb +28 -1
- data/lib/whatsapp_sdk/resource/org.rb +13 -1
- data/lib/whatsapp_sdk/resource/parameter_object.rb +82 -39
- data/lib/whatsapp_sdk/resource/phone_number.rb +12 -5
- data/lib/whatsapp_sdk/resource/url.rb +9 -5
- data/lib/whatsapp_sdk.rb +19 -33
- data/sorbet/config +6 -0
- data/sorbet/rbi/annotations/faraday.rbi +17 -0
- data/sorbet/rbi/annotations/mocha.rbi +34 -0
- data/sorbet/rbi/annotations/rainbow.rbi +269 -0
- data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +270 -0
- data/sorbet/rbi/gems/faraday-net_http@2.0.3.rbi +182 -0
- data/sorbet/rbi/gems/faraday@2.3.0.rbi +2494 -0
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
- data/sorbet/rbi/gems/minitest@5.16.1.rbi +1459 -0
- data/sorbet/rbi/gems/mocha@1.14.0.rbi +60 -0
- data/sorbet/rbi/gems/multipart-post@2.2.3.rbi +239 -0
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +150 -0
- data/sorbet/rbi/gems/oj@3.13.14.rbi +589 -0
- data/sorbet/rbi/gems/zeitwerk@2.6.0.rbi +867 -0
- data/sorbet/rbi/todo.rbi +8 -0
- data/sorbet/shims/request.rbi +10 -0
- data/sorbet/tapioca/config.yml +13 -0
- data/sorbet/tapioca/require.rb +5 -0
- data/whatsapp_sdk.gemspec +5 -1
- metadata +67 -2
@@ -1,11 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
2
3
|
|
3
4
|
module WhatsappSdk
|
4
5
|
module Resource
|
5
6
|
class Media
|
7
|
+
extend T::Sig
|
8
|
+
|
6
9
|
class InvalidMedia < StandardError
|
7
|
-
|
10
|
+
extend T::Sig
|
11
|
+
|
12
|
+
sig { returns(Symbol) }
|
13
|
+
attr_reader :field
|
14
|
+
|
15
|
+
sig { returns(String) }
|
16
|
+
attr_reader :message
|
8
17
|
|
18
|
+
sig { params(field: Symbol, message: String).void }
|
9
19
|
def initialize(field, message)
|
10
20
|
@field = field
|
11
21
|
@message = message
|
@@ -16,39 +26,52 @@ module WhatsappSdk
|
|
16
26
|
# Returns media id.
|
17
27
|
#
|
18
28
|
# @returns id [String].
|
29
|
+
sig { returns(T.nilable(String)) }
|
19
30
|
attr_accessor :id
|
20
31
|
|
21
|
-
|
22
|
-
|
23
|
-
DOCUMENT = 'document'
|
24
|
-
IMAGE = 'image'
|
25
|
-
VIDEO = 'video'
|
26
|
-
STICKER = 'sticker'
|
32
|
+
class Type < T::Enum
|
33
|
+
extend T::Sig
|
27
34
|
|
28
|
-
|
35
|
+
enums do
|
36
|
+
Audio = new('audio')
|
37
|
+
Document = new('document')
|
38
|
+
Image = new('image')
|
39
|
+
Video = new('video')
|
40
|
+
Sticker = new('sticker')
|
41
|
+
end
|
29
42
|
end
|
30
43
|
|
31
44
|
# @returns type [String]. Valid options ar audio, document, image, video and sticker.
|
45
|
+
sig { returns(Type) }
|
32
46
|
attr_accessor :type
|
33
47
|
|
34
48
|
# The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.
|
35
49
|
# Do not use this field when the message type is set to text.
|
36
50
|
#
|
37
51
|
# @returns link [String].
|
52
|
+
sig { returns(T.nilable(String)) }
|
38
53
|
attr_accessor :link
|
39
54
|
|
40
55
|
# Describes the specified document or image media.
|
41
56
|
#
|
42
57
|
# @returns caption [String].
|
58
|
+
sig { returns(T.nilable(String)) }
|
43
59
|
attr_accessor :caption
|
44
60
|
|
45
61
|
# Describes the filename for the specific document. Use only with document media.
|
46
62
|
#
|
47
63
|
# @returns filename [String].
|
64
|
+
sig { returns(T.nilable(String)) }
|
48
65
|
attr_accessor :filename
|
49
66
|
|
67
|
+
sig do
|
68
|
+
params(
|
69
|
+
type: T.any(Type, String), id: T.nilable(String), link: T.nilable(String),
|
70
|
+
caption: T.nilable(String), filename: T.nilable(String)
|
71
|
+
).void
|
72
|
+
end
|
50
73
|
def initialize(type:, id: nil, link: nil, caption: nil, filename: nil)
|
51
|
-
@type = type
|
74
|
+
@type = T.let(deserialize_type(type), Type)
|
52
75
|
@id = id
|
53
76
|
@link = link
|
54
77
|
@caption = caption
|
@@ -56,7 +79,8 @@ module WhatsappSdk
|
|
56
79
|
validate_media
|
57
80
|
end
|
58
81
|
|
59
|
-
|
82
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
83
|
+
def to_json
|
60
84
|
json = {}
|
61
85
|
json[:id] = id unless id.nil?
|
62
86
|
json[:link] = link unless link.nil?
|
@@ -67,15 +91,20 @@ module WhatsappSdk
|
|
67
91
|
|
68
92
|
private
|
69
93
|
|
94
|
+
sig { params(type: T.any(String, Type)).returns(Type) }
|
95
|
+
def deserialize_type(type)
|
96
|
+
return type if type.is_a?(Type)
|
97
|
+
|
98
|
+
Type.deserialize(type)
|
99
|
+
end
|
100
|
+
|
101
|
+
sig { returns(T::Boolean) }
|
70
102
|
def validate_media
|
71
|
-
|
72
|
-
raise InvalidMedia.new(:type, "invalid type. type should be audio, document, image, video or sticker")
|
73
|
-
end
|
74
|
-
if filename && (type != Type::DOCUMENT)
|
103
|
+
if filename && (type != Type::Document)
|
75
104
|
raise InvalidMedia.new(:filename, "filename can only be used with document")
|
76
105
|
end
|
77
106
|
|
78
|
-
if caption && !(type == Type::
|
107
|
+
if caption && !(type == Type::Document || type == Type::Image)
|
79
108
|
raise InvalidMedia.new(:caption, "caption can only be used with document or image")
|
80
109
|
end
|
81
110
|
|
@@ -1,10 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
2
3
|
|
3
4
|
module WhatsappSdk
|
4
5
|
module Resource
|
5
6
|
class Name
|
6
|
-
|
7
|
+
extend T::Sig
|
7
8
|
|
9
|
+
sig { returns(T.nilable(String)) }
|
10
|
+
attr_accessor :formatted_name
|
11
|
+
|
12
|
+
sig { returns(T.nilable(String)) }
|
13
|
+
attr_accessor :first_name
|
14
|
+
|
15
|
+
sig { returns(T.nilable(String)) }
|
16
|
+
attr_accessor :last_name
|
17
|
+
|
18
|
+
sig { returns(T.nilable(String)) }
|
19
|
+
attr_accessor :middle_name
|
20
|
+
|
21
|
+
sig { returns(T.nilable(String)) }
|
22
|
+
attr_accessor :suffix
|
23
|
+
|
24
|
+
sig { returns(T.nilable(String)) }
|
25
|
+
attr_accessor :prefix
|
26
|
+
|
27
|
+
sig do
|
28
|
+
params(
|
29
|
+
formatted_name: T.nilable(String), first_name: T.nilable(String),
|
30
|
+
last_name: T.nilable(String), middle_name: T.nilable(String),
|
31
|
+
suffix: T.nilable(String), prefix: T.nilable(String)
|
32
|
+
).void
|
33
|
+
end
|
8
34
|
def initialize(
|
9
35
|
formatted_name: nil, first_name: nil,
|
10
36
|
last_name: nil, middle_name: nil, suffix: nil, prefix: nil
|
@@ -17,6 +43,7 @@ module WhatsappSdk
|
|
17
43
|
@prefix = prefix
|
18
44
|
end
|
19
45
|
|
46
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
20
47
|
def to_h
|
21
48
|
{
|
22
49
|
formatted_name: @formatted_name,
|
@@ -1,16 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
2
3
|
|
3
4
|
module WhatsappSdk
|
4
5
|
module Resource
|
5
6
|
class Org
|
6
|
-
|
7
|
+
extend T::Sig
|
7
8
|
|
9
|
+
sig { returns(String) }
|
10
|
+
attr_accessor :company
|
11
|
+
|
12
|
+
sig { returns(String) }
|
13
|
+
attr_accessor :department
|
14
|
+
|
15
|
+
sig { returns(String) }
|
16
|
+
attr_accessor :title
|
17
|
+
|
18
|
+
sig { params(company: String, department: String, title: String).void }
|
8
19
|
def initialize(company:, department:, title:)
|
9
20
|
@company = company
|
10
21
|
@department = department
|
11
22
|
@title = title
|
12
23
|
end
|
13
24
|
|
25
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
14
26
|
def to_h
|
15
27
|
{
|
16
28
|
company: @company,
|
@@ -1,20 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
2
3
|
|
3
4
|
module WhatsappSdk
|
4
5
|
module Resource
|
5
6
|
class ParameterObject
|
7
|
+
extend T::Sig
|
8
|
+
|
6
9
|
class InvalidType < StandardError
|
10
|
+
extend T::Sig
|
11
|
+
|
12
|
+
sig { returns(String) }
|
7
13
|
attr_accessor :message
|
8
14
|
|
15
|
+
sig { params(type: String).void }
|
9
16
|
def initialize(type)
|
10
|
-
@message =
|
17
|
+
@message = T.let(
|
18
|
+
"invalid type #{type}. type should be text, currency, date_time, image, document or video",
|
19
|
+
String
|
20
|
+
)
|
11
21
|
super
|
12
22
|
end
|
13
23
|
end
|
14
24
|
|
15
25
|
class MissingValue < StandardError
|
16
|
-
|
26
|
+
extend T::Sig
|
27
|
+
|
28
|
+
sig { returns(String) }
|
29
|
+
attr_reader :field
|
17
30
|
|
31
|
+
sig { returns(String) }
|
32
|
+
attr_reader :message
|
33
|
+
|
34
|
+
sig { params(field: String, message: String).void }
|
18
35
|
def initialize(field, message)
|
19
36
|
@field = field
|
20
37
|
@message = message
|
@@ -25,17 +42,20 @@ module WhatsappSdk
|
|
25
42
|
# Returns the parameter type.
|
26
43
|
#
|
27
44
|
# @returns type [String] Valid options are text, currency, date_time, image, document, video.
|
45
|
+
sig { returns(Type) }
|
28
46
|
attr_accessor :type
|
29
47
|
|
30
|
-
|
31
|
-
|
32
|
-
CURRENCY = "currency"
|
33
|
-
DATE_TIME = "date_time"
|
34
|
-
IMAGE = "image"
|
35
|
-
DOCUMENT = "document"
|
36
|
-
VIDEO = "video"
|
48
|
+
class Type < T::Enum
|
49
|
+
extend T::Sig
|
37
50
|
|
38
|
-
|
51
|
+
enums do
|
52
|
+
Text = new("text")
|
53
|
+
Currency = new("currency")
|
54
|
+
DateTime = new("date_time")
|
55
|
+
Image = new("image")
|
56
|
+
Document = new("document")
|
57
|
+
Video = new("video")
|
58
|
+
end
|
39
59
|
end
|
40
60
|
|
41
61
|
# Returns Text string if the parameter object type is text.
|
@@ -43,35 +63,47 @@ module WhatsappSdk
|
|
43
63
|
# For the body component, the character limit is 1024 characters.
|
44
64
|
#
|
45
65
|
# @returns text [String]
|
66
|
+
sig { returns(T.nilable(String)) }
|
46
67
|
attr_accessor :text
|
47
68
|
|
48
69
|
# Returns Currency if the parameter object type is currency.
|
49
70
|
#
|
50
71
|
# @returns currency [Currency]
|
72
|
+
sig { returns(T.nilable(Currency)) }
|
51
73
|
attr_accessor :currency
|
52
74
|
|
53
75
|
# Returns date_time if the parameter object type is date_time.
|
54
76
|
#
|
55
77
|
# @returns date_time [DateTime]
|
78
|
+
sig { returns(T.nilable(DateTime)) }
|
56
79
|
attr_accessor :date_time
|
57
80
|
|
58
81
|
# Returns image if the parameter object type is image.
|
59
82
|
#
|
60
83
|
# @returns image [Media]
|
84
|
+
sig { returns(T.nilable(Media)) }
|
61
85
|
attr_accessor :image
|
62
86
|
|
63
87
|
# Returns document if the parameter object type is document.
|
64
88
|
#
|
65
89
|
# @returns document [Media]
|
90
|
+
sig { returns(T.nilable(Media)) }
|
66
91
|
attr_accessor :document
|
67
92
|
|
68
93
|
# Returns video if the parameter object type is video.
|
69
94
|
#
|
70
95
|
# @returns video [Media]
|
96
|
+
sig { returns(T.nilable(Media)) }
|
71
97
|
attr_accessor :video
|
72
98
|
|
99
|
+
sig do
|
100
|
+
params(
|
101
|
+
type: T.any(Type, String), text: T.nilable(String), currency: T.nilable(Currency),
|
102
|
+
date_time: T.nilable(DateTime), image: T.nilable(Media), document: T.nilable(Media), video: T.nilable(Media)
|
103
|
+
).void
|
104
|
+
end
|
73
105
|
def initialize(type:, text: nil, currency: nil, date_time: nil, image: nil, document: nil, video: nil)
|
74
|
-
@type = type
|
106
|
+
@type = T.let(deserialize_type(type), Type)
|
75
107
|
@text = text
|
76
108
|
@currency = currency
|
77
109
|
@date_time = date_time
|
@@ -81,52 +113,63 @@ module WhatsappSdk
|
|
81
113
|
validate
|
82
114
|
end
|
83
115
|
|
84
|
-
|
85
|
-
|
86
|
-
json
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
116
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
117
|
+
def to_json
|
118
|
+
json = { type: type.serialize }
|
119
|
+
json[type.serialize.to_sym] = case type.serialize
|
120
|
+
when "text"
|
121
|
+
text
|
122
|
+
when "currency"
|
123
|
+
T.must(currency).to_json
|
124
|
+
when "date_time"
|
125
|
+
T.must(date_time).to_json
|
126
|
+
when "image"
|
127
|
+
T.must(image).to_json
|
128
|
+
when "document"
|
129
|
+
T.must(document).to_json
|
130
|
+
when "video"
|
131
|
+
T.must(video).to_json
|
132
|
+
else
|
133
|
+
raise "Invalid type: #{type}"
|
134
|
+
end
|
102
135
|
|
103
136
|
json
|
104
137
|
end
|
105
138
|
|
106
139
|
private
|
107
140
|
|
141
|
+
sig { params(type: T.any(String, Type)).returns(Type) }
|
142
|
+
def deserialize_type(type)
|
143
|
+
return type if type.is_a?(Type)
|
144
|
+
|
145
|
+
Type.deserialize(type)
|
146
|
+
end
|
147
|
+
|
148
|
+
sig { void }
|
108
149
|
def validate
|
109
150
|
validate_attributes
|
110
151
|
validate_type
|
111
152
|
end
|
112
153
|
|
154
|
+
sig { void }
|
113
155
|
def validate_type
|
114
|
-
return if Type
|
156
|
+
return if Type.valid?(type)
|
115
157
|
|
116
158
|
raise InvalidType, type
|
117
159
|
end
|
118
160
|
|
161
|
+
sig { void }
|
119
162
|
def validate_attributes
|
120
163
|
[
|
121
|
-
[
|
122
|
-
[
|
123
|
-
[
|
124
|
-
[
|
125
|
-
[
|
126
|
-
[
|
127
|
-
].each do |
|
128
|
-
next unless type ==
|
129
|
-
raise MissingValue.new(type, "#{
|
164
|
+
[Type::Text, text],
|
165
|
+
[Type::Currency, currency],
|
166
|
+
[Type::DateTime, date_time],
|
167
|
+
[Type::Image, image],
|
168
|
+
[Type::Document, document],
|
169
|
+
[Type::Video, video]
|
170
|
+
].each do |type_b, value|
|
171
|
+
next unless type == type_b
|
172
|
+
raise MissingValue.new(type.serialize, "#{type_b} is required when the type is #{type_b}") if value.nil?
|
130
173
|
end
|
131
174
|
end
|
132
175
|
end
|
@@ -1,21 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
2
3
|
|
3
4
|
module WhatsappSdk
|
4
5
|
module Resource
|
5
6
|
class PhoneNumber
|
6
|
-
|
7
|
+
extend T::Sig
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
work: "WORK"
|
11
|
-
}.freeze
|
9
|
+
sig { returns(String) }
|
10
|
+
attr_accessor :phone
|
12
11
|
|
12
|
+
sig { returns(String) }
|
13
|
+
attr_accessor :wa_id
|
14
|
+
|
15
|
+
sig { returns(AddressType) }
|
16
|
+
attr_accessor :type
|
17
|
+
|
18
|
+
sig { params(phone: String, type: AddressType, wa_id: String).void }
|
13
19
|
def initialize(phone:, type:, wa_id:)
|
14
20
|
@phone = phone
|
15
21
|
@type = type
|
16
22
|
@wa_id = wa_id
|
17
23
|
end
|
18
24
|
|
25
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
19
26
|
def to_h
|
20
27
|
{
|
21
28
|
phone: @phone,
|
@@ -1,20 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: strict
|
2
3
|
|
3
4
|
module WhatsappSdk
|
4
5
|
module Resource
|
5
6
|
class Url
|
6
|
-
|
7
|
+
extend T::Sig
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
work: "WORK"
|
11
|
-
}.freeze
|
9
|
+
sig { returns(String) }
|
10
|
+
attr_accessor :url
|
12
11
|
|
12
|
+
sig { returns(AddressType) }
|
13
|
+
attr_accessor :type
|
14
|
+
|
15
|
+
sig { params(url: String, type: AddressType).void }
|
13
16
|
def initialize(url:, type:)
|
14
17
|
@url = url
|
15
18
|
@type = type
|
16
19
|
end
|
17
20
|
|
21
|
+
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
18
22
|
def to_h
|
19
23
|
{
|
20
24
|
url: @url,
|
data/lib/whatsapp_sdk.rb
CHANGED
@@ -1,38 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# typed: true
|
2
3
|
|
3
|
-
|
4
|
-
require_relative "whatsapp_sdk/configuration"
|
4
|
+
require "zeitwerk"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
require_relative "whatsapp_sdk/api/messages"
|
9
|
-
require_relative "whatsapp_sdk/api/medias"
|
10
|
-
require_relative "whatsapp_sdk/api/client"
|
6
|
+
loader = Zeitwerk::Loader.for_gem
|
7
|
+
loader.setup
|
11
8
|
|
12
|
-
|
13
|
-
require_relative "whatsapp_sdk/api/responses/message_data_response"
|
14
|
-
require_relative "whatsapp_sdk/api/responses/phone_number_data_response"
|
15
|
-
require_relative "whatsapp_sdk/api/responses/phone_numbers_data_response"
|
16
|
-
require_relative "whatsapp_sdk/api/responses/message_error_response"
|
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"
|
9
|
+
require "sorbet-runtime"
|
22
10
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
require_relative "whatsapp_sdk/resource/phone_number"
|
38
|
-
require_relative "whatsapp_sdk/resource/url"
|
11
|
+
module WhatsappSdk
|
12
|
+
class << self
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig { returns(Configuration) }
|
16
|
+
def configuration
|
17
|
+
@configuration ||= Configuration.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def configure
|
21
|
+
yield(configuration)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/sorbet/config
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
# DO NOT EDIT MANUALLY
|
4
|
+
# This file was pulled from a central RBI files repository.
|
5
|
+
# Please run `bin/tapioca annotations` to update it.
|
6
|
+
|
7
|
+
module Faraday
|
8
|
+
class << self
|
9
|
+
sig { params(url: T.untyped, options: T::Hash[Symbol, T.untyped], block: T.nilable(T.proc.params(connection: Faraday::Connection).void)).returns(Faraday::Connection) }
|
10
|
+
def new(url = nil, options = {}, &block); end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Faraday::Response
|
15
|
+
sig { returns(T::Boolean) }
|
16
|
+
def success?; end
|
17
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
# DO NOT EDIT MANUALLY
|
4
|
+
# This file was pulled from a central RBI files repository.
|
5
|
+
# Please run `bin/tapioca annotations` to update it.
|
6
|
+
|
7
|
+
module Mocha::API
|
8
|
+
sig { params(arguments: T.untyped).returns(Mocha::Mock) }
|
9
|
+
def mock(*arguments); end
|
10
|
+
|
11
|
+
sig { params(arguments: T.untyped).returns(T.untyped) }
|
12
|
+
def stub(*arguments); end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Mocha::ClassMethods
|
16
|
+
sig { returns(Mocha::Mock) }
|
17
|
+
def any_instance; end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Mocha::Expectation
|
21
|
+
sig { params(expected_parameters: T.untyped, matching_block: T.nilable(T.proc.params(actual_parameters: T.untyped).void)).returns(Mocha::Expectation) }
|
22
|
+
def with(*expected_parameters, &matching_block); end
|
23
|
+
|
24
|
+
sig { params(values: T.untyped).returns(Mocha::Expectation) }
|
25
|
+
def returns(*values); end
|
26
|
+
end
|
27
|
+
|
28
|
+
module Mocha::ObjectMethods
|
29
|
+
sig { params(expected_methods_vs_return_values: T.untyped).returns(Mocha::Expectation) }
|
30
|
+
def expects(expected_methods_vs_return_values); end
|
31
|
+
|
32
|
+
sig { params(stubbed_methods_vs_return_values: T.untyped).returns(Mocha::Expectation) }
|
33
|
+
def stubs(stubbed_methods_vs_return_values); end
|
34
|
+
end
|