sift 1.1.6.0 → 1.1.6.2
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 +8 -8
- data/lib/sift/client.rb +10 -8
- data/lib/sift/version.rb +1 -1
- data/spec/unit/client_spec.rb +38 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzdkOThmNmZiYWRmMDI3ODgyYjI4MjYyMjc2ZDg1YjhkOTdlNGU0MQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
N2RiZGI4ZTFlZWI1YjBkNDQ1MDQyM2MxYTNmMDNlMzUxZjMyZDM1OA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
M2YzZTYyZmJhMzBjMDVmZmJiNWM5N2ZmNmJmNjkzOTMzN2ExODIxMTIwOGRh
|
10
|
+
OTBmYThlZDA1ZDVmMDYzZTI4MjIxZDcxYTFjYjZhMzc0MzlkYjk1ZThhZTMy
|
11
|
+
YjhlNGUwMzEwOTI2MjhlNGI5ODYwZTJmYmRkNGI4YzlkM2IzYTE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NGVjMmZjYTJiOWI0NDA4N2Y5NjU3NGNkNDk1NTNjMDdhZGQ3NGZmNDEwNTYw
|
14
|
+
MTVmZGQ5ZDQ4NTY4ZmEyMTkwNjYwZDFhMTBmZDgwNDNiYWVjMWUyZWE0OTk1
|
15
|
+
NThlNTY5N2M2ZDAyZTBkMWI5Mjg4YzVhMmM2M2MyZDU5YjU1MDE=
|
data/lib/sift/client.rb
CHANGED
@@ -76,7 +76,7 @@ module Sift
|
|
76
76
|
@path = path
|
77
77
|
@timeout = timeout
|
78
78
|
|
79
|
-
|
79
|
+
|
80
80
|
end
|
81
81
|
|
82
82
|
def api_key
|
@@ -108,7 +108,7 @@ module Sift
|
|
108
108
|
# Overrides the default API path with a different URL.
|
109
109
|
#
|
110
110
|
# return_score (optional)
|
111
|
-
# Whether the API response should include a score for this user (the score will
|
111
|
+
# Whether the API response should include a score for this user (the score will
|
112
112
|
# be calculated using the submitted event
|
113
113
|
#
|
114
114
|
# == Returns:
|
@@ -117,9 +117,10 @@ module Sift
|
|
117
117
|
# the status message and status code. In general, you can ignore the returned
|
118
118
|
# result, though.
|
119
119
|
#
|
120
|
-
def track(event, properties = {}, timeout = nil, path = nil, return_score = false)
|
120
|
+
def track(event, properties = {}, timeout = nil, path = nil, return_score = false, api_key = @api_key)
|
121
121
|
raise(RuntimeError, "event must be a non-empty string") if (!event.is_a? String) || event.empty?
|
122
122
|
raise(RuntimeError, "properties cannot be empty") if properties.empty?
|
123
|
+
raise(RuntimeError, "Bad api_key parameter") if api_key.empty?
|
123
124
|
path ||= @path
|
124
125
|
timeout ||= @timeout
|
125
126
|
if return_score
|
@@ -127,7 +128,7 @@ module Sift
|
|
127
128
|
end
|
128
129
|
options = {
|
129
130
|
:body => MultiJson.dump(delete_nils(properties).merge({"$type" => event,
|
130
|
-
"$api_key" =>
|
131
|
+
"$api_key" => api_key})),
|
131
132
|
:headers => {"User-Agent" => user_agent}
|
132
133
|
}
|
133
134
|
options.merge!(:timeout => timeout) unless timeout.nil?
|
@@ -153,15 +154,16 @@ module Sift
|
|
153
154
|
# A Response object is returned and captures the status message and
|
154
155
|
# status code. In general, you can ignore the returned result, though.
|
155
156
|
#
|
156
|
-
def score(user_id, timeout = nil)
|
157
|
+
def score(user_id, timeout = nil, api_key = @api_key)
|
157
158
|
|
158
159
|
raise(RuntimeError, "user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty?
|
160
|
+
raise(RuntimeError, "Bad api_key parameter") if api_key.empty?
|
159
161
|
timetout ||= @timeout
|
160
162
|
|
161
163
|
options = { :headers => {"User-Agent" => user_agent} }
|
162
164
|
options.merge!(:timeout => timeout) unless timeout.nil?
|
163
165
|
|
164
|
-
response = self.class.get("/v#{API_VERSION}/score/#{user_id}/?api_key=#{
|
166
|
+
response = self.class.get("/v#{API_VERSION}/score/#{user_id}/?api_key=#{api_key}", options)
|
165
167
|
Response.new(response.body, response.code)
|
166
168
|
|
167
169
|
end
|
@@ -185,12 +187,12 @@ module Sift
|
|
185
187
|
# A Response object is returned and captures the status message and
|
186
188
|
# status code. In general, you can ignore the returned result, though.
|
187
189
|
#
|
188
|
-
def label(user_id, properties = {}, timeout = nil)
|
190
|
+
def label(user_id, properties = {}, timeout = nil, api_key = @api_key)
|
189
191
|
|
190
192
|
raise(RuntimeError, "user_id must be a non-empty string") if (!user_id.is_a? String) || user_id.to_s.empty?
|
191
193
|
|
192
194
|
path = Sift.current_users_label_api_path(user_id)
|
193
|
-
track("$label", delete_nils(properties), timeout, path)
|
195
|
+
track("$label", delete_nils(properties), timeout, path, false, api_key)
|
194
196
|
end
|
195
197
|
|
196
198
|
private
|
data/lib/sift/version.rb
CHANGED
data/spec/unit/client_spec.rb
CHANGED
@@ -141,6 +141,25 @@ describe Sift::Client do
|
|
141
141
|
response.api_error_message.should eq("OK")
|
142
142
|
end
|
143
143
|
|
144
|
+
it "Successfully submits event with overriden key" do
|
145
|
+
response_json = { :status => 0, :error_message => "OK"}
|
146
|
+
stub_request(:post, "https://api.siftscience.com/v203/events").
|
147
|
+
with { | request|
|
148
|
+
parsed_body = JSON.parse(request.body)
|
149
|
+
parsed_body.should include("$buyer_user_id" => "123456")
|
150
|
+
parsed_body.should include("$api_key" => "overridden")
|
151
|
+
}.to_return(:status => 200, :body => MultiJson.dump(response_json), :headers => {})
|
152
|
+
|
153
|
+
api_key = "foobar"
|
154
|
+
event = "$transaction"
|
155
|
+
properties = valid_transaction_properties
|
156
|
+
|
157
|
+
response = Sift::Client.new(api_key).track(event, properties, nil, nil, false, "overridden")
|
158
|
+
response.ok?.should eq(true)
|
159
|
+
response.api_status.should eq(0)
|
160
|
+
response.api_error_message.should eq("OK")
|
161
|
+
end
|
162
|
+
|
144
163
|
it "Successfuly scrubs nils" do
|
145
164
|
|
146
165
|
response_json = { :status => 0, :error_message => "OK" }
|
@@ -183,6 +202,23 @@ describe Sift::Client do
|
|
183
202
|
response.body["score"].should eq(0.93)
|
184
203
|
end
|
185
204
|
|
205
|
+
it "Successfully fetches a score with an overridden key" do
|
206
|
+
|
207
|
+
api_key = "foobar"
|
208
|
+
response_json = score_response_json
|
209
|
+
|
210
|
+
stub_request(:get, "https://api.siftscience.com/v203/score/247019/?api_key=overridden").
|
211
|
+
to_return(:status => 200, :body => MultiJson.dump(response_json), :headers => {})
|
212
|
+
|
213
|
+
response = Sift::Client.new(api_key).score(score_response_json[:user_id], nil, "overridden")
|
214
|
+
response.ok?.should eq(true)
|
215
|
+
response.api_status.should eq(0)
|
216
|
+
response.api_error_message.should eq("OK")
|
217
|
+
|
218
|
+
response.body["score"].should eq(0.93)
|
219
|
+
end
|
220
|
+
|
221
|
+
|
186
222
|
it "Successfuly make a sync score request" do
|
187
223
|
|
188
224
|
api_key = "foobar"
|
@@ -204,4 +240,6 @@ describe Sift::Client do
|
|
204
240
|
response.body["score_response"]["score"].should eq(0.93)
|
205
241
|
end
|
206
242
|
|
243
|
+
|
244
|
+
|
207
245
|
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: 1.1.6.
|
4
|
+
version: 1.1.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Sadaghiani
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-09-
|
12
|
+
date: 2014-09-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
124
|
version: '0'
|
125
125
|
requirements: []
|
126
126
|
rubyforge_project: sift
|
127
|
-
rubygems_version: 2.
|
127
|
+
rubygems_version: 2.1.11
|
128
128
|
signing_key:
|
129
129
|
specification_version: 4
|
130
130
|
summary: Sift Science Ruby API Gem
|