whatsapp_sdk 0.3.0 → 0.4.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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  4. data/.github/workflows/codeql-analysis.yml +72 -0
  5. data/.gitignore +1 -0
  6. data/.rubocop.yml +14 -0
  7. data/CHANGELOG.md +8 -1
  8. data/Gemfile +6 -0
  9. data/Gemfile.lock +48 -1
  10. data/README.md +107 -33
  11. data/Rakefile +1 -0
  12. data/bin/tapioca +30 -0
  13. data/example.rb +23 -20
  14. data/lib/version.rb +2 -1
  15. data/lib/whatsapp_sdk/api/client.rb +14 -3
  16. data/lib/whatsapp_sdk/api/medias.rb +12 -3
  17. data/lib/whatsapp_sdk/api/messages.rb +72 -14
  18. data/lib/whatsapp_sdk/api/phone_numbers.rb +3 -0
  19. data/lib/whatsapp_sdk/api/request.rb +2 -2
  20. data/lib/whatsapp_sdk/api/response.rb +17 -1
  21. data/lib/whatsapp_sdk/api/responses/data_response.rb +10 -3
  22. data/lib/whatsapp_sdk/api/responses/error_response.rb +8 -1
  23. data/lib/whatsapp_sdk/api/responses/media_data_response.rb +26 -7
  24. data/lib/whatsapp_sdk/api/responses/message_data_response.rb +20 -3
  25. data/lib/whatsapp_sdk/api/responses/message_error_response.rb +26 -7
  26. data/lib/whatsapp_sdk/api/responses/phone_number_data_response.rb +18 -5
  27. data/lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb +9 -1
  28. data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +10 -3
  29. data/lib/whatsapp_sdk/api/responses/success_response.rb +5 -1
  30. data/lib/whatsapp_sdk/configuration.rb +7 -14
  31. data/lib/whatsapp_sdk/error.rb +1 -0
  32. data/lib/whatsapp_sdk/resource/address.rb +30 -6
  33. data/lib/whatsapp_sdk/resource/address_type.rb +15 -0
  34. data/lib/whatsapp_sdk/resource/button_parameter.rb +19 -23
  35. data/lib/whatsapp_sdk/resource/component.rb +45 -13
  36. data/lib/whatsapp_sdk/resource/contact.rb +30 -1
  37. data/lib/whatsapp_sdk/resource/contact_response.rb +9 -1
  38. data/lib/whatsapp_sdk/resource/currency.rb +9 -1
  39. data/lib/whatsapp_sdk/resource/date_time.rb +7 -1
  40. data/lib/whatsapp_sdk/resource/email.rb +9 -5
  41. data/lib/whatsapp_sdk/resource/media.rb +44 -15
  42. data/lib/whatsapp_sdk/resource/message.rb +5 -0
  43. data/lib/whatsapp_sdk/resource/name.rb +28 -1
  44. data/lib/whatsapp_sdk/resource/org.rb +13 -1
  45. data/lib/whatsapp_sdk/resource/parameter_object.rb +82 -39
  46. data/lib/whatsapp_sdk/resource/phone_number.rb +12 -5
  47. data/lib/whatsapp_sdk/resource/url.rb +9 -5
  48. data/lib/whatsapp_sdk.rb +19 -33
  49. data/sorbet/config +6 -0
  50. data/sorbet/rbi/annotations/faraday.rbi +17 -0
  51. data/sorbet/rbi/annotations/mocha.rbi +34 -0
  52. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  53. data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +270 -0
  54. data/sorbet/rbi/gems/faraday-net_http@2.0.3.rbi +182 -0
  55. data/sorbet/rbi/gems/faraday@2.3.0.rbi +2494 -0
  56. data/sorbet/rbi/gems/method_source@1.0.0.rbi +272 -0
  57. data/sorbet/rbi/gems/minitest@5.16.1.rbi +1459 -0
  58. data/sorbet/rbi/gems/mocha@1.14.0.rbi +60 -0
  59. data/sorbet/rbi/gems/multipart-post@2.2.3.rbi +239 -0
  60. data/sorbet/rbi/gems/netrc@0.11.0.rbi +150 -0
  61. data/sorbet/rbi/gems/oj@3.13.14.rbi +589 -0
  62. data/sorbet/rbi/gems/zeitwerk@2.6.0.rbi +867 -0
  63. data/sorbet/rbi/todo.rbi +8 -0
  64. data/sorbet/shims/request.rbi +10 -0
  65. data/sorbet/tapioca/config.yml +13 -0
  66. data/sorbet/tapioca/require.rb +5 -0
  67. data/whatsapp_sdk.gemspec +5 -1
  68. metadata +67 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3dabd5d87a1a3988caaafc2a090c9b85bcea77cc764132a169227a5ca1c4b409
