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.
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")