braze_ruby 0.4.2 → 0.5.0

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