braze_ruby 0.4.1 → 0.7.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 (117) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +26 -0
  3. data/.github/workflows/gem_credentials +2 -0
  4. data/.github/workflows/release.yml +20 -0
  5. data/.gitignore +12 -19
  6. data/.standard.yml +1 -0
  7. data/Gemfile +1 -2
  8. data/LICENSE.txt +17 -18
  9. data/README.md +39 -2
  10. data/Rakefile +2 -1
  11. data/bin/release +16 -0
  12. data/braze_ruby.gemspec +28 -31
  13. data/lib/braze_ruby/api.rb +16 -10
  14. data/lib/braze_ruby/deprecated.rb +4 -5
  15. data/lib/braze_ruby/endpoints/campaigns.rb +4 -0
  16. data/lib/braze_ruby/endpoints/remove_email_addresses_from_spam.rb +19 -0
  17. data/lib/braze_ruby/endpoints/remove_external_ids.rb +19 -0
  18. data/lib/braze_ruby/endpoints/rename_external_ids.rb +19 -0
  19. data/lib/braze_ruby/endpoints/subscription.rb +0 -1
  20. data/lib/braze_ruby/endpoints.rb +11 -8
  21. data/lib/braze_ruby/http.rb +12 -9
  22. data/lib/braze_ruby/rest/base.rb +3 -3
  23. data/lib/braze_ruby/rest/canvas_details.rb +1 -1
  24. data/lib/braze_ruby/rest/create_user_aliases.rb +2 -2
  25. data/lib/braze_ruby/rest/delete_users.rb +2 -2
  26. data/lib/braze_ruby/rest/email_hard_bounces.rb +1 -1
  27. data/lib/braze_ruby/rest/email_status.rb +3 -3
  28. data/lib/braze_ruby/rest/email_unsubscribes.rb +1 -1
  29. data/lib/braze_ruby/rest/export_users.rb +7 -7
  30. data/lib/braze_ruby/rest/identify_users.rb +2 -2
  31. data/lib/braze_ruby/rest/list_segments.rb +1 -1
  32. data/lib/braze_ruby/rest/remove_email_addresses_from_spam.rb +13 -0
  33. data/lib/braze_ruby/rest/remove_external_ids.rb +13 -0
  34. data/lib/braze_ruby/rest/rename_external_ids.rb +13 -0
  35. data/lib/braze_ruby/rest/schedule_messages.rb +6 -6
  36. data/lib/braze_ruby/rest/send_messages.rb +3 -3
  37. data/lib/braze_ruby/rest/subscription_status_get.rb +1 -1
  38. data/lib/braze_ruby/rest/subscription_status_set.rb +1 -1
  39. data/lib/braze_ruby/rest/subscription_user_status.rb +1 -1
  40. data/lib/braze_ruby/rest/track_users.rb +4 -4
  41. data/lib/braze_ruby/rest/trigger_campaign_schedule.rb +18 -0
  42. data/lib/braze_ruby/rest/trigger_campaign_send.rb +1 -1
  43. data/lib/braze_ruby/rest/trigger_canvas_send.rb +1 -1
  44. data/lib/braze_ruby/rest.rb +22 -18
  45. data/lib/braze_ruby/version.rb +1 -1
  46. data/lib/braze_ruby.rb +4 -4
  47. metadata +52 -177
  48. data/.github/workflows/ci.yml +0 -30
  49. data/Gemfile.lock +0 -78
  50. data/spec/braze_ruby/api_spec.rb +0 -6
  51. data/spec/braze_ruby/endpoints/delete_users_spec.rb +0 -31
  52. data/spec/braze_ruby/endpoints/track_users_spec.rb +0 -74
  53. data/spec/braze_ruby/http_spec.rb +0 -48
  54. data/spec/braze_ruby/rest/create_user_aliases_spec.rb +0 -23
  55. data/spec/braze_ruby/rest/delete_users_spec.rb +0 -22
  56. data/spec/braze_ruby/rest/email_status_spec.rb +0 -20
  57. data/spec/braze_ruby/rest/export_users_spec.rb +0 -21
  58. data/spec/braze_ruby/rest/identify_users_spec.rb +0 -23
  59. data/spec/braze_ruby/rest/schedule_messages_spec.rb +0 -37
  60. data/spec/braze_ruby/rest/send_messages_spec.rb +0 -30
  61. data/spec/braze_ruby/rest/track_users_spec.rb +0 -27
  62. data/spec/factories.rb +0 -38
  63. data/spec/fixtures/responses/campaigns/trigger_send/sends_an_email.yml +0 -71
  64. data/spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml +0 -69
  65. data/spec/fixtures/responses/canvas/trigger_send/sends_a_canvas.yml +0 -71
  66. data/spec/fixtures/responses/create_user_aliases/unauthorized/responds_with_unauthorized.yml +0 -67
  67. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_created.yml +0 -71
  68. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_success_message.yml +0 -71
  69. data/spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml +0 -68
  70. data/spec/fixtures/responses/delete_users/with_success/responds_with_created.yml +0 -71
  71. data/spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml +0 -71
  72. data/spec/fixtures/responses/email_status/existing_email/responds_with_created.yml +0 -71
  73. data/spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml +0 -71
  74. data/spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml +0 -71
  75. data/spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml +0 -71
  76. data/spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml +0 -75
  77. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml +0 -75
  78. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml +0 -75
  79. data/spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml +0 -72
  80. data/spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml +0 -71
  81. data/spec/fixtures/responses/identify_users/unauthorized/responds_with_unauthorized.yml +0 -68
  82. data/spec/fixtures/responses/identify_users/with_success/responds_with_created.yml +0 -71
  83. data/spec/fixtures/responses/identify_users/with_success/responds_with_success_message.yml +0 -71
  84. data/spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml +0 -81
  85. data/spec/fixtures/responses/list_segments/with_success/responds_with_success.yml +0 -81
  86. data/spec/fixtures/responses/schedule_messages/unauthorized/responds_with_unauthorize.yml +0 -68
  87. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_created.yml +0 -71
  88. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_success_message.yml +0 -71
  89. data/spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml +0 -68
  90. data/spec/fixtures/responses/send_messages/with_success/responds_with_created.yml +0 -71
  91. data/spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml +0 -71
  92. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml +0 -71
  93. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml +0 -68
  94. data/spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml +0 -139
  95. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_checking_subscribed_and_unsubscribed_user_status/returns_only_users_that_were_once_subscribed.yml +0 -211
  96. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml +0 -199
  97. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml +0 -211
  98. data/spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml +0 -70
  99. data/spec/fixtures/responses/track_users/with_success/responds_with_created.yml +0 -73
  100. data/spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml +0 -73
  101. data/spec/integrations/campaigns_spec.rb +0 -19
  102. data/spec/integrations/canvas_spec.rb +0 -28
  103. data/spec/integrations/create_user_aliases_spec.rb +0 -32
  104. data/spec/integrations/delete_users_spec.rb +0 -32
  105. data/spec/integrations/email_status_spec.rb +0 -38
  106. data/spec/integrations/email_sync_spec.rb +0 -31
  107. data/spec/integrations/export_users_spec.rb +0 -29
  108. data/spec/integrations/identify_users_spec.rb +0 -32
  109. data/spec/integrations/list_segments_spec.rb +0 -21
  110. data/spec/integrations/schedule_messages_spec.rb +0 -34
  111. data/spec/integrations/send_messages_spec.rb +0 -33
  112. data/spec/integrations/subscription_spec.rb +0 -149
  113. data/spec/integrations/track_users_spec.rb +0 -38
  114. data/spec/spec_helper.rb +0 -25
  115. data/spec/support/factory_bot.rb +0 -12
  116. data/spec/support/integrations.rb +0 -27
  117. data/spec/support/vcr.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ef227d9be43770703ff994bcda610a34666b8057c5846f270391ee2a0dfd957
