braze_ruby 0.4.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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