braze_ruby 0.4.2 → 0.5.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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +57 -0
  3. data/.circleci/gem_credentials +2 -0
  4. data/.circleci/setup-rubygems +6 -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 +4 -1
  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 +12 -12
  15. data/lib/braze_ruby/deprecated.rb +4 -4
  16. data/lib/braze_ruby/endpoints.rb +10 -10
  17. data/lib/braze_ruby/endpoints/remove_external_ids.rb +2 -2
  18. data/lib/braze_ruby/endpoints/rename_external_ids.rb +2 -2
  19. data/lib/braze_ruby/endpoints/subscription.rb +0 -1
  20. data/lib/braze_ruby/http.rb +8 -8
  21. data/lib/braze_ruby/rest.rb +20 -20
  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 +4 -4
  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_external_ids.rb +2 -2
  33. data/lib/braze_ruby/rest/rename_external_ids.rb +2 -2
  34. data/lib/braze_ruby/rest/schedule_messages.rb +6 -6
  35. data/lib/braze_ruby/rest/send_messages.rb +3 -3
  36. data/lib/braze_ruby/rest/subscription_status_get.rb +1 -1
  37. data/lib/braze_ruby/rest/subscription_status_set.rb +1 -1
  38. data/lib/braze_ruby/rest/subscription_user_status.rb +1 -1
  39. data/lib/braze_ruby/rest/track_users.rb +4 -4
  40. data/lib/braze_ruby/rest/trigger_campaign_send.rb +1 -1
  41. data/lib/braze_ruby/rest/trigger_canvas_send.rb +1 -1
  42. data/lib/braze_ruby/version.rb +1 -1
  43. metadata +45 -197
  44. data/.github/workflows/ci.yml +0 -30
  45. data/Gemfile.lock +0 -82
  46. data/spec/braze_ruby/api_spec.rb +0 -6
  47. data/spec/braze_ruby/endpoints/delete_users_spec.rb +0 -31
  48. data/spec/braze_ruby/endpoints/track_users_spec.rb +0 -74
  49. data/spec/braze_ruby/http_spec.rb +0 -48
  50. data/spec/braze_ruby/rest/create_user_aliases_spec.rb +0 -23
  51. data/spec/braze_ruby/rest/delete_users_spec.rb +0 -22
  52. data/spec/braze_ruby/rest/email_status_spec.rb +0 -20
  53. data/spec/braze_ruby/rest/export_users_spec.rb +0 -21
  54. data/spec/braze_ruby/rest/identify_users_spec.rb +0 -23
  55. data/spec/braze_ruby/rest/remove_external_ids_spec.rb +0 -22
  56. data/spec/braze_ruby/rest/rename_external_ids_spec.rb +0 -22
  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/create_user_aliases/unauthorized/responds_with_unauthorized.yml +0 -67
  65. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_created.yml +0 -71
  66. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_success_message.yml +0 -71
  67. data/spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml +0 -68
  68. data/spec/fixtures/responses/delete_users/with_success/responds_with_created.yml +0 -71
  69. data/spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml +0 -71
  70. data/spec/fixtures/responses/email_status/existing_email/responds_with_created.yml +0 -71
  71. data/spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml +0 -71
  72. data/spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml +0 -71
  73. data/spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml +0 -71
  74. data/spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml +0 -75
  75. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml +0 -75
  76. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml +0 -75
  77. data/spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml +0 -72
  78. data/spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml +0 -71
  79. data/spec/fixtures/responses/identify_users/unauthorized/responds_with_unauthorized.yml +0 -68
  80. data/spec/fixtures/responses/identify_users/with_success/responds_with_created.yml +0 -71
  81. data/spec/fixtures/responses/identify_users/with_success/responds_with_success_message.yml +0 -71
  82. data/spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml +0 -81
  83. data/spec/fixtures/responses/list_segments/with_success/responds_with_success.yml +0 -81
  84. data/spec/fixtures/responses/remove_external_ids/unauthorized/responds_with_unauthorized.yml +0 -67
  85. data/spec/fixtures/responses/remove_external_ids/with_success/responds_with_created.yml +0 -69
  86. data/spec/fixtures/responses/remove_external_ids/with_success/responds_with_success_message.yml +0 -69
  87. data/spec/fixtures/responses/rename_external_ids/unauthorized/responds_with_unauthorized.yml +0 -67
  88. data/spec/fixtures/responses/rename_external_ids/with_success/responds_with_created.yml +0 -69
  89. data/spec/fixtures/responses/rename_external_ids/with_success/responds_with_success_message.yml +0 -69
  90. data/spec/fixtures/responses/schedule_messages/unauthorized/responds_with_unauthorize.yml +0 -68
  91. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_created.yml +0 -71
  92. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_success_message.yml +0 -71
  93. data/spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml +0 -68
  94. data/spec/fixtures/responses/send_messages/with_success/responds_with_created.yml +0 -71
  95. data/spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml +0 -71
  96. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml +0 -71
  97. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml +0 -68
  98. data/spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml +0 -139
  99. 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
  100. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml +0 -199
  101. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml +0 -211
  102. data/spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml +0 -70
  103. data/spec/fixtures/responses/track_users/with_success/responds_with_created.yml +0 -73
  104. data/spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml +0 -73
  105. data/spec/integrations/campaigns_spec.rb +0 -19
  106. data/spec/integrations/canvas_spec.rb +0 -28
  107. data/spec/integrations/create_user_aliases_spec.rb +0 -32
  108. data/spec/integrations/delete_users_spec.rb +0 -32
  109. data/spec/integrations/email_status_spec.rb +0 -38
  110. data/spec/integrations/email_sync_spec.rb +0 -31
  111. data/spec/integrations/export_users_spec.rb +0 -29
  112. data/spec/integrations/identify_users_spec.rb +0 -32
  113. data/spec/integrations/list_segments_spec.rb +0 -21
  114. data/spec/integrations/remove_external_ids_spec.rb +0 -33
  115. data/spec/integrations/rename_external_ids_spec.rb +0 -37
  116. data/spec/integrations/schedule_messages_spec.rb +0 -34
  117. data/spec/integrations/send_messages_spec.rb +0 -33
  118. data/spec/integrations/subscription_spec.rb +0 -149
  119. data/spec/integrations/track_users_spec.rb +0 -38
  120. data/spec/spec_helper.rb +0 -25
  121. data/spec/support/factory_bot.rb +0 -12
  122. data/spec/support/integrations.rb +0 -27
  123. data/spec/support/vcr.rb +0 -20
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'list segments' do
6
- subject(:list_segments) { api.list_segments }
7
-
8
- context 'with success', :vcr do
9
- it 'responds with success' do
10
- expect(list_segments).to be_success
11
- end
12
-
13
- it 'responds with a list of segments' do
14
- expect(segments.count).to be 6
15
- end
16
-
17
- def segments
18
- JSON.parse(list_segments.body)['segments']
19
- end
20
- end
21
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'remove external ids' do
6
- let(:external_ids) { { external_ids: ['abc'] } }
7
-
8
- subject(:remove_external_ids) do
9
- api.remove_external_ids(external_ids)
10
- end
11
-
12
- context 'with success', vcr: true do
13
- it 'responds with created' do
14
- expect(remove_external_ids.status).to be 201
15
- end
16
-
17
- it 'responds with success message' do
18
- expect(JSON.parse(remove_external_ids.body)).to include(
19
- 'removed_ids' => ['abc'],
20
- 'removal_errors' => [],
21
- 'message' => 'success'
22
- )
23
- end
24
- end
25
-
26
- context 'unauthorized', vcr: true do
27
- let(:api_key) { 'non-existent' }
28
-
29
- it 'responds with unauthorized' do
30
- expect(remove_external_ids.status).to be 401
31
- end
32
- end
33
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'rename external ids' do
6
- let(:external_id_renames) { { external_id_renames: [{ current_external_id: 'abc', new_external_id: 'foo' }] } }
7
-
8
- subject(:rename_external_ids) do
9
- api.rename_external_ids(external_id_renames)
10
- end
11
-
12
- context 'with success', vcr: true do
13
- it 'responds with created' do
14
- expect(rename_external_ids.status).to be 201
15
- end
16
-
17
- it 'responds with success message' do
18
- expect(JSON.parse(rename_external_ids.body)).to include(
19
- 'external_ids' => [
20
- hash_including(
21
- 'current_external_id' => 'abc',
22
- 'new_external_id' => 'foo'
23
- ),],
24
- 'rename_errors' => [],
25
- 'message' => 'success'
26
- )
27
- end
28
- end
29
-
30
- context 'unauthorized', vcr: true do
31
- let(:api_key) { 'non-existent' }
32
-
33
- it 'responds with unauthorized' do
34
- expect(rename_external_ids.status).to be 401
35
- end
36
- end
37
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'schedule messages' do
6
- let(:user_ids) { [12345] }
7
- let(:test_time) { "2020-08-07T00:00:00+02:00" }
8
- let(:messages) { build(:messages) }
9
-
10
- subject(:schedule_messages) do
11
- api.schedule_messages(time: test_time,
12
- messages: messages, external_user_ids: user_ids)
13
- end
14
-
15
- context 'with success', vcr: true do
16
- it 'responds with created' do
17
- expect(schedule_messages.status).to be 201
18
- end
19
-
20
- it 'responds with success message' do
21
- expect(JSON.parse(schedule_messages.body)).to include(
22
- 'message' => 'success'
23
- )
24
- end
25
- end
26
-
27
- context 'unauthorized', vcr: true do
28
- let(:api_key) { 'non-existent' }
29
-
30
- it 'responds with unauthorize' do
31
- expect(schedule_messages.status).to be 401
32
- end
33
- end
34
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'send messages' do
6
- let(:user_ids) { [12345] }
7
- let(:messages) { build(:messages) }
8
-
9
- subject(:send_messages) do
10
- api.send_messages(messages: messages, external_user_ids: user_ids)
11
- end
12
-
13
- context 'with success', vcr: true do
14
- it 'responds with created' do
15
- expect(send_messages.status).to be 201
16
- end
17
-
18
- it 'responds with success message' do
19
- expect(JSON.parse(send_messages.body)).to eq(
20
- 'dispatch_id' => "ea0532cddfc97cd4e5767b351d6af0eb",
21
- 'message' => 'success'
22
- )
23
- end
24
- end
25
-
26
- context 'unauthorized', vcr: true do
27
- let(:api_key) { 'non-existent' }
28
-
29
- it 'responds with unauthorized' do
30
- expect(send_messages.status).to be 401
31
- end
32
- end
33
- end
@@ -1,149 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'subscription', vcr: true do
6
- let(:subscription_group_id) { 'ed06e19a-69b1-4f9b-a452-2db2c4e303a8' }
7
- let(:subscribed_user) { 'test-user-1' }
8
- let(:unsubscribed_user) { 'test-user-2' }
9
- let(:never_subscribed_user) { 'test-user-3' }
10
-
11
- context 'when getting subscription group statuses' do
12
- let(:json_response) { JSON.parse(response.body) }
13
-
14
- before do
15
- api.subscription_status_set(
16
- external_id: subscribed_user,
17
- subscription_group_id: subscription_group_id,
18
- subscription_state: 'subscribed'
19
- )
20
-
21
- api.subscription_status_set(
22
- external_id: unsubscribed_user,
23
- subscription_group_id: subscription_group_id,
24
- subscription_state: 'unsubscribed'
25
- )
26
- end
27
-
28
- describe 'subscription_user_status' do
29
- subject(:response) do
30
- api.subscription_user_status(
31
- external_id: external_id,
32
- )
33
- end
34
-
35
- let(:external_id) { [subscribed_user, unsubscribed_user, never_subscribed_user] }
36
-
37
- it 'returns subscription groups and status for every group' do
38
- expect(response.status).to eq(200)
39
- expect(json_response).to match(
40
- 'message' => 'success',
41
- 'total_count' => 3,
42
- 'users' => [
43
- hash_including(
44
- 'external_id' => subscribed_user,
45
- 'subscription_groups' => [
46
- hash_including(
47
- 'id' => subscription_group_id,
48
- 'status' => 'Subscribed'
49
- )
50
- ]
51
- ),
52
- hash_including(
53
- 'external_id' => unsubscribed_user,
54
- 'subscription_groups' => [
55
- hash_including(
56
- 'id' => subscription_group_id,
57
- 'status' => 'Unsubscribed'
58
- )
59
- ]
60
- ),
61
- hash_including(
62
- 'external_id' => never_subscribed_user,
63
- 'subscription_groups' => []
64
- )
65
- ]
66
- )
67
- end
68
- end
69
-
70
- describe 'subscription_status_get' do
71
- subject(:response) do
72
- api.subscription_status_get(
73
- external_id: external_id,
74
- subscription_group_id: subscription_group_id
75
- )
76
- end
77
-
78
- context 'when checking subscribed and unsubscribed user status' do
79
- let(:external_id) { [subscribed_user, unsubscribed_user, never_subscribed_user] }
80
-
81
- it 'returns only users that were once subscribed' do
82
- expect(response.status).to eq(200)
83
- expect(json_response).to eq(
84
- 'message' => 'success',
85
- 'status' => {
86
- 'test-user-1' => 'Subscribed',
87
- 'test-user-2' => 'Unsubscribed',
88
- 'test-user-3' => 'unknown'
89
- }
90
- )
91
- end
92
- end
93
-
94
- context 'when group does not exist' do
95
- let(:external_id) { subscribed_user }
96
- let(:subscription_group_id) { 'non-existing-subscription-group' }
97
-
98
- it 'returns an error' do
99
- expect(response.status).to eq(400)
100
- end
101
- end
102
- end
103
-
104
- end
105
-
106
- describe 'subscription_status_set' do
107
- subject(:response) do
108
- api.subscription_status_set(
109
- external_id: external_id,
110
- subscription_group_id: subscription_group_id,
111
- subscription_state: subscription_state
112
- )
113
- end
114
-
115
- let(:external_id) { subscribed_user }
116
- let(:subscription_state) { 'subscribed' }
117
-
118
- context 'when subscribing' do
119
- it 'subscribes the user' do
120
- expect(response.status).to eq(201)
121
- end
122
- end
123
-
124
- context 'when unsubscribing' do
125
- let(:external_id) { unsubscribed_user }
126
- let(:subscription_state) { 'unsubscribed' }
127
-
128
- before do
129
- api.subscription_status_set(
130
- external_id: external_id,
131
- subscription_group_id: subscription_group_id,
132
- subscription_state: 'subscribed'
133
- )
134
- end
135
-
136
- it 'unsubscribes the user' do
137
- expect(response.status).to eq(201)
138
- end
139
- end
140
-
141
- context 'when subscription group does not exist' do
142
- let(:subscription_group_id) { 'non-existing-subscription-group' }
143
-
144
- it 'returns an error status' do
145
- expect(response.status).to eq(400)
146
- end
147
- end
148
- end
149
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'track users' do
6
- let(:attributes) { [build(:attribute)] }
7
- let(:test_time) { Time.parse('2019-02-15 00:00:00 -0500') }
8
- let(:events) { [build(:event, time: test_time)] }
9
- let(:purchases) { [build(:purchase, time: test_time)] }
10
-
11
- subject(:track_users) do
12
- api.track_users(attributes: attributes,
13
- events: events, purchases: purchases)
14
- end
15
-
16
- context 'with success', vcr: true do
17
- it 'responds with created' do
18
- expect(track_users.status).to be 201
19
- end
20
-
21
- it 'responds with success message' do
22
- expect(JSON.parse(track_users.body)).to eq(
23
- 'attributes_processed' => 1,
24
- 'events_processed' => 1,
25
- 'purchases_processed' => 1,
26
- 'message' => 'success'
27
- )
28
- end
29
- end
30
-
31
- context 'unauthorized', vcr: true do
32
- let(:api_key) { 'non-existent' }
33
-
34
- it 'responds with unauthorized' do
35
- expect(track_users.status).to be 401
36
- end
37
- end
38
- end
data/spec/spec_helper.rb DELETED
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/setup'
4
- require 'pry'
5
- require 'dotenv'
6
-
7
- Dotenv.load
8
-
9
- require 'braze_ruby'
10
- require 'support/vcr'
11
- require 'support/factory_bot'
12
- require 'support/integrations'
13
-
14
- BRAZE_REST_API_KEY = ENV.fetch('BRAZE_REST_API_KEY', 'test')
15
- BRAZE_REST_URL = ENV.fetch('BRAZE_REST_URL', 'https://rest.iad-03.braze.com')
16
-
17
- RSpec.configure do |config|
18
- def braze_rest_api_key
19
- BRAZE_REST_API_KEY
20
- end
21
-
22
- def braze_rest_url
23
- BRAZE_REST_URL
24
- end
25
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'factory_bot'
4
-
5
- RSpec.configure do |config|
6
- config.include FactoryBot::Syntax::Methods
7
-
8
- config.before(:suite) do
9
- FactoryBot.find_definitions
10
- FactoryBot.lint
11
- end
12
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Integrations
4
- def api_key
5
- braze_rest_api_key
6
- end
7
-
8
- def rest_url
9
- braze_rest_url
10
- end
11
-
12
- def segment_id
13
- braze_test_segment
14
- end
15
-
16
- def options
17
- {}
18
- end
19
-
20
- def api
21
- BrazeRuby::API.new(api_key, rest_url, options)
22
- end
23
-
24
- RSpec.configure do |config|
25
- config.include self, type: :integrations, file_path: %r(spec/integrations)
26
- end
27
- end
data/spec/support/vcr.rb DELETED
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'vcr'
4
-
5
- VCR.configure do |config|
6
- config.filter_sensitive_data('<BRAZE_REST_API_KEY>') { BRAZE_REST_API_KEY }
7
- config.filter_sensitive_data('<BRAZE_REST_URL>') { BRAZE_REST_URL }
8
-
9
- config.cassette_library_dir = 'spec/fixtures/responses'
10
-
11
- config.default_cassette_options = {
12
- match_requests_on: [:method, :uri, :body],
13
- record: :once,
14
- allow_unused_http_interactions: false
15
- }
16
-
17
- config.configure_rspec_metadata!
18
-
19
- config.hook_into :webmock
20
- end