braze_ruby 0.2.2 → 0.3.1

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +10 -10
  5. data/README.md +24 -0
  6. data/Rakefile +2 -0
  7. data/braze_ruby.gemspec +8 -8
  8. data/lib/braze_ruby.rb +2 -0
  9. data/lib/braze_ruby/api.rb +4 -0
  10. data/lib/braze_ruby/deprecated.rb +2 -0
  11. data/lib/braze_ruby/endpoints.rb +2 -0
  12. data/lib/braze_ruby/endpoints/campaigns.rb +2 -0
  13. data/lib/braze_ruby/endpoints/canvas.rb +6 -0
  14. data/lib/braze_ruby/endpoints/delete_users.rb +2 -0
  15. data/lib/braze_ruby/endpoints/email_status.rb +2 -0
  16. data/lib/braze_ruby/endpoints/email_sync.rb +2 -0
  17. data/lib/braze_ruby/endpoints/schedule_messages.rb +2 -0
  18. data/lib/braze_ruby/endpoints/send_messages.rb +2 -0
  19. data/lib/braze_ruby/endpoints/subscription.rb +20 -0
  20. data/lib/braze_ruby/endpoints/track_users.rb +2 -0
  21. data/lib/braze_ruby/http.rb +2 -0
  22. data/lib/braze_ruby/rest.rb +6 -0
  23. data/lib/braze_ruby/rest/base.rb +2 -0
  24. data/lib/braze_ruby/rest/canvas_details.rb +22 -0
  25. data/lib/braze_ruby/rest/delete_users.rb +2 -0
  26. data/lib/braze_ruby/rest/email_hard_bounces.rb +2 -0
  27. data/lib/braze_ruby/rest/email_status.rb +2 -0
  28. data/lib/braze_ruby/rest/email_unsubscribes.rb +2 -0
  29. data/lib/braze_ruby/rest/export_users.rb +2 -0
  30. data/lib/braze_ruby/rest/list_segments.rb +2 -0
  31. data/lib/braze_ruby/rest/schedule_messages.rb +2 -0
  32. data/lib/braze_ruby/rest/send_messages.rb +2 -0
  33. data/lib/braze_ruby/rest/subscription_status_get.rb +22 -0
  34. data/lib/braze_ruby/rest/subscription_status_set.rb +22 -0
  35. data/lib/braze_ruby/rest/subscription_user_status.rb +22 -0
  36. data/lib/braze_ruby/rest/track_users.rb +2 -0
  37. data/lib/braze_ruby/rest/trigger_campaign_send.rb +2 -0
  38. data/lib/braze_ruby/rest/trigger_canvas_send.rb +2 -0
  39. data/lib/braze_ruby/version.rb +3 -1
  40. data/spec/braze_ruby/api_spec.rb +2 -0
  41. data/spec/braze_ruby/endpoints/delete_users_spec.rb +2 -0
  42. data/spec/braze_ruby/endpoints/track_users_spec.rb +2 -0
  43. data/spec/braze_ruby/rest/delete_users_spec.rb +2 -0
  44. data/spec/braze_ruby/rest/email_status_spec.rb +2 -0
  45. data/spec/braze_ruby/rest/export_users_spec.rb +2 -0
  46. data/spec/braze_ruby/rest/schedule_messages_spec.rb +2 -0
  47. data/spec/braze_ruby/rest/send_messages_spec.rb +2 -0
  48. data/spec/braze_ruby/rest/track_users_spec.rb +2 -0
  49. data/spec/factories.rb +2 -0
  50. data/spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml +67 -0
  51. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml +69 -0
  52. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml +66 -0
  53. data/spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml +135 -0
  54. 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 +205 -0
  55. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml +193 -0
  56. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml +207 -0
  57. data/spec/integrations/campaigns_spec.rb +2 -0
  58. data/spec/integrations/canvas_spec.rb +11 -0
  59. data/spec/integrations/delete_users_spec.rb +2 -0
  60. data/spec/integrations/email_status_spec.rb +2 -0
  61. data/spec/integrations/email_sync_spec.rb +2 -0
  62. data/spec/integrations/export_users_spec.rb +2 -0
  63. data/spec/integrations/list_segments_spec.rb +2 -0
  64. data/spec/integrations/schedule_messages_spec.rb +2 -0
  65. data/spec/integrations/send_messages_spec.rb +2 -0
  66. data/spec/integrations/subscription_spec.rb +149 -0
  67. data/spec/integrations/track_users_spec.rb +2 -0
  68. data/spec/spec_helper.rb +2 -0
  69. data/spec/support/factory_bot.rb +2 -0
  70. data/spec/support/integrations.rb +2 -0
  71. data/spec/support/vcr.rb +2 -0
  72. metadata +56 -35
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'list segments' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'schedule messages' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'send messages' do
@@ -0,0 +1,149 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe 'subscription', vcr: true do
6
+ let(:subscription_group_id) { '0201b87a-ef6e-4410-9412-a298c4c1206d' }
7
+ let(:subscribed_user) { 'test-gem-001' }
8
+ let(:unsubscribed_user) { 'test-gem-002' }
9
+ let(:never_subscribed_user) { 'test-gem-003' }
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-gem-001' => 'Subscribed',
87
+ 'test-gem-002' => 'Unsubscribed',
88
+ 'test-gem-003' => '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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'track users' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/setup'
2
4
  require 'pry'