4
- data.tar.gz: 866befd357481f0cef4a18b761bb69ce66bfa098af871ee768ef4a8b575c944d
3
+ metadata.gz: 39bc36a3cad69bd3b9bd36df61c45e8052c594ea7533ea7c888cb6978f739adf
4
+ data.tar.gz: 4f01c13fa4bc9cb0ca255d370096bd90b9bf811cee980e60dc62186731b86d5d
5
5
  SHA512:
6
- metadata.gz: 5bd262c112d84b59dcefe528def47fd7a299715500e032ce0bbb8d3e6cb45fb226aad2c4f2a2f94c202b18efeae0f608c9984e999bb06549b720fedddba0d533
7
- data.tar.gz: 050c09bd0ea3d5b3d5bb7b34f869f9053e628e28e6f192e4b072eb7f3242ed1980f8484dce32708ab1b7cf21fc045318c962b75bc5ac5ae9a75b136b1e3a2b78
6
+ metadata.gz: c89ff06b6416a93a68a02c360d50cecde4b9132df53e692f7ffd26b259f8d783b3d83d3d78325c5d6b898ae292e3688aa43c83f83ecd2a93d611b4d83424d710
7
+ data.tar.gz: 51b93002f6521205daf03e196a32f70971b2ad89f8b160c38cbd179e4d813296335979e707e28b0d45242fff54474a961f02f30795ab399baa06eaa0a5eaa13e
@@ -0,0 +1,26 @@
1
+ version: 2.1
2
+ jobs:
3
+ test:
4
+ parameters:
5
+ ruby-version:
6
+ type: string
7
+ docker:
8
+ - image: << parameters.ruby-version >>
9
+ steps:
10
+ - checkout
11
+ - run:
12
+ name: Gem install bundler
13
+ command: gem update --system && gem install bundler
14
+ - run:
15
+ name: Bundle install
16
+ command: bundle install --jobs=4 --retry=3 --path vendor/bundle
17
+ - run:
18
+ name: Run tests
19
+ command: bundle exec rake
20
+ workflows:
21
+ all-tests:
22
+ jobs:
23
+ - test:
24
+ matrix:
25
+ parameters:
26
+ ruby-version: ["ruby:3.0.1", "ruby:2.7.3", "ruby:2.6.7"]
@@ -0,0 +1,2 @@
1
+ ---
2
+ :rubygems_api_key: REPLACE_ME
@@ -0,0 +1,20 @@
1
+ name: release
2
+ on:
3
+ push:
4
+ tags:
5
+ - v*
6
+ jobs:
7
+ release:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v2
11
+ - name: Setup rubygems
12
+ run: |
13
+ mkdir ~/.gem
14
+ cp ./.github/workflows/gem_credentials ~/.gem/credentials
15
+ chmod 0600 ~/.gem/credentials
16
+ sed -i "s/REPLACE_ME/${{ secrets.RUBYGEMS_KEY }}/g" ~/.gem/credentials
17
+ - name: Build gem
18
+ run: gem build braze_ruby.gemspec --output braze_ruby.gem
19
+ - name: Publish gem
20
+ run: gem push braze_ruby.gem
data/.gitignore CHANGED
@@ -1,19 +1,12 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- .ruby-version
7
- .ruby-gemset
8
- .env
9
- InstalledFiles
10
- _yardoc
11
- coverage
12
- doc/
13
- lib/bundler/man
14
- pkg
15
- rdoc
16
- spec/reports
17
- test/tmp
18
- test/version_tmp
19
- tmp
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ Gemfile.lock
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.standard.yml ADDED
@@ -0,0 +1 @@
1
+ format: progress
data/Gemfile CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source 'https://rubygems.org'
3
+ source "https://rubygems.org"
4
4
 
