braze_ruby 0.4.0 → 0.6.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 (111) 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 +54 -2
  10. data/Rakefile +2 -1
  11. data/bin/release +16 -0
  12. data/braze_ruby.gemspec +28 -31
  13. data/lib/braze_ruby.rb +4 -4
  14. data/lib/braze_ruby/api.rb +17 -10
  15. data/lib/braze_ruby/deprecated.rb +4 -5
  16. data/lib/braze_ruby/endpoints.rb +11 -7
  17. data/lib/braze_ruby/endpoints/create_user_aliases.rb +19 -0
  18. data/lib/braze_ruby/endpoints/remove_email_addresses_from_spam.rb +19 -0
  19. data/lib/braze_ruby/endpoints/remove_external_ids.rb +19 -0
  20. data/lib/braze_ruby/endpoints/rename_external_ids.rb +19 -0
  21. data/lib/braze_ruby/endpoints/subscription.rb +0 -1
  22. data/lib/braze_ruby/http.rb +12 -9
  23. data/lib/braze_ruby/rest.rb +21 -17
  24. data/lib/braze_ruby/rest/base.rb +3 -3
  25. data/lib/braze_ruby/rest/canvas_details.rb +1 -1
  26. data/lib/braze_ruby/rest/create_user_aliases.rb +13 -0
  27. data/lib/braze_ruby/rest/delete_users.rb +2 -2
  28. data/lib/braze_ruby/rest/email_hard_bounces.rb +1 -1
  29. data/lib/braze_ruby/rest/email_status.rb +3 -3
  30. data/lib/braze_ruby/rest/email_unsubscribes.rb +1 -1
  31. data/lib/braze_ruby/rest/export_users.rb +7 -7
  32. data/lib/braze_ruby/rest/identify_users.rb +2 -2
  33. data/lib/braze_ruby/rest/list_segments.rb +1 -1
  34. data/lib/braze_ruby/rest/remove_email_addresses_from_spam.rb +13 -0
  35. data/lib/braze_ruby/rest/remove_external_ids.rb +13 -0
  36. data/lib/braze_ruby/rest/rename_external_ids.rb +13 -0
  37. data/lib/braze_ruby/rest/schedule_messages.rb +6 -6
  38. data/lib/braze_ruby/rest/send_messages.rb +3 -3
  39. data/lib/braze_ruby/rest/subscription_status_get.rb +1 -1
  40. data/lib/braze_ruby/rest/subscription_status_set.rb +1 -1
  41. data/lib/braze_ruby/rest/subscription_user_status.rb +1 -1
  42. data/lib/braze_ruby/rest/track_users.rb +4 -4
  43. data/lib/braze_ruby/rest/trigger_campaign_send.rb +1 -1
  44. data/lib/braze_ruby/rest/trigger_canvas_send.rb +1 -1
  45. data/lib/braze_ruby/version.rb +1 -1
  46. metadata +52 -166
  47. data/.github/workflows/ci.yml +0 -30
  48. data/Gemfile.lock +0 -78
  49. data/spec/braze_ruby/api_spec.rb +0 -6
  50. data/spec/braze_ruby/endpoints/delete_users_spec.rb +0 -31
  51. data/spec/braze_ruby/endpoints/track_users_spec.rb +0 -74
  52. data/spec/braze_ruby/http_spec.rb +0 -48
  53. data/spec/braze_ruby/rest/delete_users_spec.rb +0 -22
  54. data/spec/braze_ruby/rest/email_status_spec.rb +0 -20
  55. data/spec/braze_ruby/rest/export_users_spec.rb +0 -21
  56. data/spec/braze_ruby/rest/identify_users_spec.rb +0 -23
  57. data/spec/braze_ruby/rest/schedule_messages_spec.rb +0 -37
  58. data/spec/braze_ruby/rest/send_messages_spec.rb +0 -30
  59. data/spec/braze_ruby/rest/track_users_spec.rb +0 -27
  60. data/spec/factories.rb +0 -38
  61. data/spec/fixtures/responses/campaigns/trigger_send/sends_an_email.yml +0 -71
  62. data/spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml +0 -69
  63. data/spec/fixtures/responses/canvas/trigger_send/sends_a_canvas.yml +0 -71
  64. data/spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml +0 -68
  65. data/spec/fixtures/responses/delete_users/with_success/responds_with_created.yml +0 -71
  66. data/spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml +0 -71
  67. data/spec/fixtures/responses/email_status/existing_email/responds_with_created.yml +0 -71
  68. data/spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml +0 -71
  69. data/spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml +0 -71
  70. data/spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml +0 -71
  71. data/spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml +0 -75
  72. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml +0 -75
  73. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml +0 -75
  74. data/spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml +0 -72
  75. data/spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml +0 -71
  76. data/spec/fixtures/responses/identify_users/unauthorized/responds_with_unauthorized.yml +0 -68
  77. data/spec/fixtures/responses/identify_users/with_success/responds_with_created.yml +0 -71
  78. data/spec/fixtures/responses/identify_users/with_success/responds_with_success_message.yml +0 -71
  79. data/spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml +0 -81
  80. data/spec/fixtures/responses/list_segments/with_success/responds_with_success.yml +0 -81
  81. data/spec/fixtures/responses/schedule_messages/unauthorized/responds_with_unauthorize.yml +0 -68
  82. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_created.yml +0 -71
  83. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_success_message.yml +0 -71
  84. data/spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml +0 -68
  85. data/spec/fixtures/responses/send_messages/with_success/responds_with_created.yml +0 -71
  86. data/spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml +0 -71
  87. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml +0 -71
  88. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml +0 -68
  89. data/spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml +0 -139
  90. 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
  91. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml +0 -199
  92. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml +0 -211
  93. data/spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml +0 -70
  94. data/spec/fixtures/responses/track_users/with_success/responds_with_created.yml +0 -73
  95. data/spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml +0 -73
  96. data/spec/integrations/campaigns_spec.rb +0 -19
  97. data/spec/integrations/canvas_spec.rb +0 -28
  98. data/spec/integrations/delete_users_spec.rb +0 -32
  99. data/spec/integrations/email_status_spec.rb +0 -38
  100. data/spec/integrations/email_sync_spec.rb +0 -31
  101. data/spec/integrations/export_users_spec.rb +0 -29
  102. data/spec/integrations/identify_users_spec.rb +0 -32
  103. data/spec/integrations/list_segments_spec.rb +0 -21
  104. data/spec/integrations/schedule_messages_spec.rb +0 -34
  105. data/spec/integrations/send_messages_spec.rb +0 -33
  106. data/spec/integrations/subscription_spec.rb +0 -149
  107. data/spec/integrations/track_users_spec.rb +0 -38
  108. data/spec/spec_helper.rb +0 -25
  109. data/spec/support/factory_bot.rb +0 -12
  110. data/spec/support/integrations.rb +0 -27
  111. data/spec/support/vcr.rb +0 -20