4
- data.tar.gz: 1ac41750e5e737fbf9a606e013015d796b68c328e3950241cad051c8eef6d674
3
+ metadata.gz: 4c511dc642ddf1e541454117ebb5e08df060b166b47e7905bfd9e8e989e394e1
4
+ data.tar.gz: 49f4b2fd988d44d6cdac186a47b3553fb78203ceffb1675c80c6bd176f59d68f
5
5
  SHA512:
6
- metadata.gz: 183f8600f1e74a46b4a38f290c806f479a0e52a20ec7c6d836b2fe3ac8038e4c91620e83d8780810907a2395555169aa8911fd5385299adcd3830a3492bea9a7
7
- data.tar.gz: ce2cb90d04e06dc62d0294bcd395b3cf6cdffb2e60c24a8671539825de486299b11647eab9cf875007f290b8a35af350aadb7a985cad4bad2bcc415d85955cd3
6
+ metadata.gz: dbcebfa04a24c570cbd28dae1410de7c5d2f95280f4f06129beb7aecdda13cc4d0b218a6c3815b5ecfefbe97c8ddc19c423ce55fb1ac3e4a6cfe535b42a6a4e1
7
+ data.tar.gz: 8e84e6f855f6383e1a0b56edeb804f72c8519b521bbf1d174c40ac659e8b244c23268cf87ad7df7ef77cbb753420e64b4910914ea80e9cd80bee1675ec38f4cf
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ A clear and concise description of what the bug is.
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Go to '...'
16
+
17
+ **Expected behavior**
18
+ A clear and concise description of what you expected to happen.
19
+
20
+ **Additional context**
21
+ Add any other context about the problem here.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: ''
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Additional context**
14
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,72 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ "main" ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ "main" ]
20
+ schedule:
21
+ - cron: '20 22 * * 6'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+
52
+ # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
53
+ # queries: security-extended,security-and-quality
54
+
55
+
56
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
57
+ # If this step fails, then you should remove it and run the build manually (see below)
58
+ - name: Autobuild
59
+ uses: github/codeql-action/autobuild@v2
60
+
61
+ # ℹ️ Command-line programs to run using the OS shell.
62
+ # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
63
+
64
+ # If the Autobuild fails above, remove it and uncomment the following three lines.
65
+ # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
66
+
67
+ # - run: |
68
+ # echo "Run, Build Application using script"
69
+ # ./location_of_script_within_repo/buildscript.sh
70
+
71
+ - name: Perform CodeQL Analysis
72
+ uses: github/codeql-action/analyze@v2
data/.gitignore CHANGED
@@ -21,3 +21,4 @@ REMOVE.rb
21
21
  .ruby-gemset
22
22
 
23
23
  .rvmrc
24
+ .DS_Store
data/.rubocop.yml CHANGED
@@ -4,6 +4,13 @@ require:
4
4
 
5
5
  AllCops:
6
6
  NewCops: enable
7
+ Exclude:
8
+ - 'example.rb'
9
+ - 'tmp/*'
10
+ - 'vendor/**/*'
11
+
12
+ Lint/ToJSON:
13
+ Enabled: false
7
14
 
8
15
  Style/StringLiterals:
9
16
  Enabled: false
