cloud-waba-ruby-client 0.0.12 → 0.0.13
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/cloud-waba-ruby-client.gemspec +1 -1
- data/lib/api/templates/service.rb +30 -1
- data/lib/cloud_waba/models/templates/body_component.rb +1 -1
- data/lib/cloud_waba/models/templates/component.rb +44 -0
- data/lib/cloud_waba/models/templates/header_media_component.rb +1 -1
- data/lib/cloud_waba/models/templates/header_text_component.rb +1 -1
- data/lib/cloud_waba/models/templates/response.rb +21 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 848411d117f6ed1d74d7b968320c3bcc711376956d1061d2857b2f652fa55cf8
|
|
4
|
+
data.tar.gz: c5b829040b35f18516f795361f3202e5f97cddee05c89f7295a73b6e3c6c4138
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a7369920015c6d7c9814a1f3325105e37dab9936b802851e92b423d20774accc03fe94584306675c208e5aa8aa77638876e1ab2da593cb580068c936ff6a34ed
|
|
7
|
+
data.tar.gz: 2211993d33dd43a4a78f103f94c01f0d9e417ea65d73712b9276b94297d13711c13ce9accae1c3e3c4c9608183c06a3fa55befbdb01df6ec86544a7568617cae
|
|
@@ -18,7 +18,7 @@ module API
|
|
|
18
18
|
params(limit: T.nilable(::Integer)).returns(::CloudWaba::Models::Templates::List)
|
|
19
19
|
end
|
|
20
20
|
def list(limit: 20)
|
|
21
|
-
fields = "id,name,category,language,status"
|
|
21
|
+
fields = "id,name,category,language,status,components"
|
|
22
22
|
response = with_error_handling { templates_client.get(params: { fields: fields, limit: limit }) }
|
|
23
23
|
|
|
24
24
|
parsed_response = JSON.parse(response.body.to_s)
|
|
@@ -26,6 +26,35 @@ module API
|
|
|
26
26
|
::CloudWaba::Models::Templates::List.new(templates: templates, paging: parsed_response["paging"])
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
sig do
|
|
30
|
+
params(
|
|
31
|
+
limit: T.nilable(::Integer),
|
|
32
|
+
block: T.proc.params(template: ::CloudWaba::Models::Templates::Response).void
|
|
33
|
+
).void
|
|
34
|
+
end
|
|
35
|
+
def find_each(limit: 20, &block)
|
|
36
|
+
return unless block_given?
|
|
37
|
+
|
|
38
|
+
fields = "id,name,category,language,status,components"
|
|
39
|
+
params = { fields: fields, limit: limit }
|
|
40
|
+
|
|
41
|
+
loop do
|
|
42
|
+
response = with_error_handling { templates_client.get(params: params) }
|
|
43
|
+
parsed_response = JSON.parse(response.body.to_s)
|
|
44
|
+
|
|
45
|
+
templates = parsed_response["data"].map{|hash| ::CloudWaba::Models::Templates::Response.parse(template_hash: hash)}
|
|
46
|
+
templates.each { |template| yield(template) }
|
|
47
|
+
|
|
48
|
+
paging = parsed_response["paging"]
|
|
49
|
+
after = paging&.dig("cursors", "after")
|
|
50
|
+
next_link = paging&.dig("next")
|
|
51
|
+
|
|
52
|
+
break if after.nil? || after.empty? || next_link.nil?
|
|
53
|
+
|
|
54
|
+
params[:after] = after
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
29
58
|
sig do
|
|
30
59
|
params(
|
|
31
60
|
name: ::String,
|
|
@@ -14,6 +14,50 @@ module CloudWaba
|
|
|
14
14
|
::CloudWaba::Models::Templates::ButtonsComponent,
|
|
15
15
|
)
|
|
16
16
|
end
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
extend ::T::Sig
|
|
20
|
+
|
|
21
|
+
sig { params(component_hash: ::T::Hash[::T.untyped, ::T.untyped]).returns(::CloudWaba::Models::Templates::Component) }
|
|
22
|
+
def parse(component_hash:)
|
|
23
|
+
component_type = component_hash["type"]
|
|
24
|
+
|
|
25
|
+
case component_type
|
|
26
|
+
when "HEADER"
|
|
27
|
+
format = component_hash["format"]
|
|
28
|
+
case format
|
|
29
|
+
when "TEXT"
|
|
30
|
+
::CloudWaba::Models::Templates::HeaderTextComponent.new(
|
|
31
|
+
text: component_hash["text"]
|
|
32
|
+
)
|
|
33
|
+
when "IMAGE", "VIDEO", "DOCUMENT"
|
|
34
|
+
format_enum = ::CloudWaba::Models::Enums::Templates::Format.try_deserialize(format)
|
|
35
|
+
::CloudWaba::Models::Templates::HeaderMediaComponent.new(
|
|
36
|
+
format: format_enum || ::CloudWaba::Models::Enums::Templates::Format::Image
|
|
37
|
+
)
|
|
38
|
+
when "LOCATION"
|
|
39
|
+
::CloudWaba::Models::Templates::HeaderLocationComponent.new
|
|
40
|
+
else
|
|
41
|
+
raise ArgumentError, "Unsupported header format: #{format}"
|
|
42
|
+
end
|
|
43
|
+
when "BODY"
|
|
44
|
+
::CloudWaba::Models::Templates::BodyComponent.new(
|
|
45
|
+
text: component_hash["text"]
|
|
46
|
+
)
|
|
47
|
+
when "FOOTER"
|
|
48
|
+
::CloudWaba::Models::Templates::FooterComponent.new(
|
|
49
|
+
text: component_hash["text"]
|
|
50
|
+
)
|
|
51
|
+
when "BUTTONS"
|
|
52
|
+
# For now, return empty buttons component - would need to parse buttons array
|
|
53
|
+
::CloudWaba::Models::Templates::ButtonsComponent.new(
|
|
54
|
+
buttons: []
|
|
55
|
+
)
|
|
56
|
+
else
|
|
57
|
+
raise ArgumentError, "Unsupported component type: #{component_type}"
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
17
61
|
end
|
|
18
62
|
end
|
|
19
63
|
end
|
|
@@ -13,19 +13,39 @@ module CloudWaba
|
|
|
13
13
|
prop :category, ::T.nilable(::CloudWaba::Models::Enums::Templates::Category)
|
|
14
14
|
prop :language, ::T.nilable(::String)
|
|
15
15
|
prop :name, ::T.nilable(::String)
|
|
16
|
+
prop :components, ::T.nilable(::T::Array[::CloudWaba::Models::Templates::Component])
|
|
16
17
|
|
|
17
18
|
sig { params(template_hash: ::T::Hash[::T.untyped, ::T.untyped]).returns(::CloudWaba::Models::Templates::Response) }
|
|
18
19
|
def self.parse(template_hash:)
|
|
19
20
|
category = ::CloudWaba::Models::Enums::Templates::Category.try_deserialize(template_hash["category"])
|
|
21
|
+
components = template_hash["components"].map{|component| ::CloudWaba::Models::Templates.parse(component_hash: component)}
|
|
20
22
|
|
|
21
23
|
self.new(
|
|
22
24
|
id: template_hash["id"],
|
|
23
25
|
status: template_hash["status"],
|
|
24
26
|
category: category,
|
|
25
27
|
language: template_hash["language"],
|
|
26
|
-
name: template_hash["name"]
|
|
28
|
+
name: template_hash["name"],
|
|
29
|
+
components: components
|
|
27
30
|
)
|
|
28
31
|
end
|
|
32
|
+
|
|
33
|
+
sig { returns(::T::Hash[::T.untyped, ::T.untyped]) }
|
|
34
|
+
def serialize
|
|
35
|
+
result = {
|
|
36
|
+
id: id,
|
|
37
|
+
status: status,
|
|
38
|
+
category: category&.serialize,
|
|
39
|
+
language: language,
|
|
40
|
+
name: name
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if components
|
|
44
|
+
result[:components] = components.map(&:serialize)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
result
|
|
48
|
+
end
|
|
29
49
|
end
|
|
30
50
|
end
|
|
31
51
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: cloud-waba-ruby-client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.13
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ahmed Bassell
|
|
8
8
|
autorequire: cloud-waba-ruby-client
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-09-
|
|
11
|
+
date: 2025-09-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dotenv
|