3
5
  require 'dotenv'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'factory_bot'
2
4
 
3
5
  RSpec.configure do |config|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Integrations
2
4
  def api_key
3
5
  braze_rest_api_key
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'vcr'
2
4
 
3
5
  VCR.configure do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: braze_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Nussbaum
@@ -10,22 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-09-25 00:00:00.000000000 Z
13
+ date: 2019-11-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: faraday
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ">="
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 0.17.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ">="
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '0'
28
+ version: 0.17.1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -44,100 +44,100 @@ dependencies:
44
44
  name: rake
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ">="
47
+ - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0'
49
+ version: 12.3.3
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ">="
54
+ - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0'
56
+ version: 12.3.3
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rspec
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - ">="
61
+ - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: '0'
63
+ version: 3.8.0
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - ">="
68
+ - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: '0'
70
+ version: 3.8.0
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: dotenv
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ">="
75
+ - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 2.7.5
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ">="
82
+ - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: '0'
84
+ version: 2.7.5
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: vcr
87
87
  requirement: !ruby/object:Gem::Requirement
88
88
  requirements:
89
- - - ">="
89
+ - - "~>"
90
90
  - !ruby/object:Gem::Version
91
- version: '0'
91
+ version: 5.0.0
92
92
  type: :development
93
93
  prerelease: false
94
94
  version_requirements: !ruby/object:Gem::Requirement
95
95
  requirements:
96
- - - ">="
96
+ - - "~>"
97
97
  - !ruby/object:Gem::Version
98
- version: '0'
98
+ version: 5.0.0
99
99
  - !ruby/object:Gem::Dependency
100
100
  name: webmock
101
101
  requirement: !ruby/object:Gem::Requirement
102
102
  requirements:
103
- - - ">="
103
+ - - "~>"
104
104
  - !ruby/object:Gem::Version
105
- version: '0'
105
+ version: 3.7.5
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
- - - ">="
110
+ - - "~>"
111
111
  - !ruby/object:Gem::Version
112
- version: '0'
112
+ version: 3.7.5
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: pry
115
115
  requirement: !ruby/object:Gem::Requirement
116
116
  requirements:
117
- - - ">="
117
+ - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '0'
119
+ version: 0.12.2
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
- - - ">="
124
+ - - "~>"
125
125
  - !ruby/object:Gem::Version
126
- version: '0'
126
+ version: 0.12.2
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: factory_bot
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  requirements:
131
- - - ">="
131
+ - - "~>"
132
132
  - !ruby/object:Gem::Version
133
- version: '0'
133
+ version: 5.1.0
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
- - - ">="
138
+ - - "~>"
139
139
  - !ruby/object:Gem::Version
140
- version: '0'
140
+ version: 5.1.0
141
141
  description: Braze wrapper
142
142
  email:
143
143
  - josh@godynamo.com
@@ -167,10 +167,12 @@ files:
167
167
  - lib/braze_ruby/endpoints/email_sync.rb
168
168
  - lib/braze_ruby/endpoints/schedule_messages.rb
169
169
  - lib/braze_ruby/endpoints/send_messages.rb
170
+ - lib/braze_ruby/endpoints/subscription.rb
170
171
  - lib/braze_ruby/endpoints/track_users.rb
171
172
  - lib/braze_ruby/http.rb