@@ -29,9 +36,16 @@ Metrics/ClassLength:
29
36
  Metrics/AbcSize:
30
37
  Enabled: false
31
38
 
39
+ Lint/MissingSuper:
40
+ Enabled: false
41
+
32
42
  # Wait until https://github.com/rubocop/rubocop/issues/8761 is fixed
33
43
  Gemspec/RequiredRubyVersion:
34
44
  Enabled: false
35
45
 
36
46
  Minitest/MultipleAssertions:
37
47
  Enabled: false
48
+
49
+ Style/AccessorGrouping: # disabled so that we can use sorbet signatures for each attr
50
+ Enabled: false
51
+
data/CHANGELOG.md CHANGED
@@ -1,11 +1,18 @@
1
1
  # Unreleased
2
+ - Make the gem stricly typed using Sorbet [#34](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/pull/34), [#35](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/pull/35), [#37](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/pull/37)
3
+ - Object IDs are Strings in development [#37](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/pull/37)
4
+
5
+ # v 0.3.2
6
+ - Include Zeitwerk
7
+
8
+ # v 0.3.1
9
+ - Update Meta API to v14
2
10
 
3
11
  # v 0.3.0
4
12
  - Allow Apps to have a singleton global authentication client.
5
13
 
6
14
  # v 0.2.0
7
15
  - Added Media API
8
- - Update Facebook API to v14
9
16
  - Added error and sucess responses
10
17
  - Added faraday-multiplart as part of the library
11
18
 
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  source "https://rubygems.org"
4
5
 
@@ -8,6 +9,8 @@ gem("faraday")
8
9
  gem("faraday-multipart")
9
10
  gem("oj")
10
11
  gem("rake", ">= 12.3.3")
12
+ gem('sorbet-runtime')
13
+ gem("zeitwerk", ">= 2.6.0")
11
14
 
12
15
  group(:test) do
13
16
  gem('mocha')
@@ -19,6 +22,9 @@ end
19
22
  group(:development) do
20
23
  gem('pry')
21
24
  gem('pry-nav')
25
+ gem('sorbet')
26
+ gem('spoom')
27
+ gem('tapioca', require: false)
22
28
  end
23
29
 
24
30
  gemspec
data/Gemfile.lock CHANGED
@@ -1,16 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- whatsapp_sdk (0.2.0)
4
+ whatsapp_sdk (0.3.2)
5
5
  faraday (~> 2.3.0)
6
6
  faraday-multipart (~> 1.0.4)
7
7
  oj (~> 3.13.13)
8
+ sorbet
9
+ sorbet-runtime
10
+ zeitwerk (~> 2.6.0)
8
11
 
9
12
  GEM
10
13
  remote: https://rubygems.org/
11
14
  specs:
12
15
  ast (2.4.2)
13
16
  coderay (1.1.3)
17
+ diff-lcs (1.5.0)
14
18
  faraday (2.3.0)
15
19
  faraday-net_http (~> 2.0)
16
20
  ruby2_keywords (>= 0.0.4)
@@ -21,6 +25,7 @@ GEM
21
25
  minitest (5.16.1)
22
26
  mocha (1.14.0)
23
27
  multipart-post (2.2.3)
28
+ netrc (0.11.0)
24
29
  oj (3.13.14)
25
30
  parallel (1.22.1)
26
31
  parser (3.1.2.0)
@@ -32,6 +37,11 @@ GEM
32
37
  pry (>= 0.9.10, < 0.15)
33
38
  rainbow (3.1.1)
34
39
  rake (13.0.6)
40
+ rbi (0.0.15)
41
+ ast
42
+ parser (>= 2.6.4.0)
43
+ sorbet-runtime (>= 0.5.9204)
44
+ unparser
35
45
  regexp_parser (2.5.0)
36
46
  rexml (3.2.5)
37
47
  rubocop (1.30.1)
@@ -52,7 +62,39 @@ GEM
52
62
  rubocop-ast (>= 0.4.0)
53
63
  ruby-progressbar (1.11.0)
54
64
  ruby2_keywords (0.0.5)
65
+ sorbet (0.5.10346)
66
+ sorbet-static (= 0.5.10346)
67
+ sorbet-runtime (0.5.10346)
68
+ sorbet-static (0.5.10346-universal-darwin-21)
69
+ sorbet-static-and-runtime (0.5.10346)
70
+ sorbet (= 0.5.10346)
71
+ sorbet-runtime (= 0.5.10346)
72
+ spoom (1.1.12)
73
+ sorbet (>= 0.5.9204)
74
+ sorbet-runtime (>= 0.5.9204)
75
+ thor (>= 0.19.2)
76
+ tapioca (0.9.4)
77
+ bundler (>= 1.17.3)
78
+ netrc (>= 0.11.0)
79
+ parallel (>= 1.21.0)
80
+ pry (>= 0.12.2)
81
+ rbi (~> 0.0.0, >= 0.0.14)
82
+ sorbet-static-and-runtime (>= 0.5.9204)
83
+ spoom (~> 1.1.0, >= 1.1.11)
84
+ thor (>= 1.2.0)
85
+ yard-sorbet
86
+ thor (1.2.1)
55
87
  unicode-display_width (2.2.0)
88
+ unparser (0.6.5)
89
+ diff-lcs (~> 1.3)
90
+ parser (>= 3.1.0)
91
+ webrick (1.7.0)
92
+ yard (0.9.28)
93
+ webrick (~> 1.7.0)
94
+ yard-sorbet (0.7.0)
95
+ sorbet-runtime (>= 0.5)
96
+ yard (>= 0.9)
97
+ zeitwerk (2.6.0)
56
98
 
57
99
  PLATFORMS
58
100
  x86_64-darwin-21
@@ -70,7 +112,12 @@ DEPENDENCIES
70
112
  rubocop
71
113
  rubocop-minitest
72
114
  rubocop-performance
115
+ sorbet
116
+ sorbet-runtime
117
+ spoom
118
+ tapioca
73
119
  whatsapp_sdk!
120
+ zeitwerk (>= 2.6.0)
74
121
 
75
122
  BUNDLED WITH
76
123
  2.3.9
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  <a href="https://codeclimate.com/github/ignacio-chiazzo/ruby_whatsapp_sdk/maintainability"><img src="https://api.codeclimate.com/v1/badges/169cce95450272e4ad7d/maintainability" /></a>
5
5
 
6
6
  The SDK provides a set of operations and classes to use the Whatsapp API.
7
- Send stickers, messages, audio, videos, locations or just ask for the phone numbers through this library in a few steps!
7
+ Send stickers, messages, audio, videos, and locations or just ask for the phone numbers through this library in a few steps!
8
8
 
9
9
 
10
10
  https://user-images.githubusercontent.com/11672878/173238826-6fc0a6f8-d0ee-4eae-8947-7dfd3b8b3446.mov
@@ -28,9 +28,9 @@ Or install it yourself as:
28
28
 
29
29
  ## Quick Start
30
30
 
31
- There are three primary resources, `Messages`, `Media` and `PhoneNumbers`. The first one allows clients to send any kind of message (text, audio, location, video, image, etc.), and the latter will enable clients to query the phone numbers associated.
31
+ There are three primary resources, `Messages`, `Media` and `PhoneNumbers`. `Messages` allows users to send any kind of message (text, audio, location, video, image, etc.). `Media` allows users to manage media, and `Phone Numbers` enable clients to query the associated phone numbers.
32
32
 
33
- To use `Messages`, `Media` or `PhoneNumbers` you need to initialize the `Client` that contain auth information. There are two ways to do it
33
+ To use `Messages`, `Media` or `PhoneNumbers`, you need to initialize the `Client` that contains auth information. There are two ways to do it
34
34
 
35
35
  1) Using an initializer
36
36
 
@@ -39,7 +39,7 @@ WhatsappSdk.configure do |config|
39
39
  config.access_token = ACCESS_TOKEN
40
40
  end
41
41
  ```
42
- OR creating an instance and pass it to the Messages or PhoneNumbers instance like this:
42
+ OR 2) creating a `Client` instance and pass it to the `Messages`, `Medias` or `PhoneNumbers` instance like this:
43
43
 
44
44
  ```ruby
45
45
  client = WhatsappSdk::Api::Client.new("<ACCESS TOKEN>") # replace this with a valid access token
@@ -59,15 +59,82 @@ medias_api = WhatsappSdk::Api::Medias.new
59
59
 
60
60
  Note: Remember to initialize the client first!
61
61
 
62
+ ## Set up a Meta app
63
+
64
+ <details><summary>1) Create a Meta Business app </summary>
65
+ <img width="1063" alt="Screen Shot 2022-09-05 at 11 03 47 AM" src="https://user-images.githubusercontent.com/11672878/188477795-4745a71a-a4b5-41e2-bef1-e41d3060e02b.png">
66
+ </details>
67
+
68
+ <details><summary>2) Add Whatsapp to your Application</summary>
69
+ <img width="1087" alt="Screen Shot 2022-09-05 at 11 05 43 AM" src="https://user-images.githubusercontent.com/11672878/188478100-98b3bf0a-fec7-4ea1-a492-aeb90a6b06bd.png">
70
+ </details>
71
+
72
+ <details><summary>3) Add a phone number to your account</summary>
73
+ <img width="972" alt="Screen Shot 2022-09-05 at 11 09 22 AM" src="https://user-images.githubusercontent.com/11672878/188478741-8a6105e8-2776-4493-bba9-05a62082a5aa.png">
74
+ </details>
75
+
76
+ Try sending a message to your phone in the UI.
77
+
78
+ <details><summary>4) Copy the ACCESS_TOKEN, the SENDER_ID, the BUSINESS_ID and the RECEIPIENT_NUMBER</summary>
79
+ <img width="1010" alt="Screen Shot 2022-09-05 at 11 13 24 AM" src="https://user-images.githubusercontent.com/11672878/188480634-369f8de1-b851-4735-86de-f49e96f78d8c.png">
80
+ </details>
81
+
82
+ </details>
83
+
84
+ <details><summary>5) Use the GEM to interact with Whatsapp</summary>
85
+
86
+ Example:
87
+ 1) Install the gem by running `gem install whatsapp_sdk` in the gem.
88
+ 2) Open the irb terminal by running `irb`
89
+ 3) `require "whatsapp_sdk"`
90
+ 4) Set up the `ACCESS_TOKEN`, the `SENDER_ID`, the `BUSINESS_ID` and the `RECEIPIENT_NUMBER` in variables.
91
+
92
+ ```ruby
93
+ ACCESS_TOKEN = "EAAZAvvr0DZBs0BABRLF8zohP5Epc6pyNu"
94
+ BUSINESS_ID = 1213141516171819
95
+ SENDER_ID = 1234567891011
96
+ RECIPIENT_NUMBER = 12398765432
97
+ ```
98
+
99
+ 5) Configure the Client by running
100
+
101
+ ```ruby
102
+ WhatsappSdk.configure do |config|
103
+ config.access_token = ACCESS_TOKEN
104
+ end
105
+ ```
106
+
107
+ 6) Try the Medias or Messages API
108
+
109
+ Medias API
110
+ ```ruby
111
+ phone_numbers_api = WhatsappSdk::Api::PhoneNumbers.new
112
+ registered_number = phone_numbers_api.registered_number(SENDER_ID)
113
+ ```
114
+
115
+ Messages API
116
+ ```ruby
117
+ messages_api = WhatsappSdk::Api::Messages.new
118
+ message_sent = messages_api.send_text(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER,
119
+ message: "Hey there! it's Whatsapp Ruby SDK")
120
+ ```
121
+
122
+ Check the [example.rb file](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/blob/main/example.rb) for more examples.
123
+
124
+ </details>
125
+
126
+
127
+
128
+
62
129
  ### Phone numbers API