5
- # Specify your gem's dependencies in braze_ruby.gemspec
6
5
  gemspec
data/LICENSE.txt CHANGED
@@ -1,22 +1,21 @@
1
- Copyright (c) 2014 Josh Nussbaum
1
+ The MIT License (MIT)
2
2
 
3
- MIT License
3
+ Copyright (c) 2021 Jon Allured
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
12
11
 
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
15
14
 
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # BrazeRuby
1
+ # BrazeRuby [![CircleCI][badge]][circle]
2
2
 
3
3
  A wrapper for the Braze REST API. Forked from https://github.com/DynamoMTL/appboy
4
4
 
@@ -112,12 +112,22 @@ api.send_messages(messages: messages, segment_id: '<segment-id>')
112
112
  api.schedule_messages(send_at: 1.hour.since, messages: messages, external_user_ids: [123, 456])
113
113
  ```
114
114
 
115
+ ### Schedule Campaigns
116
+
117
+ ```ruby
118
+ api.trigger_campaign_schedule(
119
+ campaign_id: 'campaign-id',
120
+ recipients: [{ external_user_id: 123 }]
121
+ schedule: { time: Time.now.iso8601 }
122
+ )
123
+ ```
124
+
115
125
  ### Send Campaigns
116
126
 
117
127
  ```ruby