@@ -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,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,19 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'braze_ruby/rest/base'
4
- require 'braze_ruby/rest/track_users'
5
- require 'braze_ruby/rest/send_messages'
6
- require 'braze_ruby/rest/schedule_messages'
7
- require 'braze_ruby/rest/email_status'
8
- require 'braze_ruby/rest/email_hard_bounces'
9
- require 'braze_ruby/rest/email_unsubscribes'
10
- require 'braze_ruby/rest/export_users'
11
- require 'braze_ruby/rest/list_segments'
12
- require 'braze_ruby/rest/delete_users'
13
- require 'braze_ruby/rest/trigger_campaign_send'
14
- require 'braze_ruby/rest/trigger_canvas_send'
15
- require 'braze_ruby/rest/canvas_details'
16
- require 'braze_ruby/rest/subscription_status_set'
17
- require 'braze_ruby/rest/subscription_status_get'
18
- require 'braze_ruby/rest/subscription_user_status'
19
- require 'braze_ruby/rest/identify_users'
3
+ require "braze_ruby/rest/base"
4
+ require "braze_ruby/rest/track_users"
5
+ require "braze_ruby/rest/send_messages"
6
+ require "braze_ruby/rest/schedule_messages"
7
+ require "braze_ruby/rest/email_status"
8
+ require "braze_ruby/rest/email_hard_bounces"
9
+ require "braze_ruby/rest/email_unsubscribes"
10
+ require "braze_ruby/rest/export_users"
11
+ require "braze_ruby/rest/list_segments"
12
+ require "braze_ruby/rest/delete_users"
13
+ require "braze_ruby/rest/trigger_campaign_send"
14
+ require "braze_ruby/rest/trigger_canvas_send"
15
+ require "braze_ruby/rest/canvas_details"
16
+ require "braze_ruby/rest/subscription_status_set"
17
+ require "braze_ruby/rest/subscription_status_get"
18
+ require "braze_ruby/rest/subscription_user_status"
19
+ require "braze_ruby/rest/identify_users"
20
+ require "braze_ruby/rest/create_user_aliases"
21
+ require "braze_ruby/rest/rename_external_ids"
22
+ require "braze_ruby/rest/remove_external_ids"
23
+ require "braze_ruby/rest/remove_email_addresses_from_spam"
@@ -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
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module REST
5
+ class CreateUserAliases < Base
6
+ def perform(user_aliases: [])
7
+ http.post "/users/alias/new", {
8
+ user_aliases: user_aliases
9
+ }
10
+ end
11
+ end
12
+ end
13
+ 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
@@ -4,22 +4,22 @@ module BrazeRuby
4
4
  module REST
