warb 0.1.4 → 1.0.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -12
  3. data/README.md +9 -32
  4. data/Rakefile +3 -3
  5. data/docs/README.md +1 -4
  6. data/docs/components/README.md +1 -4
  7. data/docs/messages/README.md +1 -2
  8. data/docs/messages/flow.md +5 -241
  9. data/docs/messages/interactive_call_to_action_url.md +9 -9
  10. data/docs/messages/interactive_list.md +2 -2
  11. data/docs/messages/interactive_reply_button.md +9 -9
  12. data/docs/setup.md +1 -45
  13. data/examples/audio.rb +10 -10
  14. data/examples/document.rb +34 -34
  15. data/examples/image.rb +22 -22
  16. data/examples/interactive_call_to_action_url.rb +46 -46
  17. data/examples/interactive_list.rb +61 -61
  18. data/examples/interactive_reply_button.rb +43 -43
  19. data/examples/location.rb +32 -32
  20. data/examples/location_request.rb +11 -11
  21. data/examples/message.rb +8 -8
  22. data/examples/sticker.rb +10 -10
  23. data/examples/video.rb +22 -22
  24. data/examples/webhook.rb +43 -77
  25. data/lib/warb/client.rb +5 -7
  26. data/lib/warb/components/action.rb +8 -12
  27. data/lib/warb/configuration.rb +1 -4
  28. data/lib/warb/connection.rb +9 -15
  29. data/lib/warb/dispatcher.rb +3 -4
  30. data/lib/warb/dispatcher_concern.rb +0 -6
  31. data/lib/warb/indicator_dispatcher.rb +4 -4
  32. data/lib/warb/media_dispatcher.rb +10 -10
  33. data/lib/warb/resources/audio.rb +1 -1
  34. data/lib/warb/resources/contact.rb +20 -22
  35. data/lib/warb/resources/document.rb +1 -1
  36. data/lib/warb/resources/flow.rb +20 -82
  37. data/lib/warb/resources/image.rb +1 -1
  38. data/lib/warb/resources/interactive_call_to_action_url.rb +8 -10
  39. data/lib/warb/resources/interactive_list.rb +5 -7
  40. data/lib/warb/resources/interactive_reply_button.rb +8 -10
  41. data/lib/warb/resources/location.rb +1 -11
  42. data/lib/warb/resources/location_request.rb +3 -5
  43. data/lib/warb/resources/reaction.rb +1 -1
  44. data/lib/warb/resources/resource.rb +4 -14
  45. data/lib/warb/resources/sticker.rb +1 -1
  46. data/lib/warb/resources/text.rb +3 -31
  47. data/lib/warb/resources/video.rb +1 -1
  48. data/lib/warb/utils.rb +1 -3
  49. data/lib/warb/version.rb +1 -1
  50. data/lib/warb.rb +31 -67
  51. metadata +3 -34
  52. data/docs/components/button.md +0 -62
  53. data/docs/components/copy_code_button.md +0 -57
  54. data/docs/components/flow_button.md +0 -102
  55. data/docs/components/url_button.md +0 -57
  56. data/docs/messages/template.md +0 -373
  57. data/docs/resources/README.md +0 -14
  58. data/docs/resources/currency.md +0 -22
  59. data/docs/resources/date_time.md +0 -11
  60. data/docs/resources/text.md +0 -9
  61. data/lib/warb/category.rb +0 -8
  62. data/lib/warb/components/button.rb +0 -29
  63. data/lib/warb/components/component.rb +0 -19
  64. data/lib/warb/components/copy_code_button.rb +0 -30
  65. data/lib/warb/components/flow_button.rb +0 -32
  66. data/lib/warb/components/quick_reply_button.rb +0 -15
  67. data/lib/warb/components/url_button.rb +0 -30
  68. data/lib/warb/components/voice_call_button.rb +0 -15
  69. data/lib/warb/errors.rb +0 -27
  70. data/lib/warb/language.rb +0 -8
  71. data/lib/warb/resources/currency.rb +0 -47
  72. data/lib/warb/resources/date_time.rb +0 -34
  73. data/lib/warb/resources/helpers/header.rb +0 -35
  74. data/lib/warb/resources/template.rb +0 -163
  75. data/lib/warb/resources/validation.rb +0 -30
  76. data/lib/warb/response.rb +0 -33
  77. data/lib/warb/response_error_handler.rb +0 -42
  78. data/lib/warb/template_dispatcher.rb +0 -21
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../components/address'
4
- require_relative '../components/name'
5
- require_relative '../components/email'
6
- require_relative '../components/org'
7
- require_relative '../components/phone'
8
- require_relative '../components/url'
3
+ require_relative "../components/address"
4
+ require_relative "../components/name"
5
+ require_relative "../components/email"
6
+ require_relative "../components/org"
7
+ require_relative "../components/phone"
8
+ require_relative "../components/url"
9
9
 