118
128
  api.trigger_campaign_send(
119
129
  campaign_id: 'campaign-id',
120
- recipients: [external_user_id: 123, trigger_properties: {first_name: 'John'}]
130
+ recipients: [{external_user_id: 123, trigger_properties: { first_name: 'John' }}]
121
131
  )
122
132
  ```
123
133
 
@@ -215,6 +225,25 @@ api.identify_users(
215
225
  )
216
226
  ```
217
227
 
228
+ ### External ID Migration
229
+
230
+ #### Rename users' external IDs with an array of external_id_renames
231
+ Note: you can send up to 50 rename objects per request.
232
+ ```ruby
233
+ api.rename_external_ids(
234
+ external_id_renames: [{
235
+ current_external_id: "old_external_id",
236
+ new_external_id: "new_external_id",
237
+ }]
238
+ )
239
+ ```
240
+
241
+ #### Remove users' old deprecated external IDs
242
+ Note: you can send up to 50 external IDs per request.
243
+ ```ruby
244
+ api.remove_external_ids(external_ids: ['old_external_id'])
245
+ ```
246
+
218
247
  ### Email Sync
219
248
 
220
249
  #### Get List of or Query Email Unsubscribes
@@ -227,6 +256,11 @@ api.email_unsubscribes(email: ['jdoe@example.com'])
227
256
  api.email_hard_bounces(email: ['jdoe@example.com'])
