braze_ruby 0.0.2 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/Gemfile.lock +79 -0
- data/Rakefile +4 -0
- data/braze_ruby.gemspec +2 -4
- data/lib/braze_ruby.rb +0 -2
- data/lib/braze_ruby/api.rb +2 -0
- data/lib/braze_ruby/endpoints.rb +1 -0
- data/lib/braze_ruby/endpoints/email_sync.rb +13 -0
- data/lib/braze_ruby/rest.rb +2 -0
- data/lib/braze_ruby/rest/email_hard_bounces.rb +20 -0
- data/lib/braze_ruby/rest/email_unsubscribes.rb +20 -0
- data/lib/braze_ruby/version.rb +1 -1
- data/spec/braze_ruby/endpoints/delete_users_spec.rb +29 -0
- data/spec/braze_ruby/rest/delete_users_spec.rb +20 -0
- data/spec/factories.rb +11 -11
- data/spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml +66 -0
- data/spec/fixtures/responses/delete_users/with_success/responds_with_created.yml +69 -0
- data/spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml +69 -0
- data/spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml +71 -0
- data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml +71 -0
- data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml +72 -0
- data/spec/integrations/delete_users_spec.rb +29 -0
- data/spec/integrations/email_sync_spec.rb +29 -0
- data/spec/spec_helper.rb +6 -4
- data/spec/support/factory_bot.rb +1 -1
- data/spec/support/integrations.rb +11 -10
- data/spec/support/vcr.rb +2 -2
- metadata +30 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 04567c2148da9db982023a103156347777831203d442829a8b7b24f25df2f3b6
|
4
|
+
data.tar.gz: f6e48e092c5edb9d11d5e4a962c5cd181eeb108eb297f4321086943d890a96ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24284d239f84699ac674e0becb5c7e1b5207c7e7f4954f06a1d4aa8f40cf54842e074aae97f595a3a5918f6aa06c4bade387e67efc08951e0e8a9221bdedaea4
|
7
|
+
data.tar.gz: 0fd11acad7ed6ad7e4940336bbb82556d0cf2a91c2532a73f7e41e07e01fb89591d10670a82c757c0f5f55b93fdadd22271d3bf8dc433b1135eb6f9a9b69911b
|
data/.gitignore
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
braze_ruby (0.1.0)
|
5
|
+
faraday
|
6
|
+
faraday_middleware
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activesupport (5.2.3)
|
12
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
+
i18n (>= 0.7, < 2)
|
14
|
+
minitest (~> 5.1)
|
15
|
+
tzinfo (~> 1.1)
|
16
|
+
addressable (2.6.0)
|
17
|
+
public_suffix (>= 2.0.2, < 4.0)
|
18
|
+
coderay (1.1.2)
|
19
|
+
concurrent-ruby (1.1.5)
|
20
|
+
crack (0.4.3)
|
21
|
+
safe_yaml (~> 1.0.0)
|
22
|
+
diff-lcs (1.3)
|
23
|
+
dotenv (2.7.2)
|
24
|
+
factory_bot (5.0.2)
|
25
|
+
activesupport (>= 4.2.0)
|
26
|
+
faraday (0.15.4)
|
27
|
+
multipart-post (>= 1.2, < 3)
|
28
|
+
faraday_middleware (0.13.1)
|
29
|
+
faraday (>= 0.7.4, < 1.0)
|
30
|
+
hashdiff (0.3.8)
|
31
|
+
i18n (1.6.0)
|
32
|
+
concurrent-ruby (~> 1.0)
|
33
|
+
method_source (0.9.2)
|
34
|
+
minitest (5.11.3)
|
35
|
+
multipart-post (2.0.0)
|
36
|
+
pry (0.12.2)
|
37
|
+
coderay (~> 1.1.0)
|
38
|
+
method_source (~> 0.9.0)
|
39
|
+
public_suffix (3.0.3)
|
40
|
+
rake (12.3.2)
|
41
|
+
rspec (3.8.0)
|
42
|
+
rspec-core (~> 3.8.0)
|
43
|
+
rspec-expectations (~> 3.8.0)
|
44
|
+
rspec-mocks (~> 3.8.0)
|
45
|
+
rspec-core (3.8.0)
|
46
|
+
rspec-support (~> 3.8.0)
|
47
|
+
rspec-expectations (3.8.2)
|
48
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
+
rspec-support (~> 3.8.0)
|
50
|
+
rspec-mocks (3.8.0)
|
51
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
52
|
+
rspec-support (~> 3.8.0)
|
53
|
+
rspec-support (3.8.0)
|
54
|
+
safe_yaml (1.0.5)
|
55
|
+
thread_safe (0.3.6)
|
56
|
+
tzinfo (1.2.5)
|
57
|
+
thread_safe (~> 0.1)
|
58
|
+
vcr (4.0.0)
|
59
|
+
webmock (3.5.1)
|
60
|
+
addressable (>= 2.3.6)
|
61
|
+
crack (>= 0.3.2)
|
62
|
+
hashdiff
|
63
|
+
|
64
|
+
PLATFORMS
|
65
|
+
ruby
|
66
|
+
|
67
|
+
DEPENDENCIES
|
68
|
+
braze_ruby!
|
69
|
+
bundler (>= 1.3)
|
70
|
+
dotenv
|
71
|
+
factory_bot
|
72
|
+
pry
|
73
|
+
rake
|
74
|
+
rspec
|
75
|
+
vcr
|
76
|
+
webmock
|
77
|
+
|
78
|
+
BUNDLED WITH
|
79
|
+
2.0.1
|
data/Rakefile
CHANGED
data/braze_ruby.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = %w(josh@godynamo.com hugo@godynamo.com justin.boltz@takl.com)
|
11
11
|
spec.description = %q{Braze wrapper}
|
12
12
|
spec.summary = %q{A wrapper for the Braze REST API forked from the appboy gem, track users/events/purchases, send & schedule messages}
|
13
|
-
spec.homepage = '
|
13
|
+
spec.homepage = 'https://www.braze.com/'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -18,16 +18,14 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'virtus'
|
22
21
|
spec.add_dependency 'faraday'
|
23
22
|
spec.add_dependency 'faraday_middleware'
|
24
|
-
spec.add_development_dependency 'bundler', '
|
23
|
+
spec.add_development_dependency 'bundler', '>= 1.3'
|
25
24
|
spec.add_development_dependency 'rake'
|
26
25
|
spec.add_development_dependency 'rspec'
|
27
26
|
spec.add_development_dependency 'dotenv'
|
28
27
|
spec.add_development_dependency 'vcr'
|
29
28
|
spec.add_development_dependency 'webmock'
|
30
29
|
spec.add_development_dependency 'pry'
|
31
|
-
spec.add_development_dependency 'activesupport'
|
32
30
|
spec.add_development_dependency 'factory_bot'
|
33
31
|
end
|
data/lib/braze_ruby.rb
CHANGED
data/lib/braze_ruby/api.rb
CHANGED
@@ -3,6 +3,7 @@ require 'braze_ruby/endpoints/track_users'
|
|
3
3
|
require 'braze_ruby/endpoints/send_messages'
|
4
4
|
require 'braze_ruby/endpoints/schedule_messages'
|
5
5
|
require 'braze_ruby/endpoints/email_status'
|
6
|
+
require 'braze_ruby/endpoints/email_sync'
|
6
7
|
require 'braze_ruby/endpoints/delete_users'
|
7
8
|
|
8
9
|
module BrazeRuby
|
@@ -13,6 +14,7 @@ module BrazeRuby
|
|
13
14
|
include BrazeRuby::Endpoints::SendMessages
|
14
15
|
include BrazeRuby::Endpoints::ScheduleMessages
|
15
16
|
include BrazeRuby::Endpoints::EmailStatus
|
17
|
+
include BrazeRuby::Endpoints::EmailSync
|
16
18
|
include BrazeRuby::Endpoints::DeleteUsers
|
17
19
|
|
18
20
|
def export_users(**payload)
|
data/lib/braze_ruby/endpoints.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
module BrazeRuby
|
2
|
+
module Endpoints
|
3
|
+
module EmailSync
|
4
|
+
def email_unsubscribes(**payload)
|
5
|
+
BrazeRuby::REST::EmailUnsubscribes.new(api_key, braze_url, payload).perform
|
6
|
+
end
|
7
|
+
|
8
|
+
def email_hard_bounces(**payload)
|
9
|
+
BrazeRuby::REST::EmailHardBounces.new(api_key, braze_url, payload).perform
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/braze_ruby/rest.rb
CHANGED
@@ -3,6 +3,8 @@ require 'braze_ruby/rest/track_users'
|
|
3
3
|
require 'braze_ruby/rest/send_messages'
|
4
4
|
require 'braze_ruby/rest/schedule_messages'
|
5
5
|
require 'braze_ruby/rest/email_status'
|
6
|
+
require 'braze_ruby/rest/email_hard_bounces'
|
7
|
+
require 'braze_ruby/rest/email_unsubscribes'
|
6
8
|
require 'braze_ruby/rest/export_users'
|
7
9
|
require 'braze_ruby/rest/list_segments'
|
8
10
|
require 'braze_ruby/rest/delete_users'
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module BrazeRuby
|
2
|
+
module REST
|
3
|
+
class EmailHardBounces < Base
|
4
|
+
attr_reader :api_key, :params
|
5
|
+
|
6
|
+
def initialize(api_key, braze_url, **params)
|
7
|
+
@api_key = api_key
|
8
|
+
@params = params
|
9
|
+
super braze_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def perform
|
13
|
+
http.get('/email/hard_bounces', {
|
14
|
+
'api_key': api_key,
|
15
|
+
**@params
|
16
|
+
})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module BrazeRuby
|
2
|
+
module REST
|
3
|
+
class EmailUnsubscribes < Base
|
4
|
+
attr_reader :api_key, :params
|
5
|
+
|
6
|
+
def initialize(api_key, braze_url, **params)
|
7
|
+
@api_key = api_key
|
8
|
+
@params = params
|
9
|
+
super braze_url
|
10
|
+
end
|
11
|
+
|
12
|
+
def perform
|
13
|
+
http.get('/email/unsubscribes', {
|
14
|
+
'api_key': api_key,
|
15
|
+
**params
|
16
|
+
})
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/braze_ruby/version.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class API
|
4
|
+
include BrazeRuby::Endpoints::DeleteUsers
|
5
|
+
|
6
|
+
def api_key
|
7
|
+
:api_key
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe BrazeRuby::Endpoints::DeleteUsers do
|
12
|
+
let(:api) { API.new }
|
13
|
+
let(:delete_users_service) { double(:delete_users_service) }
|
14
|
+
|
15
|
+
before { api.delete_users_service = delete_users_service }
|
16
|
+
|
17
|
+
describe '#delete_users' do
|
18
|
+
let(:payload) { [1, 2, 3] }
|
19
|
+
|
20
|
+
subject(:delete_users!) { api.delete_users(payload) }
|
21
|
+
|
22
|
+
it 'deletes users' do
|
23
|
+
expect(delete_users_service).to receive(:perform)
|
24
|
+
.with(:api_key, external_ids: payload)
|
25
|
+
|
26
|
+
delete_users!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe BrazeRuby::REST::DeleteUsers do
|
4
|
+
let(:http) { double(:http) }
|
5
|
+
|
6
|
+
let(:payload) { {external_ids: [1, 2, 3]} }
|
7
|
+
|
8
|
+
let(:api_key) { :api_key }
|
9
|
+
|
10
|
+
subject { described_class.new :rest_url}
|
11
|
+
|
12
|
+
before { subject.http = http }
|
13
|
+
|
14
|
+
it 'makes an http call to the delete user endpoint' do
|
15
|
+
expect(http).to receive(:post).with '/users/delete',
|
16
|
+
payload.merge({ api_key: :api_key })
|
17
|
+
|
18
|
+
subject.perform(api_key, payload)
|
19
|
+
end
|
20
|
+
end
|
data/spec/factories.rb
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
FactoryBot.define do
|
2
2
|
factory :attribute, class: Hash do
|
3
3
|
skip_create
|
4
|
-
external_id 1
|
5
|
-
foo :bar
|
4
|
+
external_id { 1 }
|
5
|
+
foo { :bar }
|
6
6
|
|
7
7
|
initialize_with { attributes }
|
8
8
|
end
|
9
9
|
|
10
10
|
factory :event, class: Hash do
|
11
11
|
skip_create
|
12
|
-
external_id 1
|
13
|
-
name :baz
|
14
|
-
time Time.now
|
12
|
+
external_id { 1 }
|
13
|
+
name { :baz }
|
14
|
+
time { Time.now }
|
15
15
|
|
16
16
|
initialize_with { attributes }
|
17
17
|
end
|
18
18
|
|
19
19
|
factory :purchase, class: Hash do
|
20
20
|
skip_create
|
21
|
-
external_id 1
|
22
|
-
product_id 1
|
23
|
-
time Time.now
|
24
|
-
currency 'CAD'
|
25
|
-
price 1.0
|
21
|
+
external_id { 1 }
|
22
|
+
product_id { 1 }
|
23
|
+
time { Time.now }
|
24
|
+
currency { 'CAD' }
|
25
|
+
price { 1.0 }
|
26
26
|
|
27
27
|
initialize_with { attributes }
|
28
28
|
end
|
29
29
|
|
30
30
|
factory :messages, class: Hash do
|
31
31
|
skip_create
|
32
|
-
apple_push
|
32
|
+
apple_push { {alert: :hello} }
|
33
33
|
|
34
34
|
initialize_with { attributes }
|
35
35
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: "<BRAZE_REST_URL>/users/delete"
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"api_key":"non-existent","external_ids":[400,401,402]}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.14.0
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 401
|
21
|
+
message: Unauthorized
|
22
|
+
headers:
|
23
|
+
Cache-Control:
|
24
|
+
- no-cache
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Server:
|
28
|
+
- nginx
|
29
|
+
Strict-Transport-Security:
|
30
|
+
- max-age=0; includeSubDomains
|
31
|
+
X-Ratelimit-Limit:
|
32
|
+
- ''
|
33
|
+
X-Ratelimit-Remaining:
|
34
|
+
- ''
|
35
|
+
X-Ratelimit-Reset:
|
36
|
+
- ''
|
37
|
+
X-Request-Id:
|
38
|
+
- bd4c1e19-8065-4db0-b5e5-aaafcb40ef9d
|
39
|
+
X-Runtime:
|
40
|
+
- '0.011342'
|
41
|
+
Content-Length:
|
42
|
+
- '85'
|
43
|
+
Accept-Ranges:
|
44
|
+
- bytes
|
45
|
+
Date:
|
46
|
+
- Fri, 18 May 2018 18:54:32 GMT
|
47
|
+
Via:
|
48
|
+
- 1.1 varnish
|
49
|
+
Connection:
|
50
|
+
- keep-alive
|
51
|
+
X-Served-By:
|
52
|
+
- cache-pdk17824-PDK
|
53
|
+
X-Cache:
|
54
|
+
- MISS
|
55
|
+
X-Cache-Hits:
|
56
|
+
- '0'
|
57
|
+
X-Timer:
|
58
|
+
- S1526669672.332248,VS0,VE196
|
59
|
+
Vary:
|
60
|
+
- Accept-Encoding
|
61
|
+
body:
|
62
|
+
encoding: ASCII-8BIT
|
63
|
+
string: '{"message":"Invalid App Group API Identifier: non-existent"}'
|
64
|
+
http_version:
|
65
|
+
recorded_at: Fri, 18 May 2018 18:54:14 GMT
|
66
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,69 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: "<BRAZE_REST_URL>/users/delete"
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"api_key":"<BRAZE_REST_API_KEY>","external_ids":[400,401,402]}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.14.0
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 201
|
21
|
+
message: Created
|
22
|
+
headers:
|
23
|
+
Cache-Control:
|
24
|
+
- max-age=0, private, must-revalidate
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Etag:
|
28
|
+
- W/"383e14c9bc8f36ee9f92221ad86557aa"
|
29
|
+
Server:
|
30
|
+
- nginx
|
31
|
+
Strict-Transport-Security:
|
32
|
+
- max-age=0; includeSubDomains
|
33
|
+
- max-age=31536000; includeSubDomains
|
34
|
+
X-Ratelimit-Limit:
|
35
|
+
- '50000'
|
36
|
+
X-Ratelimit-Remaining:
|
37
|
+
- '49988'
|
38
|
+
X-Ratelimit-Reset:
|
39
|
+
- '1526670000'
|
40
|
+
X-Request-Id:
|
41
|
+
- 3c706f21-aef5-4527-ab35-ded3437dbb58
|
42
|
+
X-Runtime:
|
43
|
+
- '0.019468'
|
44
|
+
Content-Length:
|
45
|
+
- '89'
|
46
|
+
Accept-Ranges:
|
47
|
+
- bytes
|
48
|
+
Date:
|
49
|
+
- Fri, 18 May 2018 18:54:31 GMT
|
50
|
+
Via:
|
51
|
+
- 1.1 varnish
|
52
|
+
Connection:
|
53
|
+
- keep-alive
|
54
|
+
X-Served-By:
|
55
|
+
- cache-atl6224-ATL
|
56
|
+
X-Cache:
|
57
|
+
- MISS
|
58
|
+
X-Cache-Hits:
|
59
|
+
- '0'
|
60
|
+
X-Timer:
|
61
|
+
- S1526669672.735390,VS0,VE223
|
62
|
+
Vary:
|
63
|
+
- Accept-Encoding
|
64
|
+
body:
|
65
|
+
encoding: ASCII-8BIT
|
66
|
+
string: '{"invalid_user_ids":[400,401,402],"deleted":3,"message":"success"}'
|
67
|
+
http_version:
|
68
|
+
recorded_at: Fri, 18 May 2018 18:54:13 GMT
|
69
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,69 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: "<BRAZE_REST_URL>/users/delete"
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"api_key":"<BRAZE_REST_API_KEY>","external_ids":[400,401,402]}'
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.14.0
|
12
|
+
Content-Type:
|
13
|
+
- application/json
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 201
|
21
|
+
message: Created
|
22
|
+
headers:
|
23
|
+
Cache-Control:
|
24
|
+
- max-age=0, private, must-revalidate
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Etag:
|
28
|
+
- W/"05c5a9339e57ae2f67e0aeb4404dbe22"
|
29
|
+
Server:
|
30
|
+
- nginx
|
31
|
+
Strict-Transport-Security:
|
32
|
+
- max-age=0; includeSubDomains
|
33
|
+
- max-age=31536000; includeSubDomains
|
34
|
+
X-Ratelimit-Limit:
|
35
|
+
- '50000'
|
36
|
+
X-Ratelimit-Remaining:
|
37
|
+
- '49987'
|
38
|
+
X-Ratelimit-Reset:
|
39
|
+
- '1526670000'
|
40
|
+
X-Request-Id:
|
41
|
+
- 51543cb0-651c-49ea-aaba-ca8350e763bd
|
42
|
+
X-Runtime:
|
43
|
+
- '0.011310'
|
44
|
+
Content-Length:
|
45
|
+
- '89'
|
46
|
+
Accept-Ranges:
|
47
|
+
- bytes
|
48
|
+
Date:
|
49
|
+
- Fri, 18 May 2018 18:54:32 GMT
|
50
|
+
Via:
|
51
|
+
- 1.1 varnish
|
52
|
+
Connection:
|
53
|
+
- keep-alive
|
54
|
+
X-Served-By:
|
55
|
+
- cache-atl6222-ATL
|
56
|
+
X-Cache:
|
57
|
+
- MISS
|
58
|
+
X-Cache-Hits:
|
59
|
+
- '0'
|
60
|
+
X-Timer:
|
61
|
+
- S1526669672.051288,VS0,VE215
|
62
|
+
Vary:
|
63
|
+
- Accept-Encoding
|
64
|
+
body:
|
65
|
+
encoding: ASCII-8BIT
|
66
|
+
string: '{"invalid_user_ids":[400,401,402],"deleted":0,"message":"success"}'
|
67
|
+
http_version:
|
68
|
+
recorded_at: Fri, 18 May 2018 18:54:14 GMT
|
69
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: "<BRAZE_REST_URL>/email/hard_bounces?api_key=<BRAZE_REST_API_KEY>&end_date=2019-02-25&start_date=2019-02-20"
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.15.4
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- max-age=0, private, must-revalidate
|
23
|
+
Content-Type:
|
24
|
+
- application/json
|
25
|
+
Etag:
|
26
|
+
- W/"b0a253ed9e9eda7c79a0df7a6f87381f"
|
27
|
+
Server:
|
28
|
+
- nginx
|
29
|
+
Strict-Transport-Security:
|
30
|
+
- max-age=0; includeSubDomains
|
31
|
+
- max-age=31536000; includeSubDomains
|
32
|
+
X-Ratelimit-Limit:
|
33
|
+
- '250000'
|
34
|
+
X-Ratelimit-Remaining:
|
35
|
+
- '249995'
|
36
|
+
X-Ratelimit-Reset:
|
37
|
+
- '1553594400'
|
38
|
+
X-Request-Id:
|
39
|
+
- 5dc096d8-4a70-4bf7-9ec6-b824f8fb67cc
|
40
|
+
X-Runtime:
|
41
|
+
- '0.094331'
|
42
|
+
Accept-Ranges:
|
43
|
+
- bytes
|
44
|
+
- bytes
|
45
|
+
Age:
|
46
|
+
- '0'
|
47
|
+
- '0'
|
48
|
+
Content-Length:
|
49
|
+
- '58'
|
50
|
+
Date:
|
51
|
+
- Tue, 26 Mar 2019 09:53:46 GMT
|
52
|
+
Via:
|
53
|
+
- 1.1 varnish
|
54
|
+
Connection:
|
55
|
+
- keep-alive
|
56
|
+
X-Served-By:
|
57
|
+
- cache-ams21041-AMS
|
58
|
+
X-Cache:
|
59
|
+
- MISS
|
60
|
+
X-Cache-Hits:
|
61
|
+
- '0'
|
62
|
+
X-Timer:
|
63
|
+
- S1553594027.657238,VS0,VE105
|
64
|
+
Vary:
|
65
|
+
- Accept-Encoding
|
66
|
+
body:
|
67
|
+
encoding: ASCII-8BIT
|
68
|
+
string: '{"emails":[],"message":"success"}'
|
69
|
+
http_version:
|
70
|
+
recorded_at: Tue, 26 Mar 2019 09:53:46 GMT
|
71
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,71 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: "<BRAZE_REST_URL>/email/unsubscribes?api_key=<BRAZE_REST_API_KEY>&end_date=2019-02-25&start_date=2019-02-20"
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.15.4
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- max-age=0, private, must-revalidate
|
23
|
+
Content-Type:
|
24
|
+
- application/json
|
25
|
+
Etag:
|
26
|
+
- W/"b0a253ed9e9eda7c79a0df7a6f87381f"
|
27
|
+
Server:
|
28
|
+
- nginx
|
29
|
+
Strict-Transport-Security:
|
30
|
+
- max-age=0; includeSubDomains
|
31
|
+
- max-age=31536000; includeSubDomains
|
32
|
+
X-Ratelimit-Limit:
|
33
|
+
- '250000'
|
34
|
+
X-Ratelimit-Remaining:
|
35
|
+
- '249996'
|
36
|
+
X-Ratelimit-Reset:
|
37
|
+
- '1553594400'
|
38
|
+
X-Request-Id:
|
39
|
+
- c3dec26e-ab23-4812-ad5d-0f817df5804d
|
40
|
+
X-Runtime:
|
41
|
+
- '0.112126'
|
42
|
+
Accept-Ranges:
|
43
|
+
- bytes
|
44
|
+
- bytes
|
45
|
+
Age:
|
46
|
+
- '0'
|
47
|
+
- '0'
|
48
|
+
Content-Length:
|
49
|
+
- '58'
|
50
|
+
Date:
|
51
|
+
- Tue, 26 Mar 2019 09:49:52 GMT
|
52
|
+
Via:
|
53
|
+
- 1.1 varnish
|
54
|
+
Connection:
|
55
|
+
- keep-alive
|
56
|
+
X-Served-By:
|
57
|
+
- cache-ams21023-AMS
|
58
|
+
X-Cache:
|
59
|
+
- MISS
|
60
|
+
X-Cache-Hits:
|
61
|
+
- '0'
|
62
|
+
X-Timer:
|
63
|
+
- S1553593792.986450,VS0,VE124
|
64
|
+
Vary:
|
65
|
+
- Accept-Encoding
|
66
|
+
body:
|
67
|
+
encoding: ASCII-8BIT
|
68
|
+
string: '{"emails":[],"message":"success"}'
|
69
|
+
http_version:
|
70
|
+
recorded_at: Tue, 26 Mar 2019 09:49:52 GMT
|
71
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,72 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: "<BRAZE_REST_URL>/email/unsubscribes?api_key=<BRAZE_REST_API_KEY>&end_date=2019-03-25&start_date=2019-03-20"
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Faraday v0.15.4
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
|
+
Accept:
|
15
|
+
- "*/*"
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Cache-Control:
|
22
|
+
- max-age=0, private, must-revalidate
|
23
|
+
Content-Type:
|
24
|
+
- application/json
|
25
|
+
Etag:
|
26
|
+
- W/"5eb0e9bcc8119b72a7bccb6a7195558f"
|
27
|
+
Server:
|
28
|
+
- nginx
|
29
|
+
Strict-Transport-Security:
|
30
|
+
- max-age=0; includeSubDomains
|
31
|
+
- max-age=31536000; includeSubDomains
|
32
|
+
X-Ratelimit-Limit:
|
33
|
+
- '250000'
|
34
|
+
X-Ratelimit-Remaining:
|
35
|
+
- '249997'
|
36
|
+
X-Ratelimit-Reset:
|
37
|
+
- '1553594400'
|
38
|
+
X-Request-Id:
|
39
|
+
- 40b96604-9ef6-4a50-a322-e0ddb27b9d57
|
40
|
+
X-Runtime:
|
41
|
+
- '0.221463'
|
42
|
+
Accept-Ranges:
|
43
|
+
- bytes
|
44
|
+
- bytes
|
45
|
+
Age:
|
46
|
+
- '0'
|
47
|
+
- '0'
|
48
|
+
Content-Length:
|
49
|
+
- '128'
|
50
|
+
Date:
|
51
|
+
- Tue, 26 Mar 2019 09:48:45 GMT
|
52
|
+
Via:
|
53
|
+
- 1.1 varnish
|
54
|
+
Connection:
|
55
|
+
- keep-alive
|
56
|
+
X-Served-By:
|
57
|
+
- cache-ams21030-AMS
|
58
|
+
X-Cache:
|
59
|
+
- MISS
|
60
|
+
X-Cache-Hits:
|
61
|
+
- '0'
|
62
|
+
X-Timer:
|
63
|
+
- S1553593725.060211,VS0,VE233
|
64
|
+
Vary:
|
65
|
+
- Accept-Encoding
|
66
|
+
body:
|
67
|
+
encoding: ASCII-8BIT
|
68
|
+
string: '{"emails":[{"email":"wojtek@test.com","unsubscribed_at":"2019-03-21
|
69
|
+
16:31:31 +0000"}],"message":"success"}'
|
70
|
+
http_version:
|
71
|
+
recorded_at: Tue, 26 Mar 2019 09:48:45 GMT
|
72
|
+
recorded_with: VCR 4.0.0
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'delete users' do
|
4
|
+
let(:external_ids) { [400, 401, 402] }
|
5
|
+
|
6
|
+
subject(:delete_users) do
|
7
|
+
api.delete_users(external_ids)
|
8
|
+
end
|
9
|
+
|
10
|
+
context 'with success', vcr: true do
|
11
|
+
it 'responds with created' do
|
12
|
+
expect(delete_users.status).to be 201
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'responds with success message' do
|
16
|
+
expect(JSON.parse(delete_users.body)).to include(
|
17
|
+
'message' => 'success'
|
18
|
+
)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'unauthorized', vcr: true do
|
23
|
+
let(:api_key) { 'non-existent' }
|
24
|
+
|
25
|
+
it 'responds with unauthorized' do
|
26
|
+
expect(delete_users.status).to be 401
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'email sync' do
|
4
|
+
describe 'unsubscribes' do
|
5
|
+
it 'responds with unsubscribed emails', vcr: true do
|
6
|
+
response = api.email_unsubscribes(start_date: '2019-03-20', end_date: '2019-03-25')
|
7
|
+
emails = JSON.parse(response.body)['emails']
|
8
|
+
|
9
|
+
expect(emails.size).to eq(1)
|
10
|
+
expect(emails.first['email']).to eq('wojtek@test.com')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'responds with empty array when no unsubscribes', vcr: true do
|
14
|
+
response = api.email_unsubscribes(start_date: '2019-02-20', end_date: '2019-02-25')
|
15
|
+
emails = JSON.parse(response.body)['emails']
|
16
|
+
|
17
|
+
expect(emails.size).to eq(0)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'hard_bounces' do
|
22
|
+
it 'responds with empty array when no hard bounces', vcr: true do
|
23
|
+
response = api.email_hard_bounces(start_date: '2019-02-20', end_date: '2019-02-25')
|
24
|
+
emails = JSON.parse(response.body)['emails']
|
25
|
+
|
26
|
+
expect(emails.size).to eq(0)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
+
require 'bundler/setup'
|
1
2
|
require 'pry'
|
2
3
|
require 'dotenv'
|
3
|
-
require 'bundler/setup'
|
4
4
|
|
5
|
-
Bundler.setup
|
6
5
|
Dotenv.load
|
7
6
|
|
8
7
|
require 'braze_ruby'
|
@@ -10,17 +9,20 @@ require 'support/vcr'
|
|
10
9
|
require 'support/factory_bot'
|
11
10
|
require 'support/integrations'
|
12
11
|
|
12
|
+
BRAZE_REST_API_KEY = ENV.fetch('BRAZE_REST_API_KEY', 'test')
|
13
|
+
BRAZE_REST_URL = ENV.fetch('BRAZE_REST_URL', 'https://rest.iad-03.braze.com')
|
14
|
+
|
13
15
|
RSpec.configure do |config|
|
14
16
|
def test_time
|
15
17
|
Time.parse('2019-02-15 00:00:00 -0500')
|
16
18
|
end
|
17
19
|
|
18
20
|
def braze_rest_api_key
|
19
|
-
|
21
|
+
BRAZE_REST_API_KEY
|
20
22
|
end
|
21
23
|
|
22
24
|
def braze_rest_url
|
23
|
-
|
25
|
+
BRAZE_REST_URL
|
24
26
|
end
|
25
27
|
|
26
28
|
def braze_test_segment
|
data/spec/support/factory_bot.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
|
3
1
|
module Integrations
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
let(:api_key) { braze_rest_api_key }
|
8
|
-
let(:rest_url) { braze_rest_url }
|
9
|
-
let(:segment_id) { braze_test_segment }
|
10
|
-
|
11
|
-
let(:api) { BrazeRuby::API.new(api_key, rest_url) }
|
2
|
+
def api_key
|
3
|
+
braze_rest_api_key
|
4
|
+
end
|
12
5
|
|
6
|
+
def rest_url
|
7
|
+
braze_rest_url
|
8
|
+
end
|
13
9
|
|
10
|
+
def segment_id
|
11
|
+
braze_test_segment
|
12
|
+
end
|
14
13
|
|
14
|
+
def api
|
15
|
+
BrazeRuby::API.new(api_key, rest_url)
|
15
16
|
end
|
16
17
|
|
17
18
|
RSpec.configure do |config|
|
data/spec/support/vcr.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'vcr'
|
2
2
|
|
3
3
|
VCR.configure do |config|
|
4
|
-
config.filter_sensitive_data('<BRAZE_REST_API_KEY>') {
|
5
|
-
config.filter_sensitive_data('<BRAZE_REST_URL>') {
|
4
|
+
config.filter_sensitive_data('<BRAZE_REST_API_KEY>') { BRAZE_REST_API_KEY }
|
5
|
+
config.filter_sensitive_data('<BRAZE_REST_URL>') { BRAZE_REST_URL }
|
6
6
|
|
7
7
|
config.cassette_library_dir = 'spec/fixtures/responses'
|
8
8
|
|
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.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Nussbaum
|
@@ -10,22 +10,8 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-04-04 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: virtus
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
requirements:
|
19
|
-
- - ">="
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: '0'
|
29
15
|
- !ruby/object:Gem::Dependency
|
30
16
|
name: faraday
|
31
17
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +44,14 @@ dependencies:
|
|
58
44
|
name: bundler
|
59
45
|
requirement: !ruby/object:Gem::Requirement
|
60
46
|
requirements:
|
61
|
-
- - "
|
47
|
+
- - ">="
|
62
48
|
- !ruby/object:Gem::Version
|
63
49
|
version: '1.3'
|
64
50
|
type: :development
|
65
51
|
prerelease: false
|
66
52
|
version_requirements: !ruby/object:Gem::Requirement
|
67
53
|
requirements:
|
68
|
-
- - "
|
54
|
+
- - ">="
|
69
55
|
- !ruby/object:Gem::Version
|
70
56
|
version: '1.3'
|
71
57
|
- !ruby/object:Gem::Dependency
|
@@ -152,20 +138,6 @@ dependencies:
|
|
152
138
|
- - ">="
|
153
139
|
- !ruby/object:Gem::Version
|
154
140
|
version: '0'
|
155
|
-
- !ruby/object:Gem::Dependency
|
156
|
-
name: activesupport
|
157
|
-
requirement: !ruby/object:Gem::Requirement
|
158
|
-
requirements:
|
159
|
-
- - ">="
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
version: '0'
|
162
|
-
type: :development
|
163
|
-
prerelease: false
|
164
|
-
version_requirements: !ruby/object:Gem::Requirement
|
165
|
-
requirements:
|
166
|
-
- - ">="
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: '0'
|
169
141
|
- !ruby/object:Gem::Dependency
|
170
142
|
name: factory_bot
|
171
143
|
requirement: !ruby/object:Gem::Requirement
|
@@ -192,6 +164,7 @@ files:
|
|
192
164
|
- ".gitignore"
|
193
165
|
- ".rspec"
|
194
166
|
- Gemfile
|
167
|
+
- Gemfile.lock
|
195
168
|
- LICENSE.txt
|
196
169
|
- README.md
|
197
170
|
- Rakefile
|
@@ -202,6 +175,7 @@ files:
|
|
202
175
|
- lib/braze_ruby/endpoints.rb
|
203
176
|
- lib/braze_ruby/endpoints/delete_users.rb
|
204
177
|
- lib/braze_ruby/endpoints/email_status.rb
|
178
|
+
- lib/braze_ruby/endpoints/email_sync.rb
|
205
179
|
- lib/braze_ruby/endpoints/schedule_messages.rb
|
206
180
|
- lib/braze_ruby/endpoints/send_messages.rb
|
207
181
|
- lib/braze_ruby/endpoints/track_users.rb
|
@@ -209,7 +183,9 @@ files:
|
|
209
183
|
- lib/braze_ruby/rest.rb
|
210
184
|
- lib/braze_ruby/rest/base.rb
|
211
185
|
- lib/braze_ruby/rest/delete_users.rb
|
186
|
+
- lib/braze_ruby/rest/email_hard_bounces.rb
|
212
187
|
- lib/braze_ruby/rest/email_status.rb
|
188
|
+
- lib/braze_ruby/rest/email_unsubscribes.rb
|
213
189
|
- lib/braze_ruby/rest/export_users.rb
|
214
190
|
- lib/braze_ruby/rest/list_segments.rb
|
215
191
|
- lib/braze_ruby/rest/schedule_messages.rb
|
@@ -217,17 +193,25 @@ files:
|
|
217
193
|
- lib/braze_ruby/rest/track_users.rb
|
218
194
|
- lib/braze_ruby/version.rb
|
219
195
|
- spec/braze_ruby/api_spec.rb
|
196
|
+
- spec/braze_ruby/endpoints/delete_users_spec.rb
|
220
197
|
- spec/braze_ruby/endpoints/track_users_spec.rb
|
198
|
+
- spec/braze_ruby/rest/delete_users_spec.rb
|
221
199
|
- spec/braze_ruby/rest/email_status_spec.rb
|
222
200
|
- spec/braze_ruby/rest/export_users_spec.rb
|
223
201
|
- spec/braze_ruby/rest/schedule_messages_spec.rb
|
224
202
|
- spec/braze_ruby/rest/send_messages_spec.rb
|
225
203
|
- spec/braze_ruby/rest/track_users_spec.rb
|
226
204
|
- spec/factories.rb
|
205
|
+
- spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml
|
206
|
+
- spec/fixtures/responses/delete_users/with_success/responds_with_created.yml
|
207
|
+
- spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml
|
227
208
|
- spec/fixtures/responses/email_status/existing_email/responds_with_created.yml
|
228
209
|
- spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml
|
229
210
|
- spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml
|
230
211
|
- spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml
|
212
|
+
- spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml
|
213
|
+
- spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml
|
214
|
+
- spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml
|
231
215
|
- spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml
|
232
216
|
- spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml
|
233
217
|
- spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml
|
@@ -241,7 +225,9 @@ files:
|
|
241
225
|
- spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml
|
242
226
|
- spec/fixtures/responses/track_users/with_success/responds_with_created.yml
|
243
227
|
- spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml
|
228
|
+
- spec/integrations/delete_users_spec.rb
|
244
229
|
- spec/integrations/email_status_spec.rb
|
230
|
+
- spec/integrations/email_sync_spec.rb
|
245
231
|
- spec/integrations/export_users_spec.rb
|
246
232
|
- spec/integrations/list_segments_spec.rb
|
247
233
|
- spec/integrations/schedule_messages_spec.rb
|
@@ -251,7 +237,7 @@ files:
|
|
251
237
|
- spec/support/factory_bot.rb
|
252
238
|
- spec/support/integrations.rb
|
253
239
|
- spec/support/vcr.rb
|
254
|
-
homepage:
|
240
|
+
homepage: https://www.braze.com/
|
255
241
|
licenses:
|
256
242
|
- MIT
|
257
243
|
metadata: {}
|
@@ -270,25 +256,32 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
256
|
- !ruby/object:Gem::Version
|
271
257
|
version: '0'
|
272
258
|
requirements: []
|
273
|
-
|
274
|
-
rubygems_version: 2.6.13
|
259
|
+
rubygems_version: 3.0.3
|
275
260
|
signing_key:
|
276
261
|
specification_version: 4
|
277
262
|
summary: A wrapper for the Braze REST API forked from the appboy gem, track users/events/purchases,
|
278
263
|
send & schedule messages
|
279
264
|
test_files:
|
280
265
|
- spec/braze_ruby/api_spec.rb
|
266
|
+
- spec/braze_ruby/endpoints/delete_users_spec.rb
|
281
267
|
- spec/braze_ruby/endpoints/track_users_spec.rb
|
268
|
+
- spec/braze_ruby/rest/delete_users_spec.rb
|
282
269
|
- spec/braze_ruby/rest/email_status_spec.rb
|
283
270
|
- spec/braze_ruby/rest/export_users_spec.rb
|
284
271
|
- spec/braze_ruby/rest/schedule_messages_spec.rb
|
285
272
|
- spec/braze_ruby/rest/send_messages_spec.rb
|
286
273
|
- spec/braze_ruby/rest/track_users_spec.rb
|
287
274
|
- spec/factories.rb
|
275
|
+
- spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml
|
276
|
+
- spec/fixtures/responses/delete_users/with_success/responds_with_created.yml
|
277
|
+
- spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml
|
288
278
|
- spec/fixtures/responses/email_status/existing_email/responds_with_created.yml
|
289
279
|
- spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml
|
290
280
|
- spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml
|
291
281
|
- spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml
|
282
|
+
- spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml
|
283
|
+
- spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml
|
284
|
+
- spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml
|
292
285
|
- spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml
|
293
286
|
- spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml
|
294
287
|
- spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml
|
@@ -302,7 +295,9 @@ test_files:
|
|
302
295
|
- spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml
|
303
296
|
- spec/fixtures/responses/track_users/with_success/responds_with_created.yml
|
304
297
|
- spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml
|
298
|
+
- spec/integrations/delete_users_spec.rb
|
305
299
|
- spec/integrations/email_status_spec.rb
|
300
|
+
- spec/integrations/email_sync_spec.rb
|
306
301
|
- spec/integrations/export_users_spec.rb
|
307
302
|
- spec/integrations/list_segments_spec.rb
|
308
303
|
- spec/integrations/schedule_messages_spec.rb
|