10
10
  module Warb
11
11
  module Resources
@@ -13,7 +13,7 @@ module Warb
13
13
  attr_accessor :addresses, :emails, :phones, :urls, :name, :org, :birthday
14
14
 
15
15
  def initialize(**params)
16
- super
16
+ super(**params)
17
17
 
18
18
  @org = @params[:org]
19
19
  @name = @params[:name]
@@ -24,10 +24,9 @@ module Warb
24
24
  @urls = @params.fetch(:urls, [])
25
25
  end
26
26
 
27
- # rubocop:disable Metrics/MethodLength
28
27
  def build_payload
29
28
  {
30
- type: 'contacts',
29
+ type: "contacts",
31
30
  contacts: [
32
31
  {
33
32
  birthday: birthday,
@@ -41,50 +40,49 @@ module Warb
41
40
  ]
42
41
  }
43
42
  end
44
- # rubocop:enable Metrics/MethodLength
45
43
 
46
- def add_address(**params, &)
44
+ def add_address(**params, &block)
47
45
  address = Components::Address.new(**params)
48
46
 
49
47
  @addresses << address
50
48
 
51
- block_given? ? address.tap(&) : address
49
+ block_given? ? address.tap(&block) : address
52
50
  end
53
51
 
54
- def add_email(**params, &)
52
+ def add_email(**params, &block)
55
53
  email = Components::Email.new(**params)
56
54
 
57
55
  @emails << email
58
56
 
59
- block_given? ? email.tap(&) : email
57
+ block_given? ? email.tap(&block) : email
60
58
  end
61
59
 
62
- def add_phone(**params, &)
60
+ def add_phone(**params, &block)
63
61
  phone = Components::Phone.new(**params)
64
62
 
65
63
  @phones << phone
66
64
 
67
- block_given? ? phone.tap(&) : phone
65
+ block_given? ? phone.tap(&block) : phone
68
66
  end
69
67
 
70
- def add_url(**params, &)
68
+ def add_url(**params, &block)
71
69
  url = Components::URL.new(**params)
72
70
 
73
71
  @urls << url
74
72
 
75
- block_given? ? url.tap(&) : url
73
+ block_given? ? url.tap(&block) : url
76
74
  end
77
75
 
78
- def build_name(**params, &)
76
+ def build_name(**params, &block)
79
77
  @name = Warb::Components::Name.new(**params)
80
78
 
81
- block_given? ? @name.tap(&) : @name
79
+ block_given? ? @name.tap(&block) : @name
82
80
  end
83
81
 
84
- def build_org(**params, &)
82
+ def build_org(**params, &block)
85
83
  @org = Warb::Components::Org.new(**params)
86
84
 
87
- block_given? ? @org.tap(&) : @org
85
+ block_given? ? @org.tap(&block) : @org
88
86
  end
89
87
  end
90
88
  end
@@ -19,7 +19,7 @@ module Warb
19
19
 
20
20
  def common_document_params
21
21
  {
22
- type: 'document',
22
+ type: "document",
23
23
  document: {
24
24
  id: media_id || @params[:media_id],
25
25
  filename: filename || @params[:filename],
@@ -3,93 +3,31 @@
3
3
  module Warb
4
4
  module Resources
5
5
  class Flow < Resource
6
- include Helpers::Header
7
-
8
- attr_accessor :flow_id, :screen, :flow_action, :mode,
9
- :flow_cta, :flow_token, :body, :header, :footer, :data,
10
- :draft, :data_exchange
6
+ attr_accessor :flow_id, :screen
11
7
 
12
8
  def build_payload
13
- validate!
14
-
15
9
  {
16
- type: 'interactive',
17
- interactive: build_interactive
18
- }
19
- end
20
-
21
- private
22
-
23
- def build_interactive
24
- interactive = {
25
- type: 'flow',
26
- action: {
27
- name: 'flow',
28
- parameters: build_action_parameters
10
+ type: "interactive",
11
+ interactive: {
12
+ type: "flow",
13
+ body: {
14
+ text: "Not shown in draft mode"
15
+ },
16
+ action: {
17
+ name: "flow",
18
+ parameters: {
19
+ flow_message_version: "3",
20
+ flow_action: "navigate",
21
+ flow_id: flow_id || @params[:flow_id],
22
+ flow_cta: "Not shown in draft mode",
23
+ mode: "draft",
24
+ flow_action_payload: {
25
+ screen: screen || @params[:screen]
26
+ }
27
+ }
28
+ }
29
29
  }
30
30
  }
31
-
32
- header = resolve(:header)
33
- if header.is_a?(Hash)
34
- interactive[:header] = header
35
- elsif header.respond_to?(:build_header)
36
- interactive[:header] = header.build_header
37
- end
38
-
39
- resolve(:body)
40
- .then { |body| interactive[:body] = { text: body } }
41
-
42
- resolve(:footer)
43
- .then { |footer| interactive[:footer] = { text: footer } unless blank?(footer) }
44
-
45
- interactive
46
- end
47
-
48
- def build_action_parameters
49
- params = {
50
- flow_message_version: '3',
51
- flow_id: resolve(:flow_id),
52
- flow_action: final_action,
53
- mode: final_mode
54
- }
55
-
56
- resolve(:flow_cta)
57
- .then { |label| params[:flow_cta] = label unless blank?(label) }
58
-
59
- resolve(:flow_token)
60
- .then { |token| params[:flow_token] = token unless blank?(token) }
61
-
62
- if final_action == 'navigate'
63
- payload = { screen: resolve(:screen) }
64
- initial = resolve(:data)
65
- payload[:data] = initial unless blank?(initial)
66
- params[:flow_action_payload] = payload
67
- end
68
-
69
- params
70
- end
71
-
72
- def final_action
73
- explicit = raw_value(:flow_action)
74
- return explicit.to_s unless blank?(explicit)
75
-
76
- resolve(:data_exchange) ? 'data_exchange' : 'navigate'
77
- end
78
-
79
- def final_mode
80
- explicit = raw_value(:mode)
81
- return explicit.to_s unless blank?(explicit)
82
-
83
- resolve(:draft) ? 'draft' : 'published'
84
- end
85
-
86
- def validate!
87
- validates :flow_id, required: true
88
- validates :body, required: true
89
-
90
- validates :screen,
91
- required: -> { final_action == 'navigate' },
92
- message: 'screen is required for flow_action=navigate'
93
31
  end
94
32
  end
95
33
  end
@@ -19,7 +19,7 @@ module Warb
19
19
 
20
20
  def common_image_params
21
21
  {
22
- type: 'image',
22
+ type: "image",
23
23
  image: {
24
24
  id: media_id || @params[:media_id],
25
25
  link: link || @params[:link]
@@ -5,12 +5,11 @@ module Warb
5
5
  class InteractiveCallToActionUrl < Resource
6
6
  attr_accessor :header, :body, :footer, :action
7
7
 
8
- # rubocop:disable Metrics/MethodLength
9
8
  def build_payload
10
9
  {
11
- type: 'interactive',
10
+ type: "interactive",
12
11
  interactive: {
13
- type: 'cta_url',
12
+ type: "cta_url",
14
13
  header: header || @params[:header]&.to_h,
15
14
  body: {
16
15
  text: body || @params[:body]
@@ -22,28 +21,27 @@ module Warb
22
21
  }
23
22
  }
24
23
  end
25
- # rubocop:enable Metrics/MethodLength
26
24
 
27
- def add_text_header(text)
25
+ def set_text_header(text)
28
26
  @header = Warb::Resources::Text.new(text:).build_header
29
27
  end
30
28
 
31
- def add_image_header(link: nil)
29
+ def set_image_header(link: nil)
32
30
  @header = Warb::Resources::Image.new(link:).build_header
33
31
  end
34
32
 
35
- def add_video_header(link: nil)
33
+ def set_video_header(link: nil)
36
34
  @header = Warb::Resources::Video.new(link:).build_header
37
35
  end
38
36
 
39
- def add_document_header(link: nil, filename: nil)
37
+ def set_document_header(link: nil, filename: nil)
40
38
  @header = Warb::Resources::Document.new(link:, filename:).build_header
41
39
  end
42
40
 
43
- def build_action(**params, &)
41
+ def build_action(**params, &block)
44
42
  @action = Warb::Components::CTAAction.new(**params)
45
43
 
46
- block_given? ? @action.tap(&) : @action
44
+ block_given? ? @action.tap(&block) : @action
47
45
  end
48
46
  end
49
47
  end
@@ -5,12 +5,11 @@ module Warb
5
5
  class InteractiveList < Resource
6
6
  attr_accessor :header, :body, :footer, :action
7
7
 
8
- # rubocop:disable Metrics/MethodLength
9
8
  def build_payload
10
9
  {
11
- type: 'interactive',
10
+ type: "interactive",
12
11
  interactive: {
13
- type: 'list',
12
+ type: "list",
14
13
  header: header || @params[:header]&.to_h,
15
14
  body: {
16
15
  text: body || @params[:body]
@@ -22,16 +21,15 @@ module Warb
22
21
  }
23
22
  }
24
23
  end
25
- # rubocop:enable Metrics/MethodLength
26
24
 
27
- def add_text_header(text)
25
+ def set_text_header(text)
28
26
  @header = Warb::Resources::Text.new(text:).build_header
29
27
  end
30
28
 
31
- def build_action(**params, &)
29
+ def build_action(**params, &block)
32
30
  @action = Warb::Components::ListAction.new(**params)
33
31
 
34
- block_given? ? @action.tap(&) : @action
32
+ block_given? ? @action.tap(&block) : @action
35
33
  end
36
34
  end
37
35
  end
@@ -5,12 +5,11 @@ module Warb
5
5
  class InteractiveReplyButton < Resource
6
6
  attr_accessor :header, :body, :footer, :action
7
7
 
8
- # rubocop:disable Metrics/MethodLength
9
8
  def build_payload
10
9
  {
11
- type: 'interactive',
10
+ type: "interactive",
12
11
  interactive: {
13
- type: 'button',
12
+ type: "button",
14
13
  header: header || @params[:header]&.to_h,
15
14
  body: {
16
15
  text: body || @params[:body]
@@ -22,28 +21,27 @@ module Warb
22
21
  }
23
22
  }
24
23
  end
25
- # rubocop:enable Metrics/MethodLength
26
24
 
27
- def add_text_header(text)
25
+ def set_text_header(text)
28
26
  @header = Warb::Resources::Text.new(text:).build_header
29
27
  end
30
28
 
31
- def add_image_header(media_id: nil, link: nil)
29
+ def set_image_header(media_id: nil, link: nil)
32
30
  @header = Warb::Resources::Image.new(media_id:, link:).build_header
33
31
  end
34
32
 
35
- def add_video_header(media_id: nil, link: nil)
33
+ def set_video_header(media_id: nil, link: nil)
36
34
  @header = Warb::Resources::Video.new(media_id:, link:).build_header
37
35
  end
38
36
 
39
- def add_document_header(media_id: nil, link: nil, filename: nil)
37
+ def set_document_header(media_id: nil, link: nil, filename: nil)
40
38
  @header = Warb::Resources::Document.new(media_id:, link:, filename:).build_header
41
39
  end
42
40
 
43
- def build_action(**params, &)
41
+ def build_action(**params, &block)
44
42
  @action = Warb::Components::ReplyButtonAction.new(**params)
45
43
 
46
- block_given? ? @action.tap(&) : @action
44
+ block_given? ? @action.tap(&block) : @action
47
45
  end
48
46
  end
49
47
  end
@@ -5,19 +5,9 @@ module Warb
5
5
  class Location < Resource
6
6
  attr_accessor :latitude, :longitude, :name, :address
7
7
 
8
- def build_header
9
- common_location_params
10
- end
11
-
12
8
  def build_payload
13
- common_location_params
14
- end
15
-
16
- private
17
-
18
- def common_location_params
19
9
  {
20
- type: 'location',
10
+ type: "location",
21
11
  location: {
22
12
  latitude: latitude || @params[:latitude],
23
13
  longitude: longitude || @params[:longitude],
@@ -5,22 +5,20 @@ module Warb
5
5
  class LocationRequest < Resource
6
6
  attr_accessor :body_text
7
7
 
8
- # rubocop:disable Metrics/MethodLength
9
8
  def build_payload
10
9
  {
11
- type: 'interactive',
10
+ type: "interactive",
12
11
  interactive: {
13
- type: 'location_request_message',
12
+ type: "location_request_message",
14
13
  body: {
15
14
  text: body_text || @params[:body_text]
16
15
  },
17
16
  action: {
18
- name: 'send_location'
17
+ name: "send_location"
19
18
  }
20
19
  }
21
20
  }
22
21
  end
23
- # rubocop:enable Metrics/MethodLength
24
22
  end
25
23
  end
26
24
  end
@@ -7,7 +7,7 @@ module Warb
7
7
 
8
8
  def build_payload
9
9
  {
10
- type: 'reaction',
10
+ type: "reaction",
11
11
  reaction: {
12
12
  message_id: message_id || @params[:message_id],
13
13
  emoji: emoji || @params[:emoji]
@@ -3,8 +3,6 @@
3
3
  module Warb
4
4
  module Resources
5
5
  class Resource
6
- include Validation
7
-
8
6
  def initialize(**params)
9
7
  @params = params
10
8
  end
@@ -21,27 +19,19 @@ module Warb
21
19
  raise NotImplementedError
22
20
  end
23
21
 
24
- def build_template_positional_parameter
25
- raise NotImplementedError
26
- end
27
-
28
- def build_template_named_parameter(paramater_name)
29
- raise NotImplementedError
30
- end
31
-
32
- def add_text_header
22
+ def set_text_header
33
23
  raise NotImplementedError
34
24
  end
35
25
 
36
- def add_image_header
26
+ def set_image_header
37
27
  raise NotImplementedError
38
28
  end
39
29
 
40
- def add_video_header
30
+ def set_video_header
41
31
  raise NotImplementedError
42
32
  end
43
33
 
44
- def add_document_header
34
+ def set_document_header
45
35
  raise NotImplementedError
46
36
  end
47
37
 
@@ -7,7 +7,7 @@ module Warb
7
7
 
8
8
  def build_payload
9
9
  {
10
- type: 'sticker',
10
+ type: "sticker",
11
11
  sticker: {
12
12
  id: media_id || @params[:media_id],
13
13
  link: link || @params[:link]
@@ -3,18 +3,15 @@
3
3
  module Warb
4
4
  module Resources
5
5
  class Text < Resource
6
- attr_accessor :content, :text, :message, :preview_url, :parameter_name, :examples
6
+ attr_accessor :content, :text, :message, :preview_url
7
7
 
8
8
  def build_header
9
- { type: 'text', text: message_per_priority }.tap do |header|
10
- parameter_name ||= @params[:parameter_name]
11
- header[:parameter_name] = parameter_name unless parameter_name.nil?
12
- end
9
+ { type: "text", text: message_per_priority }
13
10
  end
14
11
 
15
12
  def build_payload
16
13
  {
17
- type: 'text',
14
+ type: "text",
18
15
  text: {
19
16
  preview_url: preview_url || @params[:preview_url],
20
17
  body: message_per_priority
@@ -22,31 +19,6 @@ module Warb
22
19
  }
23
20
  end
24
21
 
25
- def build_template_named_parameter(parameter_name)
26
- {
27
- type: 'text',
28
- text: message_per_priority,
29
- parameter_name: parameter_name
30
- }
31
- end
32
-
33
- def build_template_positional_parameter
34
- {
35
- type: 'text',
36
- text: message_per_priority
37
- }
38
- end
39
-
40
- def build_template_example_parameter
41
- { type: 'body', text: message_per_priority }.tap do |param|
42
- examples ||= @params[:examples]
43
-
44
- next unless examples.is_a?(Array)
45
-
46
- param[:example] = { body_text: [examples] }
47
- end
48
- end
49
-
50
22
  private
51
23
 
52
24
  def message_per_priority
@@ -19,7 +19,7 @@ module Warb
19
19
 
20
20
  def common_video_params
21
21
  {
22
- type: 'video',
22
+ type: "video",
23
23
  video: {
24
24
  id: media_id || @params[:media_id],
25
25
  link: link || @params[:link]
data/lib/warb/utils.rb CHANGED
@@ -1,7 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
1
  class String
4
2
  def normalize
5
- unicode_normalize(:nfd).gsub(/\p{Mn}/, '')
3
+ unicode_normalize(:nfd).gsub(/\p{Mn}/, "")
6
4
  end
7
5
  end
data/lib/warb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Warb
4
- VERSION = '0.1.4'
4
+ VERSION = "1.0.0"
5
5
  end
data/lib/warb.rb CHANGED
@@ -1,70 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'faraday'
4
- require 'faraday/multipart'
5
-
6
- require_relative 'warb/version'
7
- require_relative 'warb/language'
8
- require_relative 'warb/category'
9
- require_relative 'warb/configuration'
10
- require_relative 'warb/dispatcher_concern'
11
- require_relative 'warb/client'
12
-
13
- # Error/response stack
14
- require_relative 'warb/errors'
15
- require_relative 'warb/response_error_handler'
16
- require_relative 'warb/response'
17
-
18
- # Resources
19
- require_relative 'warb/resources/validation'
20
- require_relative 'warb/resources/helpers/header'
21
- require_relative 'warb/resources/resource'
22
- require_relative 'warb/resources/text'
23
- require_relative 'warb/resources/image'
24
- require_relative 'warb/resources/video'
25
- require_relative 'warb/resources/sticker'
26
- require_relative 'warb/resources/audio'
27
- require_relative 'warb/resources/document'
28
- require_relative 'warb/resources/location'
29
- require_relative 'warb/resources/reaction'
30
- require_relative 'warb/resources/location_request'
31
- require_relative 'warb/resources/interactive_reply_button'
32
- require_relative 'warb/resources/interactive_list'
33
- require_relative 'warb/resources/interactive_call_to_action_url'
34
- require_relative 'warb/resources/contact'
35
- require_relative 'warb/resources/template'
36
- require_relative 'warb/resources/currency'
37
- require_relative 'warb/resources/date_time'
38
- require_relative 'warb/resources/flow'
39
-
40
- # Dispatchers
41
- require_relative 'warb/dispatcher'
42
- require_relative 'warb/media_dispatcher'
43
- require_relative 'warb/template_dispatcher'
44
- require_relative 'warb/indicator_dispatcher'
45
-
46
- # Utils and components
47
- require_relative 'warb/utils'
48
- require_relative 'warb/components/component'
49
- require_relative 'warb/components/button'
50
- require_relative 'warb/components/flow_button'
51
- require_relative 'warb/components/quick_reply_button'
52
- require_relative 'warb/components/url_button'
53
- require_relative 'warb/components/copy_code_button'
54
- require_relative 'warb/components/voice_call_button'
55
- require_relative 'warb/components/action'
3
+ require "faraday"
4
+ require "faraday/multipart"
5
+ require_relative "warb/version"
6
+ require_relative "warb/configuration"
7
+ require_relative "warb/dispatcher_concern"
8
+ require_relative "warb/client"
9
+ require_relative "warb/resources/resource"
10
+ require_relative "warb/resources/text"
11
+ require_relative "warb/resources/image"
12
+ require_relative "warb/resources/video"
13
+ require_relative "warb/resources/sticker"
14
+ require_relative "warb/resources/audio"
15
+ require_relative "warb/resources/document"
16
+ require_relative "warb/resources/location"
17
+ require_relative "warb/resources/reaction"
18
+ require_relative "warb/resources/location_request"
19
+ require_relative "warb/resources/interactive_reply_button"
20
+ require_relative "warb/resources/interactive_list"
21
+ require_relative "warb/resources/interactive_call_to_action_url"
22
+ require_relative "warb/resources/contact"
23
+ require_relative "warb/resources/flow"
24
+ require_relative "warb/dispatcher"
25
+ require_relative "warb/media_dispatcher"
26
+ require_relative "warb/indicator_dispatcher"
27
+ require_relative "warb/utils"
28
+ require_relative "warb/components/action"
56
29
 
57
30
  module Warb
58
- MESSAGING_PRODUCT = 'whatsapp'
59
- RECIPIENT_TYPE = 'individual'
60
- HTTP_ERRORS = {
61
- 400 => BadRequest,
62
- 401 => Unauthorized,
63
- 403 => Forbidden,
64
- 404 => NotFound,
65
- 500 => InternalServerError,
66
- 503 => ServiceUnavailable
67
- }.freeze
31
+ MESSAGING_PRODUCT = "whatsapp"
32
+ RECIPIENT_TYPE = "individual"
33
+
34
+ class Error < StandardError; end
35
+ # Your code goes here...
68
36
 
69
37
  class << self
70
38
  include DispatcherConcern
@@ -86,9 +54,5 @@ module Warb
86
54
 
87
55
  client
88
56
  end
89
-
90
- def list_phone_numbers
91
- client.get('phone_numbers', endpoint_prefix: :business_id).body['data']
92
- end
93
57
  end
94
58
  end