228
257
  ```
229
258
 
259
+ #### Remove Email Addresses From Spam List
260
+ ```ruby
261
+ api.remove_emails_from_spam(email: ['jdoe@example.com'])
262
+ ```
263
+
230
264
  ## Debugging
231
265
 
232
266
  The BRAZE_RUBY_DEBUG environment variable will trigger full printouts of the Faraday gem's HTTP requests and responses.
@@ -244,3 +278,6 @@ bundle exec rails whatever
244
278
  3. Commit your changes (`git commit -am 'Add some feature'`)
245
279
  4. Push to the branch (`git push origin my-new-feature`)
246
280
  5. Create new Pull Request
281
+
282
+ [badge]: https://circleci.com/gh/jonallured/braze_ruby.svg?style=svg
283
+ [circle]: https://circleci.com/gh/jonallured/braze_ruby
data/Rakefile CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "bundler/gem_tasks"
4
4
  require "rspec/core/rake_task"
5
+ require "standard/rake"
5
6
 
6
7
  RSpec::Core::RakeTask.new(:spec)
7
- task default: :spec
8
+ task default: %i[standard spec]
data/bin/release ADDED
@@ -0,0 +1,16 @@
1
+ #! /bin/sh
2
+ set -ex
3
+
4
+ old_version=$1
5
+ new_version=$2
6
+
7
+ version_files="lib/braze_ruby/version.rb Gemfile.lock"
8
+ commit_message="Bumping version numbers for $new_version"
9
+ tag_message="Tagging version $new_version"
10
+
11
+ sed -i "" "s/$old_version/$new_version/g" $version_files
12
+ git add .
13
+ git commit --message "$commit_message"
14
+ git push origin main
15
+ git tag --annotate v$new_version --message "$tag_message"
16
+ git push origin --tags
data/braze_ruby.gemspec CHANGED
@@ -1,38 +1,35 @@
1
- lib = File.expand_path('../lib', __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'braze_ruby/version'
1
+ require_relative "lib/braze_ruby/version"
4
2
 
5
3
  Gem::Specification.new do |spec|
6
- spec.name = 'braze_ruby'
7
- spec.version = BrazeRuby::VERSION
8
- spec.authors = ['Josh Nussbaum', 'Hugo Bastien', 'Justin Boltz']
9
- spec.email = %w(josh@godynamo.com hugo@godynamo.com justin.boltz@takl.com)
10
- spec.description = %q{Braze wrapper}
11
- spec.summary = %q{A wrapper for the Braze REST API forked from the appboy gem, track users/events/purchases, send & schedule messages}
12
- spec.homepage = 'https://www.braze.com/'
13
- spec.license = 'MIT'
4
+ spec.name = "braze_ruby"
5
+ spec.version = BrazeRuby::VERSION
6
+ spec.authors = ["Josh Nussbaum", "Hugo Bastien", "Justin Boltz", "Jonathan Allured"]
7
+ spec.email = %w[josh@godynamo.com hugo@godynamo.com justin.boltz@takl.com jon.allured@gmail.com]
14
8
 
15
- if spec.respond_to?(:metadata)
16
- spec.metadata["homepage_uri"] = spec.homepage
17
- spec.metadata["source_code_uri"] = "https://github.com/jboltz88/braze_ruby"
18
- else
19
- raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
20
- end
9
+ spec.summary = "A wrapper gem for the Braze REST API."
10
+ spec.description = "Wrapper for Braze API"
11
+ spec.homepage = "https://github.com/jonallured/braze_ruby"
12
+ spec.license = "MIT"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
14
+
15
+ spec.metadata["homepage_uri"] = spec.homepage
16
+ spec.metadata["source_code_uri"] = spec.homepage
21
17
 
22
- spec.files = `git ls-files`.split($/)
23
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
24
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
25
- spec.require_paths = ['lib']
26
- spec.required_ruby_version = '>= 2.0'
18
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
19
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
20
+ end
21
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
22
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
+ spec.require_paths = ["lib"]
27
24
 
28
- spec.add_dependency 'faraday'
25
+ spec.add_dependency "faraday"
29
26
 
30
- spec.add_development_dependency 'bundler', '>= 1.3'
31
- spec.add_development_dependency 'rake', '>= 12.3.3'
32
- spec.add_development_dependency 'rspec', '~> 3.8'
33
- spec.add_development_dependency 'dotenv', '~> 2.7.5'
34
- spec.add_development_dependency 'vcr', '>= 5.0.0'
35
- spec.add_development_dependency 'webmock', '>= 3.7.5'
36
- spec.add_development_dependency 'pry', '>= 0.12.2'
37
- spec.add_development_dependency 'factory_bot', '>= 5.1.0'
27
+ spec.add_development_dependency "dotenv"
28
+ spec.add_development_dependency "factory_bot"
29
+ spec.add_development_dependency "pry"
30
+ spec.add_development_dependency "rake"
31
+ spec.add_development_dependency "rspec"
32
+ spec.add_development_dependency "standard"
33
+ spec.add_development_dependency "vcr"
34
+ spec.add_development_dependency "webmock"
38
35
  end
@@ -1,15 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'braze_ruby/deprecated'
4
- require 'braze_ruby/endpoints/track_users'
5
- require 'braze_ruby/endpoints/send_messages'
6
- require 'braze_ruby/endpoints/schedule_messages'
7
- require 'braze_ruby/endpoints/email_status'
8
- require 'braze_ruby/endpoints/email_sync'
9
- require 'braze_ruby/endpoints/delete_users'
10
- require 'braze_ruby/endpoints/campaigns'
11
- require 'braze_ruby/endpoints/canvas'
12
- require 'braze_ruby/endpoints/subscription'
3
+ require "braze_ruby/deprecated"
4
+ require "braze_ruby/endpoints/track_users"
5
+ require "braze_ruby/endpoints/send_messages"
6
+ require "braze_ruby/endpoints/schedule_messages"
7
+ require "braze_ruby/endpoints/email_status"
8
+ require "braze_ruby/endpoints/email_sync"
9
+ require "braze_ruby/endpoints/delete_users"
10
+ require "braze_ruby/endpoints/campaigns"
11
+ require "braze_ruby/endpoints/canvas"
12
+ require "braze_ruby/endpoints/subscription"
13
+ require "braze_ruby/endpoints/rename_external_ids"
14
+ require "braze_ruby/endpoints/remove_external_ids"
15
+ require "braze_ruby/endpoints/remove_email_addresses_from_spam"
13
16
 
14
17
  module BrazeRuby
15
18
  class API
@@ -26,6 +29,9 @@ module BrazeRuby
26
29
  include BrazeRuby::Endpoints::Subscription
27
30
  include BrazeRuby::Endpoints::IdentifyUsers
28
31
  include BrazeRuby::Endpoints::CreateUserAliases
32
+ include BrazeRuby::Endpoints::RenameExternalIds
33
+ include BrazeRuby::Endpoints::RemoveExternalIds
34
+ include BrazeRuby::Endpoints::RemoveEmailAddressesFromSpam
29
35
 
30
36
  def export_users(**payload)
31
37
  BrazeRuby::REST::ExportUsers.new(api_key, braze_url, options).perform(**payload)
@@ -3,19 +3,18 @@
3
3
  module BrazeRuby
4
4
  module Deprecated
5
5
  def track(attribute, events = [], purchases = [])
6
- warn('[BrazeRuby] `track` is deprecated. Please use `track_users` instead.')
6
+ warn("[BrazeRuby] `track` is deprecated. Please use `track_users` instead.")
7
7
  track_users(attribute: attribute, events: events, purchases: purchases)
8
8
  end
9
9
 
10
10
  def send_message(message, user_ids, segment_ids = nil)
11
- warn('[BrazeRuby] `send_message` is deprecated. Please use `send_messages` instead.')
11
+ warn("[BrazeRuby] `send_message` is deprecated. Please use `send_messages` instead.")
12
12
  send_messages(messages: message, user_ids: user_ids, segment_ids: segment_ids)
13
13
  end
14
14
 
15
15
  def schedule_message(date, message, segment_id, local_timezone = false)
16
- warn('[BrazeRuby] `schedule_message` is deprecated. Please use `schedule_messages` instead.')
17
- schedule_messages(send_at: date, messages: message,
18
- segment_id: segment_id, local_timezone: local_timezone)
16
+ warn("[BrazeRuby] `schedule_message` is deprecated. Please use `schedule_messages` instead.")
17
+ schedule_messages(send_at: date, messages: message, segment_id: segment_id, local_timezone: local_timezone)
19
18
  end
20
19
  end
21
20
  end
@@ -6,6 +6,10 @@ module BrazeRuby
6
6
  def trigger_campaign_send(**payload)
7
7
  BrazeRuby::REST::TriggerCampaignSend.new(api_key, braze_url, options, **payload).perform
8
8
  end
9
+
10
+ def trigger_campaign_schedule(**payload)
11
+ BrazeRuby::REST::TriggerCampaignSchedule.new(api_key, braze_url, options, **payload).perform
12
+ end
9
13
  end
10
14
  end
11
15
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module Endpoints
5
+ module RemoveEmailAddressesFromSpam
6
+ attr_writer :remove_emails_from_spam_service
7
+
8
+ def remove_emails_from_spam(**payload)
9
+ remove_emails_from_spam_service.perform(**payload)
10
+ end
11
+
12
+ private
13
+
14
+ def remove_emails_from_spam_service
15
+ @remove_emails_from_spam_service ||= BrazeRuby::REST::RemoveEmailAddressesFromSpam.new(api_key, braze_url, options)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module Endpoints
5
+ module RemoveExternalIds
6
+ attr_writer :remove_external_ids_service
7
+
8
+ def remove_external_ids(payload)
9
+ remove_external_ids_service.perform(external_ids: payload[:external_ids])
10
+ end
11
+
12
+ private
13
+
14
+ def remove_external_ids_service
15
+ @remove_external_ids ||= BrazeRuby::REST::RemoveExternalIds.new(api_key, braze_url, options)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module Endpoints
5
+ module RenameExternalIds
6
+ attr_writer :rename_external_ids_service
7
+
8
+ def rename_external_ids(payload)
9
+ rename_external_ids_service.perform(external_id_renames: payload[:external_id_renames])
10
+ end
11
+
12
+ private
13
+
14
+ def rename_external_ids_service
15
+ @rename_external_ids ||= BrazeRuby::REST::RenameExternalIds.new(api_key, braze_url, options)
16
+ end
17
+ end
18
+ end
19
+ end
@@ -11,7 +11,6 @@ module BrazeRuby
11
11
  BrazeRuby::REST::SubscriptionStatusGet.new(api_key, braze_url, options, **payload).perform
12
12
  end
13
13
 
14
-
15
14
  def subscription_user_status(**payload)
16
15
  BrazeRuby::REST::SubscriptionUserStatus.new(api_key, braze_url, options, **payload).perform
17
16
  end
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'braze_ruby/endpoints/email_status'
4
- require 'braze_ruby/endpoints/email_sync'
5
- require 'braze_ruby/endpoints/schedule_messages'
6
- require 'braze_ruby/endpoints/send_messages'
7
- require 'braze_ruby/endpoints/track_users'
8
- require 'braze_ruby/endpoints/delete_users'
9
- require 'braze_ruby/endpoints/identify_users'
10
- require 'braze_ruby/endpoints/create_user_aliases'
3
+ require "braze_ruby/endpoints/email_status"
4
+ require "braze_ruby/endpoints/email_sync"
5
+ require "braze_ruby/endpoints/schedule_messages"
6
+ require "braze_ruby/endpoints/send_messages"
7
+ require "braze_ruby/endpoints/track_users"
8
+ require "braze_ruby/endpoints/delete_users"
9
+ require "braze_ruby/endpoints/identify_users"
10
+ require "braze_ruby/endpoints/create_user_aliases"
11
+ require "braze_ruby/endpoints/rename_external_ids"
12
+ require "braze_ruby/endpoints/remove_external_ids"
13
+ require "braze_ruby/endpoints/remove_email_addresses_from_spam"
@@ -1,16 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'json'
4
- require 'faraday'
3
+ require "json"
4
+ require "faraday"
5
5
 
6
6
  module BrazeRuby
7
7
  class HTTP
8
8
  DEFAULT_TIMEOUT = 30
9
+ DEFAULT_OPEN_TIMEOUT = 5
9
10
 
10
11
  def initialize(api_key, braze_url, options = {})
11
- @api_key = api_key
12
+ @api_key = api_key
12
13
  @braze_url = braze_url
13
- @options = default_options.merge(options)
14
+ @options = default_options.merge(options)
14
15
  end
15
16
 
16
17
  def post(path, payload)
@@ -25,23 +26,25 @@ module BrazeRuby
25
26
 
26
27
  def connection
27
28
  @connection ||= Faraday.new(url: @braze_url) do |connection|
28
- connection.headers["Content-Type"] = "application/json"
29
- connection.headers["Accept"] = "application/json"
30
- connection.headers["User-Agent"] = "Braze Ruby gem v#{BrazeRuby::VERSION}"
29
+ connection.headers["Content-Type"] = "application/json"
30
+ connection.headers["Accept"] = "application/json"
31
+ connection.headers["User-Agent"] = "Braze Ruby gem v#{BrazeRuby::VERSION}"
31
32
  connection.headers["Authorization"] = "Bearer #{@api_key}"
32
33
 
33
- connection.response :logger if ENV['BRAZE_RUBY_DEBUG']
34
+ connection.response :logger if ENV["BRAZE_RUBY_DEBUG"]
35
+ connection.request :retry, @options[:retry] if @options[:retry]
34
36
 
35
37
  connection.adapter Faraday.default_adapter
36
38
 
37
39
  connection.options[:timeout] = @options[:timeout]
40
+ connection.options[:open_timeout] = @options[:open_timeout]
38
41
  end
39
42
  end
40
43
 
41
44
  private
42
45
 
43
46
  def default_options
44
- {timeout: DEFAULT_TIMEOUT}
47
+ {timeout: DEFAULT_TIMEOUT, open_timeout: DEFAULT_OPEN_TIMEOUT}
45
48
  end
46
49
  end
47
50
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'braze_ruby/http'
3
+ require "braze_ruby/http"
4
4
 
5
5
  module BrazeRuby
6
6
  module REST
@@ -8,9 +8,9 @@ module BrazeRuby
8
8
  attr_writer :http
9
9
 
10
10
  def initialize(api_key, braze_url, options)
11
- @api_key = api_key
11
+ @api_key = api_key
12
12
  @braze_url = braze_url
13
- @options = options
13
+ @options = options
14
14
  end
15
15
 
16
16
  private
@@ -11,7 +11,7 @@ module BrazeRuby
11
11
  end
12
12
 
13
13
  def perform
14
- http.get('/canvas/details', {
14
+ http.get("/canvas/details", {
15
15
  **@params
16
16
  })
17
17
  end
@@ -4,8 +4,8 @@ module BrazeRuby
4
4
  module REST
5
5
  class CreateUserAliases < Base
6
6
  def perform(user_aliases: [])
7
- http.post '/users/alias/new', {
8
- 'user_aliases': user_aliases
7
+ http.post "/users/alias/new", {
8
+ user_aliases: user_aliases
9
9
  }
10
10
  end
11
11
  end
@@ -4,8 +4,8 @@ module BrazeRuby
4
4
  module REST
5
5
  class DeleteUsers < Base
6
6
  def perform(external_ids: [])
7
- http.post '/users/delete', {
8
- 'external_ids': external_ids
7
+ http.post "/users/delete", {
8
+ external_ids: external_ids
9
9
  }
10
10
  end
11
11
  end
@@ -11,7 +11,7 @@ module BrazeRuby
11
11
  end
12
12
 
13
13
  def perform
14
- http.get('/email/hard_bounces', {
14
+ http.get("/email/hard_bounces", {
15
15
  **@params
16
16
  })
17
17
  end
@@ -12,9 +12,9 @@ module BrazeRuby
12
12
  end
13
13
 
14
14
  def perform
15
- http.post '/email/status', {
16
- 'email': email,
17
- 'subscription_state': status
15
+ http.post "/email/status", {
16
+ email: email,
17
+ subscription_state: status
18
18
  }
19
19
  end
20
20
  end
@@ -11,7 +11,7 @@ module BrazeRuby
11
11
  end
12
12
 
13
13
  def perform
14
- http.get('/email/unsubscribes', {
14
+ http.get("/email/unsubscribes", {
15
15
  **params
16
16
  })
17
17
  end