sift 4.3.0 → 4.4.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.
- checksums.yaml +4 -4
- data/.github/workflows/publishing_sift_ruby.yml +0 -12
- data/HISTORY +3 -0
- data/lib/sift/client.rb +17 -0
- data/lib/sift/version.rb +1 -1
- data/spec/unit/client_spec.rb +135 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ba7bb7dc985a6f320db6c39717c90e349a16306ec2b85f7a2ba28945c5e2f64
|
4
|
+
data.tar.gz: 8665633d78bb4c9502443f241943d4fb98015ede3060d233913169f5921d528b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75ce0e5c6631fbd4aa22ad72cb2ad9cebc0cf5ee0ec7e7de1dc308d9d90d3c1ef288a75a699ac0ef04ae650700a4a7b63ad1ece30d1386da0c06ceefcea10420
|
7
|
+
data.tar.gz: 3804c62aaf0795bfce7eadc4d048ae36d3a67a0d1dd9c81548d31926f950a5908a4fb158a8363182bb14ebb77545d3c671b37292802c093ea31719176683bb26
|
@@ -12,18 +12,14 @@ jobs:
|
|
12
12
|
steps:
|
13
13
|
- name: Checkout code
|
14
14
|
uses: actions/checkout@v3
|
15
|
-
|
16
|
-
|
17
15
|
- name: Set up Ruby
|
18
16
|
uses: ruby/setup-ruby@v1
|
19
17
|
with:
|
20
18
|
ruby-version: 2.7
|
21
|
-
|
22
19
|
- name: Install Bundler
|
23
20
|
run: |
|
24
21
|
sudo gem install bundler
|
25
22
|
bundle install
|
26
|
-
|
27
23
|
- name: Build and push gem
|
28
24
|
run: |
|
29
25
|
mkdir -p $HOME/.gem
|
@@ -37,14 +33,6 @@ jobs:
|
|
37
33
|
gem build sift.gemspec
|
38
34
|
gem push sift-$version.gem
|
39
35
|
rm -rf $HOME/.gem
|
40
|
-
ls -la $HOME/
|
41
36
|
else
|
42
37
|
echo "Gem version $version exists on RubyGems"
|
43
38
|
fi
|
44
|
-
|
45
|
-
- name: Run Rake tasks
|
46
|
-
run: |
|
47
|
-
bundle exec rake -T
|
48
|
-
bundle exec rake build
|
49
|
-
bundle exec rake install
|
50
|
-
bundle exec rake release
|
data/HISTORY
CHANGED
data/lib/sift/client.rb
CHANGED
@@ -201,6 +201,9 @@ module Sift
|
|
201
201
|
#
|
202
202
|
# :path::
|
203
203
|
# Overrides the URI path for this API call.
|
204
|
+
#
|
205
|
+
# :include_score_percentiles::
|
206
|
+
# include_score_percentiles(optional) : Whether to add new parameter in the query parameter.
|
204
207
|
#
|
205
208
|
# ==== Returns:
|
206
209
|
#
|
@@ -275,6 +278,9 @@ module Sift
|
|
275
278
|
#
|
276
279
|
# :version::
|
277
280
|
# Overrides the version of the Events API to call.
|
281
|
+
#
|
282
|
+
# :include_score_percentiles::
|
283
|
+
# include_score_percentiles(optional) : Whether to add new parameter in the query parameter.
|
278
284
|
#
|
279
285
|
# ==== Returns:
|
280
286
|
#
|
@@ -286,6 +292,7 @@ module Sift
|
|
286
292
|
api_key = opts[:api_key] || @api_key
|
287
293
|
timeout = opts[:timeout] || @timeout
|
288
294
|
version = opts[:version] || @version
|
295
|
+
include_score_percentiles = opts[:include_score_percentiles]
|
289
296
|
|
290
297
|
raise("user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty?
|
291
298
|
raise("Bad api_key parameter") if api_key.empty?
|
@@ -293,6 +300,9 @@ module Sift
|
|
293
300
|
query = {}
|
294
301
|
query["api_key"] = api_key
|
295
302
|
query["abuse_types"] = abuse_types.join(",") if abuse_types
|
303
|
+
if include_score_percentiles == "true"
|
304
|
+
query["fields"] = "SCORE_PERCENTILES"
|
305
|
+
end
|
296
306
|
|
297
307
|
options = {
|
298
308
|
:headers => {"User-Agent" => user_agent},
|
@@ -332,6 +342,9 @@ module Sift
|
|
332
342
|
#
|
333
343
|
# :timeout::
|
334
344
|
# Overrides the timeout (in seconds) for this call.
|
345
|
+
#
|
346
|
+
# :include_score_percentiles::
|
347
|
+
# include_score_percentiles(optional) : Whether to add new parameter in the query parameter.
|
335
348
|
#
|
336
349
|
# ==== Returns:
|
337
350
|
#
|
@@ -342,6 +355,7 @@ module Sift
|
|
342
355
|
abuse_types = opts[:abuse_types]
|
343
356
|
api_key = opts[:api_key] || @api_key
|
344
357
|
timeout = opts[:timeout] || @timeout
|
358
|
+
include_score_percentiles = opts[:include_score_percentiles]
|
345
359
|
|
346
360
|
raise("user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty?
|
347
361
|
raise("Bad api_key parameter") if api_key.empty?
|
@@ -349,6 +363,9 @@ module Sift
|
|
349
363
|
query = {}
|
350
364
|
query["api_key"] = api_key
|
351
365
|
query["abuse_types"] = abuse_types.join(",") if abuse_types
|
366
|
+
if include_score_percentiles == "true"
|
367
|
+
query["fields"] = "SCORE_PERCENTILES"
|
368
|
+
end
|
352
369
|
|
353
370
|
options = {
|
354
371
|
:headers => {"User-Agent" => user_agent},
|
data/lib/sift/version.rb
CHANGED
data/spec/unit/client_spec.rb
CHANGED
@@ -110,6 +110,60 @@ describe Sift::Client do
|
|
110
110
|
}
|
111
111
|
end
|
112
112
|
|
113
|
+
def percentile_response_json
|
114
|
+
{
|
115
|
+
:user_id => 'billy_jones_301',
|
116
|
+
:latest_labels => {},
|
117
|
+
:workflow_statuses => [],
|
118
|
+
:scores => {
|
119
|
+
:account_abuse => {
|
120
|
+
:score => 0.32787917675535705,
|
121
|
+
:reasons => [{
|
122
|
+
:name => 'Latest item product title',
|
123
|
+
:value => 'The Slanket Blanket-Texas Tea'
|
124
|
+
}],
|
125
|
+
:percentiles => {
|
126
|
+
:last_7_days => -1.0, :last_1_days => -1.0, :last_10_days => -1.0, :last_5_days => -1.0
|
127
|
+
}
|
128
|
+
},
|
129
|
+
:acontent_abuse => {
|
130
|
+
:score => 0.28056292905897995,
|
131
|
+
:reasons => [{
|
132
|
+
:name => 'timeSinceFirstEvent',
|
133
|
+
:value => '13.15 minutes'
|
134
|
+
}],
|
135
|
+
:percentiles => {
|
136
|
+
:last_7_days => -1.0, :last_1_days => -1.0, :last_10_days => -1.0, :last_5_days => -1.0
|
137
|
+
}
|
138
|
+
},
|
139
|
+
:payment_abuse => {
|
140
|
+
:score => 0.28610507028376797,
|
141
|
+
:reasons => [{
|
142
|
+
:name => 'Latest item currency code',
|
143
|
+
:value => 'USD'
|
144
|
+
}, {
|
145
|
+
:name => 'Latest item item ID',
|
146
|
+
:value => 'B004834GQO'
|
147
|
+
}, {
|
148
|
+
:name => 'Latest item product title',
|
149
|
+
:value => 'The Slanket Blanket-Texas Tea'
|
150
|
+
}],
|
151
|
+
:percentiles => {
|
152
|
+
:last_7_days => -1.0, :last_1_days => -1.0, :last_10_days => -1.0, :last_5_days => -1.0
|
153
|
+
}
|
154
|
+
},
|
155
|
+
:promotion_abuse => {
|
156
|
+
:score => 0.05731508921450917,
|
157
|
+
:percentiles => {
|
158
|
+
:last_7_days => -1.0, :last_1_days => -1.0, :last_10_days => -1.0, :last_5_days => -1.0
|
159
|
+
}
|
160
|
+
}
|
161
|
+
},
|
162
|
+
:status => 0,
|
163
|
+
:error_message => 'OK'
|
164
|
+
}
|
165
|
+
end
|
166
|
+
|
113
167
|
def fully_qualified_api_endpoint
|
114
168
|
Sift::Client::API_ENDPOINT + Sift.rest_api_path
|
115
169
|
end
|
@@ -554,4 +608,85 @@ describe Sift::Client do
|
|
554
608
|
expect(response.body["decisions"]["content_abuse"]["decision"]["id"]).to eq("decision7")
|
555
609
|
end
|
556
610
|
|
611
|
+
it "Successfully submits a v205 event with SCORE_PERCENTILES" do
|
612
|
+
response_json =
|
613
|
+
{ :status => 0, :error_message => "OK", :score_response => percentile_response_json}
|
614
|
+
stub_request(:post, "https://api.siftscience.com/v205/events?fields=SCORE_PERCENTILES&return_score=true").
|
615
|
+
with { | request|
|
616
|
+
parsed_body = JSON.parse(request.body)
|
617
|
+
expect(parsed_body).to include("$api_key" => "overridden")
|
618
|
+
}.to_return(:status => 200, :body => MultiJson.dump(response_json), :headers => {})
|
619
|
+
|
620
|
+
api_key = "foobar"
|
621
|
+
event = "$transaction"
|
622
|
+
properties = valid_transaction_properties
|
623
|
+
|
624
|
+
response = Sift::Client.new(:api_key => api_key, :version => "205")
|
625
|
+
.track(event, properties, :api_key => "overridden", :include_score_percentiles => "true", :return_score => "true")
|
626
|
+
expect(response.ok?).to eq(true)
|
627
|
+
expect(response.api_status).to eq(0)
|
628
|
+
expect(response.api_error_message).to eq("OK")
|
629
|
+
expect(response.body["score_response"]["scores"]["account_abuse"]["percentiles"]["last_7_days"]).to eq(-1.0)
|
630
|
+
end
|
631
|
+
|
632
|
+
it "Successfully submits a v205 event with SCORE_PERCENTILES" do
|
633
|
+
response_json =
|
634
|
+
{ :status => 0, :error_message => "OK", :score_response => percentile_response_json}
|
635
|
+
stub_request(:post, "https://api.siftscience.com/v205/events?fields=SCORE_PERCENTILES&return_score=true").
|
636
|
+
with { | request|
|
637
|
+
parsed_body = JSON.parse(request.body)
|
638
|
+
expect(parsed_body).to include("$api_key" => "overridden")
|
639
|
+
}.to_return(:status => 200, :body => MultiJson.dump(response_json), :headers => {})
|
640
|
+
|
641
|
+
api_key = "foobar"
|
642
|
+
event = "$transaction"
|
643
|
+
properties = valid_transaction_properties
|
644
|
+
|
645
|
+
response = Sift::Client.new(:api_key => api_key, :version => "205")
|
646
|
+
.track(event, properties, :api_key => "overridden", :include_score_percentiles => "true", :return_score => "true")
|
647
|
+
expect(response.ok?).to eq(true)
|
648
|
+
expect(response.api_status).to eq(0)
|
649
|
+
expect(response.api_error_message).to eq("OK")
|
650
|
+
expect(response.body["score_response"]["scores"]["account_abuse"]["percentiles"]["last_7_days"]).to eq(-1.0)
|
651
|
+
end
|
652
|
+
|
653
|
+
it "Successfully fetches a v205 score with SCORE_PERCENTILES" do
|
654
|
+
|
655
|
+
api_key = "foobar"
|
656
|
+
response_json = score_response_json
|
657
|
+
|
658
|
+
stub_request(:get, "https://api.siftscience.com/v205/score/247019/?api_key=foobar&fields=SCORE_PERCENTILES")
|
659
|
+
.to_return(:status => 200, :body => MultiJson.dump(response_json),
|
660
|
+
:headers => {"content-type"=>"application/json; charset=UTF-8",
|
661
|
+
"content-length"=> "74"})
|
662
|
+
|
663
|
+
response = Sift::Client.new(:api_key => api_key)
|
664
|
+
.score(score_response_json[:user_id], :version => 205, :include_score_percentiles => "true")
|
665
|
+
expect(response.ok?).to eq(true)
|
666
|
+
expect(response.api_status).to eq(0)
|
667
|
+
expect(response.api_error_message).to eq("OK")
|
668
|
+
|
669
|
+
expect(response.body["score"]).to eq(0.93)
|
670
|
+
end
|
671
|
+
|
672
|
+
it "Successfully executes client.get_user_score() with SCORE_PERCENTILES" do
|
673
|
+
|
674
|
+
api_key = "foobar"
|
675
|
+
response_json = user_score_response_json
|
676
|
+
|
677
|
+
stub_request(:get, "https://api.siftscience.com/v205/users/247019/score?api_key=foobar&fields=SCORE_PERCENTILES")
|
678
|
+
.to_return(:status => 200, :body => MultiJson.dump(response_json),
|
679
|
+
:headers => {"content-type"=>"application/json; charset=UTF-8",
|
680
|
+
"content-length"=> "74"})
|
681
|
+
|
682
|
+
response = Sift::Client.new(:api_key => api_key)
|
683
|
+
.get_user_score(user_score_response_json[:entity_id], :include_score_percentiles => "true")
|
684
|
+
expect(response.ok?).to eq(true)
|
685
|
+
expect(response.api_status).to eq(0)
|
686
|
+
expect(response.api_error_message).to eq("OK")
|
687
|
+
|
688
|
+
expect(response.body["entity_id"]).to eq("247019")
|
689
|
+
expect(response.body["scores"]["payment_abuse"]["score"]).to eq(0.78)
|
690
|
+
end
|
691
|
+
|
557
692
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Sadaghiani
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2023-
|
13
|
+
date: 2023-10-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|