63
130
  Get the list of phone numbers registered
64
131
  ```ruby
65
- phone_numbers_api.registered_numbers("123456") # accepts a business_id
132
+ phone_numbers_api.registered_numbers(123456) # accepts a business_id
66
133
  ```
67
134
 
68
135
  Get the a phone number by id
69
136
  ```ruby
70
- phone_numbers_api.registered_numbers("123456") # accepts a phone_number_id
137
+ phone_numbers_api.registered_numbers(123456) # accepts a phone_number_id
71
138
  ```
72
139
 
73
140
  ### Media API
@@ -97,7 +164,7 @@ medias_api.delete(media_id: MEDIA_ID)
97
164
  **Send a text message**
98
165
 
99
166
  ```ruby
100
- messages_api.send_text(sender_id: 1234, recipient_number: "112345678", message: "hola")
167
+ messages_api.send_text(sender_id: 1234, recipient_number: 112345678, message: "hola")
101
168
  ```
102
169
 
103
170
  **Read a message**
@@ -112,7 +179,7 @@ Note: To get the `message_id` you can set up [Webhooks](https://developers.faceb
112
179
 
113
180
  ```ruby
114
181
  messages_api.send_location(
115
- sender_id: 123123, recipient_number: "56789",
182
+ sender_id: 123123, recipient_number: 56789,
116
183
  longitude: 45.4215, latitude: 75.6972, name: "nacho", address: "141 cooper street"
117
184
  )
118
185
  ```
@@ -122,12 +189,12 @@ It could use a link or an image_id.
122
189
  ```ruby
123
190
  # with a link
124
191
  messages_api.send_image(
125
- sender_id: 123123, recipient_number: "56789", link: "image_link", caption: "Ignacio Chiazzo Profile"
192
+ sender_id: 123123, recipient_number: 56789, link: "image_link", caption: "Ignacio Chiazzo Profile"
126
193
  )
127
194
 
128
195
  # with an image id
129
196
  messages_api.send_image(
130
- sender_id: 123123, recipient_number: "56789", image_id: "1234", caption: "Ignacio Chiazzo Profile"
197
+ sender_id: 123123, recipient_number: 56789, image_id: "1234", caption: "Ignacio Chiazzo Profile"
131
198
  )
132
199
  ```
133
200
 
@@ -135,10 +202,10 @@ messages_api.send_image(
135
202
  It could use a link or an audio_id.
136
203
  ```ruby
137
204
  # with a link
138
- messages_api.send_audio(sender_id: 123123, recipient_number: "56789", link: "audio_link")
205
+ messages_api.send_audio(sender_id: 123123, recipient_number: 56789, link: "audio_link")
139
206
 
140
207
  # with an audio id
141
- messages_api.send_audio(sender_id: 123123, recipient_number: "56789", audio_id: "1234")
208
+ messages_api.send_audio(sender_id: 123123, recipient_number: 56789, audio_id: "1234")
142
209
  ```
143
210
 
144
211
  **Send a document message**
@@ -146,12 +213,12 @@ It could use a link or a document_id.
146
213
  ```ruby
147
214
  # with a link
148
215
  messages_api.send_document(
149
- sender_id: 123123, recipient_number: "56789", link: "document_link", caption: "Ignacio Chiazzo"
216
+ sender_id: 123123, recipient_number: 56789, link: "document_link", caption: "Ignacio Chiazzo"
150
217
  )
151
218
 
152
219
  # with a document id
153
220
  messages_api.send_document(
154
- sender_id: 123123, recipient_number: "56789", document_id: "1234", caption: "Ignacio Chiazzo"
221
+ sender_id: 123123, recipient_number: 56789, document_id: "1234", caption: "Ignacio Chiazzo"
155
222
  )
156
223
  ```
157
224
 
@@ -159,10 +226,10 @@ messages_api.send_document(
159
226
  It could use a link or a sticker_id.
160
227
  ```ruby
161
228
  # with a link
162
- messages_api.send_sticker(sender_id: 123123, recipient_number: "56789", link: "link")
229
+ messages_api.send_sticker(sender_id: 123123, recipient_number: 56789, link: "link")
163
230
 
164
231
  # with a sticker_id
165
- messages_api.send_sticker(sender_id: 123123, recipient_number: "56789", sticker_id: "1234")
232
+ messages_api.send_sticker(sender_id: 123123, recipient_number: 56789, sticker_id: "1234")
166
233
  ```
167
234
 
168
235
  **Send contacts message**
@@ -170,12 +237,12 @@ To send a contact, you need to create a Contact instance object that contain obj
170
237
 
171
238
  ```ruby
172
239
  contacts = [create_contact(params)]
173
- messages_api.send_contacts(sender_id: 123123, recipient_number: "56789", contacts: contacts)
240
+ messages_api.send_contacts(sender_id: 123123, recipient_number: 56789, contacts: contacts)
174
241
  ```
175
242
 
176
243
  Alernative, you could pass a plain json like this:
177
244
  ```ruby
178
- messages_api.send_contacts(sender_id: 123123, recipient_number: "56789", contacts_json: {...})
245
+ messages_api.send_contacts(sender_id: 123123, recipient_number: 56789, contacts_json: {...})
179
246
  ```
180
247
 
181
248
  **Send a template message**
@@ -190,46 +257,48 @@ currency = WhatsappSdk::Resource::Currency.new(code: "USD", amount: 1000, fallba
190
257
  date_time = WhatsappSdk::Resource::DateTime.new(fallback_value: "2020-01-01T00:00:00Z")
191
258
  image = WhatsappSdk::Resource::Media.new(type: "image", link: "http(s)://URL")
192
259
 
193
- parameter_image = WhatsappSdk::Resource::ParameterObject.new(type: "image", image: image)
194
- parameter_text = WhatsappSdk::Resource::ParameterObject.new(type: "text", text: "TEXT_STRING")
195
- parameter_currency = WhatsappSdk::Resource::ParameterObject.new(type: "currency", currency: currency)
196
- parameter_date_time = WhatsappSdk::Resource::ParameterObject.new(type: "date_time", date_time: date_time)
260
+ parameter_image = WhatsappSdk::Resource::ParameterObject.new(type: WhatsappSdk::Resource::ParameterObject::Type::Image, image: image)
261
+ # You can also use a plain string as type e.g.
262
+ # parameter_image = WhatsappSdk::Resource::ParameterObject.new(type: "image", image: image)
263
+ parameter_text = WhatsappSdk::Resource::ParameterObject.new(type: WhatsappSdk::Resource::ParameterObject::Type::Text, text: "TEXT_STRING")
264
+ parameter_currency = WhatsappSdk::Resource::ParameterObject.new(type: WhatsappSdk::Resource::ParameterObject::Type::Currency, currency: currency)
265
+ parameter_date_time = WhatsappSdk::Resource::ParameterObject.new(type: WhatsappSdk::Resource::ParameterObject::Type::DateTime, date_time: date_time)
197
266
 
198
267
  header_component = WhatsappSdk::Resource::Component.new(
199
- type: WhatsappSdk::Resource::Component::Type::HEADER,
268
+ type: WhatsappSdk::Resource::Component::Type::Header,
200
269
  parameters: [parameter_image]
201
270
  )
202
271
 
203
272
  body_component = WhatsappSdk::Resource::Component.new(
204
- type: WhatsappSdk::Resource::Component::Type::BODY,
273
+ type: WhatsappSdk::Resource::Component::Type::Body,
205
274
  parameters: [parameter_text, parameter_currency, parameter_date_time]
206
275
  )
207
276
 
208
277
  button_component1 = WhatsappSdk::Resource::Component.new(
209
- type: WhatsappSdk::Resource::Component::Type::BUTTON,
278
+ type: WhatsappSdk::Resource::Component::Type::Button,
210
279
  index: 0,
211
- sub_type: WhatsappSdk::Resource::Component::Subtype::QUICK_REPLY,
280
+ sub_type: WhatsappSdk::Resource::Component::Subtype::QuickReply,
212
281
  parameters: [
213
- WhatsappSdk::Resource::ButtonParameter.new(type: "payload", payload: "PAYLOAD")
282
+ WhatsappSdk::Resource::ButtonParameter.new(type: WhatsappSdk::Resource::ButtonParameter::Type::Payload, payload: "PAYLOAD")
214
283
  ]
215
284
  )
216
285
 
217
286
  button_component2 = WhatsappSdk::Resource::Component.new(
218
- type: WhatsappSdk::Resource::Component::Type::BUTTON,
287
+ type: WhatsappSdk::Resource::Component::Type::Button,
219
288
  index: 1,
220
- sub_type: WhatsappSdk::Resource::Component::Subtype::QUICK_REPLY,
289
+ sub_type: WhatsappSdk::Resource::Component::Subtype::QuickReply,
221
290
  parameters: [
222
- WhatsappSdk::Resource::ButtonParameter.new(type: "payload", payload: "PAYLOAD")
291
+ WhatsappSdk::Resource::ButtonParameter.new(type: WhatsappSdk::Resource::ButtonParameter::Type::Payload, payload: "PAYLOAD")
223
292
  ]
224
293
  )
225
- @messages_api.send_template(sender_id: 12_345, recipient_number: "12345678", name: "hello_world", language: "en_US", components_json: [component_1])
294
+ @messages_api.send_template(sender_id: 12_345, recipient_number: 12345678, name: "hello_world", language: "en_US", components_json: [component_1])
226
295
  ```
227
296
 
228
297
  </details>
229
298
 
230
299
  Alernative, you could pass a plain json like this:
231
300
  ```ruby
232
- @messages_api.send_template(sender_id: 12_345, recipient_number: "12345678", name: "hello_world", language: "en_US", components_json: [{...}])
301
+ @messages_api.send_template(sender_id: 12_345, recipient_number: 12345678, name: "hello_world", language: "en_US", components_json: [{...}])
233
302
  ```
234
303
 
235
304
  ## Example
@@ -244,7 +313,7 @@ Visit [the example file](/example.rb) with examples to call the API in a single
244
313
 
245
314
  ## Troubleshooting
246
315
 
247
- - If the API response is success but the message is not delivered, make sure the device you're sending the message to is using a supported Whatsapp version. [Check documentation](https://developers.facebook.com/docs/whatsapp/cloud-api/support/troubleshooting#message-not-delivered)
316
+ - If the API response is `success` but the message is not delivered, make sure the device you're sending the message to is using a supported Whatsapp version. [Check documentation](https://developers.facebook.com/docs/whatsapp/cloud-api/support/troubleshooting#message-not-delivered)
248
317
 
249
318
  ## Development
250
319
 
@@ -256,6 +325,11 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
256
325
 
257
326
  Bug reports and pull requests are welcome on GitHub at [https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk](https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk) This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
258
327
 
328
+ ### Run all the tests
329
+ - **Unit tests:** Run `rake test`
330
+ - **Sorbet Typecheck:** run `srb tc`
331
+ - **Linters:** `bundle exec rubocop`
332
+
259
333
  ## License
260
334
 
261
335
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # typed: true
2
3
 
3
4
  require "bundler/gem_tasks"
4
5
  require "rake/testtask"
data/bin/tapioca ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+ # typed: true
4
+
5
+ #
6
+ # This file was generated by Bundler.
7
+ #
8
+ # The application 'tapioca' is installed as part of a gem, and
9
+ # this file is here to facilitate running it.
10
+ #
11
+
12
+ require "pathname"
13
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
14
+ Pathname.new(__FILE__).realpath)
15
+
16
+ bundle_binstub = File.expand_path('bundle', __dir__)
17
+
18
+ if File.file?(bundle_binstub)
19
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 300))
20
+ load(bundle_binstub)
21
+ else
22
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
23
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
24
+ end
25
+ end
26
+
27
+ require "rubygems"
28
+ require "bundler/setup"
29
+
30
+ load Gem.bin_path("tapioca", "tapioca")