5
5
  class ExportUsers < Base
6
6
  def perform(external_ids: nil, segment_id: nil, **options)
7
- return export_users_by_ids(external_ids) if external_ids
7
+ return export_users_by_ids(external_ids, options) if external_ids
8
8
 
9
9
  export_users_by_segment(segment_id, options) if segment_id
10
10
  end
11
11
 
12
12
  private
13
13
 
14
- def export_users_by_ids(external_ids)
15
- http.post '/users/export/ids', {
16
- 'external_ids': external_ids
17
- }
14
+ def export_users_by_ids(external_ids, options)
15
+ http.post "/users/export/ids", {
16
+ external_ids: external_ids
17
+ }.merge(options)
18
18
  end
19
19
 
20
20
  def export_users_by_segment(segment_id, options)
21
- http.post '/users/export/segment', {
22
- 'segment_id': segment_id
21
+ http.post "/users/export/segment", {
22
+ segment_id: segment_id
23
23
  }.merge(options)
24
24
  end
25
25
  end
@@ -4,8 +4,8 @@ module BrazeRuby
4
4
  module REST
5
5
  class IdentifyUsers < Base
6
6
  def perform(aliases_to_identify: [])
7
- http.post '/users/identify', {
8
- 'aliases_to_identify': aliases_to_identify
7
+ http.post "/users/identify", {
8
+ aliases_to_identify: aliases_to_identify
9
9
  }
10
10
  end
11
11
  end
@@ -4,7 +4,7 @@ module BrazeRuby
4
4
  module REST
5
5
  class ListSegments < Base
6
6
  def perform
7
- http.get '/segments/list'
7
+ http.get "/segments/list"
8
8
  end
9
9
  end
10
10
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module REST
5
+ class RemoveEmailAddressesFromSpam < Base
6
+ def perform(email: [])
7
+ http.post "/email/spam/remove", {
8
+ email: email
9
+ }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module REST
5
+ class RemoveExternalIds < Base
6
+ def perform(external_ids: [])
7
+ http.post "/users/external_ids/remove", {
8
+ external_ids: external_ids
9
+ }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module REST
5
+ class RenameExternalIds < Base
6
+ def perform(external_id_renames: [])
7
+ http.post "/users/external_ids/rename", {
8
+ external_id_renames: external_id_renames
9
+ }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -14,13 +14,13 @@ module BrazeRuby
14
14
  end
15
15
 
16
16
  def perform
17
- http.post '/messages/schedule/create', {
18
- 'external_user_ids': external_user_ids,
19
- 'schedule': {
20
- 'time': time,
21
- 'in_local_time': in_local_time
17
+ http.post "/messages/schedule/create", {
18
+ external_user_ids: external_user_ids,
19
+ schedule: {
20
+ time: time,
21
+ in_local_time: in_local_time
22
22
  },
23
- 'messages': messages
23
+ messages: messages
24
24
  }
25
25
  end
26
26
  end
@@ -12,9 +12,9 @@ module BrazeRuby
12
12
  end
13
13
 
14
14
  def perform
15
- http.post '/messages/send', {
16
- 'messages': messages,
17
- 'external_user_ids': external_user_ids
15
+ http.post "/messages/send", {
16
+ messages: messages,
17
+ external_user_ids: external_user_ids
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('/subscription/status/get', {
14
+ http.get("/subscription/status/get", {
15
15
  **params
16
16
  })
17
17
  end
@@ -11,7 +11,7 @@ module BrazeRuby
11
11
  end
12
12
 
13
13
  def perform
14
- http.post('/subscription/status/set', {
14
+ http.post("/subscription/status/set", {
15
15
  **params
16
16
  })
17
17
  end
@@ -11,7 +11,7 @@ module BrazeRuby
11
11
  end
12
12
 
13
13
  def perform
14
- http.get('/subscription/user/status', {
14
+ http.get("/subscription/user/status", {
15
15
  **params
16
16
  })
17
17
  end
@@ -4,10 +4,10 @@ module BrazeRuby
4
4
  module REST
5
5
  class TrackUsers < Base
6
6
  def perform(attributes: [], events: [], purchases: [])
7
- http.post '/users/track', {
8
- 'attributes': attributes,
9
- 'events': events,
10
- 'purchases': purchases
7
+ http.post "/users/track", {
8
+ attributes: attributes,
9
+ events: events,
10
+ purchases: purchases
11
11
  }
12
12
  end
13
13
  end
@@ -11,7 +11,7 @@ module BrazeRuby
11
11
  end
12
12
 
13
13
  def perform
14
- http.post('/campaigns/trigger/send', @params)
14
+ http.post("/campaigns/trigger/send", @params)
15
15
  end
16
16
  end
17
17
  end