172
173
  - lib/braze_ruby/rest.rb
173
174
  - lib/braze_ruby/rest/base.rb
175
+ - lib/braze_ruby/rest/canvas_details.rb
174
176
  - lib/braze_ruby/rest/delete_users.rb
175
177
  - lib/braze_ruby/rest/email_hard_bounces.rb
176
178
  - lib/braze_ruby/rest/email_status.rb
@@ -179,6 +181,9 @@ files:
179
181
  - lib/braze_ruby/rest/list_segments.rb
180
182
  - lib/braze_ruby/rest/schedule_messages.rb
181
183
  - lib/braze_ruby/rest/send_messages.rb
184
+ - lib/braze_ruby/rest/subscription_status_get.rb
185
+ - lib/braze_ruby/rest/subscription_status_set.rb
186
+ - lib/braze_ruby/rest/subscription_user_status.rb
182
187
  - lib/braze_ruby/rest/track_users.rb
183
188
  - lib/braze_ruby/rest/trigger_campaign_send.rb
184
189
  - lib/braze_ruby/rest/trigger_canvas_send.rb
@@ -194,6 +199,7 @@ files:
194
199
  - spec/braze_ruby/rest/track_users_spec.rb
195
200
  - spec/factories.rb
196
201
  - spec/fixtures/responses/campaigns/trigger_send/sends_an_email.yml
202
+ - spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml
197
203
  - spec/fixtures/responses/canvas/trigger_send/sends_a_canvas.yml
198
204
  - spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml
199
205
  - spec/fixtures/responses/delete_users/with_success/responds_with_created.yml
@@ -215,6 +221,12 @@ files:
215
221
  - spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml
216
222
  - spec/fixtures/responses/send_messages/with_success/responds_with_created.yml
217
223
  - spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml
224
+ - spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml
225
+ - spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml
226
+ - spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml
227
+ - 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
228
+ - spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml
229
+ - spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml
218
230
  - spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml
219
231
  - spec/fixtures/responses/track_users/with_success/responds_with_created.yml
220
232
  - spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml
@@ -227,6 +239,7 @@ files:
227
239
  - spec/integrations/list_segments_spec.rb
228
240
  - spec/integrations/schedule_messages_spec.rb
229
241
  - spec/integrations/send_messages_spec.rb
242
+ - spec/integrations/subscription_spec.rb
230
243
  - spec/integrations/track_users_spec.rb
231
244
  - spec/spec_helper.rb
232
245
  - spec/support/factory_bot.rb
@@ -253,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
253
266
  - !ruby/object:Gem::Version
254
267
  version: '0'
255
268
  requirements: []
256
- rubygems_version: 3.0.6
269
+ rubygems_version: 3.0.1
257
270
  signing_key:
258
271
  specification_version: 4
259
272
  summary: A wrapper for the Braze REST API forked from the appboy gem, track users/events/purchases,
@@ -270,6 +283,7 @@ test_files:
270
283
  - spec/braze_ruby/rest/track_users_spec.rb
271
284
  - spec/factories.rb
272
285
  - spec/fixtures/responses/campaigns/trigger_send/sends_an_email.yml
286
+ - spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml
273
287
  - spec/fixtures/responses/canvas/trigger_send/sends_a_canvas.yml
274
288
  - spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml
275
289
  - spec/fixtures/responses/delete_users/with_success/responds_with_created.yml
@@ -291,6 +305,12 @@ test_files:
291
305
  - spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml
292
306
  - spec/fixtures/responses/send_messages/with_success/responds_with_created.yml
293
307
  - spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml
308
+ - spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml
309
+ - spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml
310
+ - spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml
311
+ - 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
312
+ - spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml
313
+ - spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml
294
314
  - spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml
295
315
  - spec/fixtures/responses/track_users/with_success/responds_with_created.yml
296
316
  - spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml
@@ -303,6 +323,7 @@ test_files:
303
323
  - spec/integrations/list_segments_spec.rb
304
324
  - spec/integrations/schedule_messages_spec.rb
305
325
  - spec/integrations/send_messages_spec.rb
326
+ - spec/integrations/subscription_spec.rb
306
327
  - spec/integrations/track_users_spec.rb
307
328
  - spec/spec_helper.rb
308
329
  - spec/support/factory_bot.rb