keen 0.9.8 → 0.9.9
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 +5 -13
- data/README.md +3 -0
- data/lib/keen/client/publishing_methods.rb +1 -1
- data/lib/keen/client/querying_methods.rb +11 -6
- data/lib/keen/version.rb +1 -1
- data/spec/keen/client/maintenance_methods_spec.rb +4 -4
- data/spec/keen/client/publishing_methods_spec.rb +17 -19
- data/spec/keen/client/querying_methods_spec.rb +25 -10
- data/spec/keen/client_spec.rb +11 -11
- data/spec/keen/keen_spec.rb +15 -15
- data/spec/keen/scoped_key_old_spec.rb +5 -5
- data/spec/keen/scoped_key_spec.rb +5 -5
- data/spec/spec_helper.rb +10 -9
- metadata +26 -40
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MGY5ZTNiZWUwNGY4ZTE2Y2JmZTdiNGU4MjdiMDBlOTU5NmI2NWFiYw==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 38dbcdb5882d0ecaca4d8a069ba569b12ed28fc7
|
4
|
+
data.tar.gz: 9a5278be0634db7ca4658b9dff70c46b0750e77e
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
ZWJlZTc0NTA1YzUzNGIwOTg0MWQ5NGMwNWQyMTQxODQxZDM4OTRhNWIyN2I4
|
11
|
-
MDBmNWRhYWMzODE3ZGU2NDQxMDY3Mjk1MTJmZTEyNTg1ZmNlNGM=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
M2I3MDNlZTQzYTY0OWJiMjAzZTA4M2FmMjUxOTBjNmZiYzY2YWM3NjczYzE1
|
14
|
-
MWI5NDlmMzA2ZDNhNTA3NWU1NDIxOGRiM2NhY2Y4NGY3NWZjZWY0MDMwZTc5
|
15
|
-
NjExYzkyZmZjYzI3YWFjMmU2MWFmMTc4OTYwMjFhYTI3YzMxNjE=
|
6
|
+
metadata.gz: ce6065efb92a0ec0aa8073a43ee0f7a3df9da5dd412ed967b84ae88af4e51c3ca8043cfe10f85635e5aa6978fba720ff6d11a8deabd8a3547d3529f3358ea791
|
7
|
+
data.tar.gz: d1a51bd9f953b0d401654b28e1ccc08623cba520a978db467d0ab146d30c15d0dae221ac41e57529bbb6e987b0376a067fe9cb201fee51f3b6d834a45fe20363
|
data/README.md
CHANGED
@@ -412,6 +412,9 @@ If you want some bot protection, check out the [Voight-Kampff](https://github.co
|
|
412
412
|
|
413
413
|
### Changelog
|
414
414
|
|
415
|
+
##### 0.9.9
|
416
|
+
+ Added the ability to send additional optional headers.
|
417
|
+
|
415
418
|
##### 0.9.7
|
416
419
|
+ Added a new header `Keen-Sdk` that sends the SDK version information on all requests.
|
417
420
|
|
@@ -10,7 +10,7 @@ module Keen
|
|
10
10
|
#
|
11
11
|
# @return the JSON response from the API
|
12
12
|
def add_event(event_collection, properties, options={})
|
13
|
-
self.publish(event_collection, properties
|
13
|
+
self.publish(event_collection, properties)
|
14
14
|
end
|
15
15
|
|
16
16
|
# Publishes a synchronous event
|
@@ -222,10 +222,10 @@ module Keen
|
|
222
222
|
def query(analysis_type, event_collection, params={}, options={})
|
223
223
|
response =
|
224
224
|
if options[:method] == :post
|
225
|
-
post_query(analysis_type, event_collection, params)
|
225
|
+
post_query(analysis_type, event_collection, params, options)
|
226
226
|
else
|
227
227
|
url = _query_url(analysis_type, event_collection, params, options)
|
228
|
-
get_response(url)
|
228
|
+
get_response(url, options)
|
229
229
|
end
|
230
230
|
|
231
231
|
response_body = response.body.chomp
|
@@ -236,7 +236,7 @@ module Keen
|
|
236
236
|
|
237
237
|
private
|
238
238
|
|
239
|
-
def post_query(analysis_type, event_collection, params={})
|
239
|
+
def post_query(analysis_type, event_collection, params={}, options={})
|
240
240
|
ensure_project_id!
|
241
241
|
ensure_read_key!
|
242
242
|
|
@@ -244,7 +244,7 @@ module Keen
|
|
244
244
|
query_params[:event_collection] = event_collection.to_s if event_collection
|
245
245
|
Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout).post(
|
246
246
|
:path => api_query_resource_path(analysis_type),
|
247
|
-
:headers =>
|
247
|
+
:headers => request_headers(options),
|
248
248
|
:body => MultiJson.encode(query_params)
|
249
249
|
)
|
250
250
|
rescue Exception => http_error
|
@@ -260,11 +260,11 @@ module Keen
|
|
260
260
|
"#{self.api_url}#{api_query_resource_path(analysis_type)}?#{preprocess_params(query_params)}"
|
261
261
|
end
|
262
262
|
|
263
|
-
def get_response(url)
|
263
|
+
def get_response(url, options={})
|
264
264
|
uri = URI.parse(url)
|
265
265
|
Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout).get(
|
266
266
|
:path => "#{uri.path}?#{uri.query}",
|
267
|
-
:headers =>
|
267
|
+
:headers => request_headers(options)
|
268
268
|
)
|
269
269
|
rescue Exception => http_error
|
270
270
|
raise HttpError.new("Couldn't perform #{@analysis_type} on Keen IO: #{http_error.message}", http_error)
|
@@ -273,6 +273,11 @@ module Keen
|
|
273
273
|
def api_query_resource_path(analysis_type)
|
274
274
|
"/#{self.api_version}/projects/#{self.project_id}/queries/#{analysis_type}"
|
275
275
|
end
|
276
|
+
|
277
|
+
def request_headers(options={})
|
278
|
+
base_headers = api_headers(self.read_key, "sync")
|
279
|
+
options.has_key?(:headers) ? base_headers.merge(options[:headers]) : base_headers
|
280
|
+
end
|
276
281
|
end
|
277
282
|
end
|
278
283
|
end
|
data/lib/keen/version.rb
CHANGED
@@ -20,7 +20,7 @@ describe Keen::Client do
|
|
20
20
|
it 'should not require filters' do
|
21
21
|
url = delete_url(event_collection)
|
22
22
|
stub_keen_delete(url, 204)
|
23
|
-
client.delete(event_collection).
|
23
|
+
expect(client.delete(event_collection)).to be true
|
24
24
|
expect_keen_delete(url, "sync", master_key)
|
25
25
|
end
|
26
26
|
|
@@ -42,7 +42,7 @@ describe Keen::Client do
|
|
42
42
|
|
43
43
|
it "should fetch the project's event resource" do
|
44
44
|
stub_keen_get(events_url, 200, [{ "a" => 1 }, { "b" => 2 }] )
|
45
|
-
client.event_collections.
|
45
|
+
expect(client.event_collections).to match_array([{ "a" => 1 }, { "b" => 2 }])
|
46
46
|
expect_keen_get(events_url, "sync", master_key)
|
47
47
|
end
|
48
48
|
end
|
@@ -53,7 +53,7 @@ describe Keen::Client do
|
|
53
53
|
|
54
54
|
it "should fetch the project's named event resource" do
|
55
55
|
stub_keen_get(events_url, 200, [{ "b" => 2 }] )
|
56
|
-
client.event_collection(event_collection).
|
56
|
+
expect(client.event_collection(event_collection)).to match_array([{ "b" => 2 }])
|
57
57
|
expect_keen_get(events_url, "sync", master_key)
|
58
58
|
end
|
59
59
|
end
|
@@ -63,7 +63,7 @@ describe Keen::Client do
|
|
63
63
|
|
64
64
|
it "should fetch the project resource" do
|
65
65
|
stub_keen_get(project_url, 200, [{ "a" => 1 }, { "b" => 2 }] )
|
66
|
-
client.project_info.
|
66
|
+
expect(client.project_info).to match_array([{ "a" => 1 }, { "b" => 2 }])
|
67
67
|
expect_keen_get(project_url, "sync", master_key)
|
68
68
|
end
|
69
69
|
end
|
@@ -21,7 +21,7 @@ describe Keen::Client::PublishingMethods do
|
|
21
21
|
it "should return the proper response" do
|
22
22
|
api_response = { "created" => true }
|
23
23
|
stub_keen_post(api_event_collection_resource_url(api_url, collection), 201, api_response)
|
24
|
-
client.publish(collection, event_properties).
|
24
|
+
expect(client.publish(collection, event_properties)).to eq(api_response)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should raise an argument error if no event collection is specified" do
|
@@ -51,9 +51,9 @@ describe Keen::Client::PublishingMethods do
|
|
51
51
|
e = exception
|
52
52
|
end
|
53
53
|
|
54
|
-
e.class.
|
55
|
-
e.original_error.
|
56
|
-
e.message.
|
54
|
+
expect(e.class).to eq(Keen::HttpError)
|
55
|
+
expect(e.original_error).to be_kind_of(Timeout::Error)
|
56
|
+
expect(e.message).to eq("Keen IO Exception: HTTP publish failure: execution expired")
|
57
57
|
end
|
58
58
|
|
59
59
|
it "should raise an exception if client has no project_id" do
|
@@ -84,7 +84,7 @@ describe Keen::Client::PublishingMethods do
|
|
84
84
|
it "should return the proper response" do
|
85
85
|
api_response = { "created" => true }
|
86
86
|
stub_keen_post(api_event_collection_resource_url(api_url, collection), 201, api_response)
|
87
|
-
client.publish(collection, event_properties).
|
87
|
+
expect(client.publish(collection, event_properties)).to eq(api_response)
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -187,7 +187,7 @@ describe Keen::Client::PublishingMethods do
|
|
187
187
|
EM.run {
|
188
188
|
client.publish_async(collection, event_properties).callback { |response|
|
189
189
|
begin
|
190
|
-
response.
|
190
|
+
expect(response).to eq(api_success)
|
191
191
|
ensure
|
192
192
|
EM.stop
|
193
193
|
end
|
@@ -200,8 +200,8 @@ describe Keen::Client::PublishingMethods do
|
|
200
200
|
EM.run {
|
201
201
|
client.publish_async(collection, event_properties).errback { |error|
|
202
202
|
begin
|
203
|
-
error.
|
204
|
-
error.message.
|
203
|
+
expect(error).to_not be_nil
|
204
|
+
expect(error.message).to eq("Keen IO Exception: HTTP publish_async failure: WebMock timeout error")
|
205
205
|
ensure
|
206
206
|
EM.stop
|
207
207
|
end
|
@@ -221,7 +221,7 @@ describe Keen::Client::PublishingMethods do
|
|
221
221
|
end
|
222
222
|
}
|
223
223
|
}
|
224
|
-
}.to raise_error
|
224
|
+
}.to raise_error(NameError)
|
225
225
|
end
|
226
226
|
end
|
227
227
|
end
|
@@ -265,7 +265,7 @@ describe Keen::Client::PublishingMethods do
|
|
265
265
|
EM.run {
|
266
266
|
client.publish_batch_async(events).callback { |response|
|
267
267
|
begin
|
268
|
-
response.
|
268
|
+
expect(response).to eq(api_success)
|
269
269
|
ensure
|
270
270
|
EM.stop
|
271
271
|
end
|
@@ -278,8 +278,8 @@ describe Keen::Client::PublishingMethods do
|
|
278
278
|
EM.run {
|
279
279
|
client.publish_batch_async(events).errback { |error|
|
280
280
|
begin
|
281
|
-
error.
|
282
|
-
error.message.
|
281
|
+
expect(error).to_not be_nil
|
282
|
+
expect(error.message).to eq("Keen IO Exception: HTTP publish_async failure: WebMock timeout error")
|
283
283
|
ensure
|
284
284
|
EM.stop
|
285
285
|
end
|
@@ -299,7 +299,7 @@ describe Keen::Client::PublishingMethods do
|
|
299
299
|
end
|
300
300
|
}
|
301
301
|
}
|
302
|
-
}.to raise_error
|
302
|
+
}.to raise_error(NameError)
|
303
303
|
end
|
304
304
|
end
|
305
305
|
end
|
@@ -313,22 +313,20 @@ describe Keen::Client::PublishingMethods do
|
|
313
313
|
|
314
314
|
describe "#add_event" do
|
315
315
|
it "should alias to publish" do
|
316
|
-
client.
|
317
|
-
client.add_event(
|
316
|
+
expect(client).to receive(:publish).with(collection, {:a => 1})
|
317
|
+
client.add_event(collection, {:a => 1}, {:b => 2})
|
318
318
|
end
|
319
319
|
end
|
320
320
|
|
321
321
|
describe "beacon_url" do
|
322
322
|
it "should return a url with a base-64 encoded json param" do
|
323
|
-
client.beacon_url("sign_ups", { :name => "Bob" }).
|
324
|
-
"#{api_url}/3.0/projects/12345/events/sign_ups?api_key=#{write_key}&data=eyJuYW1lIjoiQm9iIn0="
|
323
|
+
expect(client.beacon_url("sign_ups", { :name => "Bob" })).to eq("#{api_url}/3.0/projects/12345/events/sign_ups?api_key=#{write_key}&data=eyJuYW1lIjoiQm9iIn0=")
|
325
324
|
end
|
326
325
|
end
|
327
326
|
|
328
327
|
describe "redirect_url" do
|
329
328
|
it "should return a url with a base-64 encoded json param and an encoded redirect url" do
|
330
|
-
client.redirect_url("sign_ups", { :name => "Bob" }, "http://keen.io/?foo=bar&bar=baz").
|
331
|
-
"#{api_url}/3.0/projects/12345/events/sign_ups?api_key=#{write_key}&data=eyJuYW1lIjoiQm9iIn0=&redirect=http%3A%2F%2Fkeen.io%2F%3Ffoo%3Dbar%26bar%3Dbaz"
|
329
|
+
expect(client.redirect_url("sign_ups", { :name => "Bob" }, "http://keen.io/?foo=bar&bar=baz")).to eq("#{api_url}/3.0/projects/12345/events/sign_ups?api_key=#{write_key}&data=eyJuYW1lIjoiQm9iIn0=&redirect=http%3A%2F%2Fkeen.io%2F%3Ffoo%3Dbar%26bar%3Dbaz")
|
332
330
|
end
|
333
331
|
end
|
334
332
|
|
@@ -19,14 +19,14 @@ describe Keen::Client do
|
|
19
19
|
|
20
20
|
["minimum", "maximum", "sum", "average", "count", "count_unique", "select_unique", "extraction", "multi_analysis", "median", "percentile"].each do |query_name|
|
21
21
|
it "should call keen query passing the query name" do
|
22
|
-
client.
|
22
|
+
expect(client).to receive(:query).with(query_name.to_sym, event_collection, params, {})
|
23
23
|
client.send(query_name, event_collection, params)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
describe "funnel" do
|
28
28
|
it "should call keen query w/o event collection" do
|
29
|
-
client.
|
29
|
+
expect(client).to receive(:query).with(:funnel, nil, params, {})
|
30
30
|
client.funnel(params)
|
31
31
|
end
|
32
32
|
end
|
@@ -58,7 +58,7 @@ describe Keen::Client do
|
|
58
58
|
expected_url = query_url(query_name, expected_query_params)
|
59
59
|
stub_keen_get(expected_url, 200, :result => 1)
|
60
60
|
response = query.call(query_name, event_collection, extra_query_hash)
|
61
|
-
response.
|
61
|
+
expect(response).to eq(api_response["result"])
|
62
62
|
expect_keen_get(expected_url, "sync", read_key)
|
63
63
|
end
|
64
64
|
|
@@ -138,14 +138,14 @@ describe Keen::Client do
|
|
138
138
|
timeframe_str = CGI.escape(MultiJson.encode(timeframe))
|
139
139
|
|
140
140
|
test_query("&timeframe=#{timeframe_str}", options = {:timeframe => timeframe})
|
141
|
-
options.
|
141
|
+
expect(options).to eq({:timeframe => timeframe})
|
142
142
|
end
|
143
143
|
|
144
144
|
it "should return the full API response if the response option is set to all_keys" do
|
145
145
|
expected_url = query_url("funnel", "?steps=#{MultiJson.encode([])}")
|
146
146
|
stub_keen_get(expected_url, 200, :result => [1])
|
147
147
|
api_response = query.call("funnel", nil, { :steps => [] }, { :response => :all_keys })
|
148
|
-
api_response.
|
148
|
+
expect(api_response).to eq({ "result" => [1] })
|
149
149
|
end
|
150
150
|
|
151
151
|
it "should call API with post body if method opton is set to post " do
|
@@ -158,7 +158,22 @@ describe Keen::Client do
|
|
158
158
|
response = query.call("funnel", nil, { :steps => steps }, { :method => :post })
|
159
159
|
|
160
160
|
expect_keen_post(expected_url, { :steps => steps }, "sync", read_key)
|
161
|
-
response.
|
161
|
+
expect(response).to eq(api_response["result"])
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should add extra headers if you supply them as an option" do
|
165
|
+
url = query_url("count", "?event_collection=#{event_collection}")
|
166
|
+
extra_headers = {
|
167
|
+
"Keen-Flibbity-Flabbidy" => "foobar"
|
168
|
+
}
|
169
|
+
|
170
|
+
options = {
|
171
|
+
:headers => extra_headers
|
172
|
+
}
|
173
|
+
|
174
|
+
stub_keen_get(url, 200, :result => 10)
|
175
|
+
client.count(event_collection, {}, options)
|
176
|
+
expect_keen_get(url, "sync", read_key, extra_headers)
|
162
177
|
end
|
163
178
|
end
|
164
179
|
end
|
@@ -171,14 +186,14 @@ describe Keen::Client do
|
|
171
186
|
end
|
172
187
|
|
173
188
|
it "should not require params" do
|
174
|
-
client.count(event_collection).
|
189
|
+
expect(client.count(event_collection)).to eq(10)
|
175
190
|
expect_keen_get(url, "sync", read_key)
|
176
191
|
end
|
177
192
|
|
178
193
|
context "with event collection as symbol" do
|
179
194
|
let(:event_collection) { :users }
|
180
195
|
it "should not require a string" do
|
181
|
-
client.count(event_collection).
|
196
|
+
expect(client.count(event_collection)).to eq(10)
|
182
197
|
end
|
183
198
|
end
|
184
199
|
end
|
@@ -188,7 +203,7 @@ describe Keen::Client do
|
|
188
203
|
query_params = "?event_collection=#{event_collection}"
|
189
204
|
url = query_url("extraction", query_params)
|
190
205
|
stub_keen_get(url, 200, :result => { "a" => 1 } )
|
191
|
-
client.extraction(event_collection).
|
206
|
+
expect(client.extraction(event_collection)).to eq({ "a" => 1 })
|
192
207
|
expect_keen_get(url, "sync", read_key)
|
193
208
|
end
|
194
209
|
end
|
@@ -207,7 +222,7 @@ describe Keen::Client do
|
|
207
222
|
end
|
208
223
|
|
209
224
|
it "should not run the query" do
|
210
|
-
Keen::HTTP::Sync.
|
225
|
+
expect(Keen::HTTP::Sync).to_not receive(:new)
|
211
226
|
end
|
212
227
|
end
|
213
228
|
end
|
data/spec/keen/client_spec.rb
CHANGED
@@ -20,9 +20,9 @@ describe Keen::Client do
|
|
20
20
|
context "deprecated" do
|
21
21
|
it "should allow created via project_id and key args" do
|
22
22
|
client = Keen::Client.new(project_id, write_key, read_key)
|
23
|
-
client.write_key.
|
24
|
-
client.read_key.
|
25
|
-
client.project_id.
|
23
|
+
expect(client.write_key).to eq(write_key)
|
24
|
+
expect(client.read_key).to eq(read_key)
|
25
|
+
expect(client.project_id).to eq(project_id)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
@@ -33,15 +33,15 @@ describe Keen::Client do
|
|
33
33
|
:read_key => read_key,
|
34
34
|
:api_url => api_url,
|
35
35
|
:read_timeout => read_timeout)
|
36
|
-
client.write_key.
|
37
|
-
client.read_key.
|
38
|
-
client.project_id.
|
39
|
-
client.api_url.
|
40
|
-
client.read_timeout.
|
36
|
+
expect(client.write_key).to eq(write_key)
|
37
|
+
expect(client.read_key).to eq(read_key)
|
38
|
+
expect(client.project_id).to eq(project_id)
|
39
|
+
expect(client.api_url).to eq(api_url)
|
40
|
+
expect(client.read_timeout).to eq(read_timeout)
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should set a default api_url" do
|
44
|
-
Keen::Client.new.api_url.
|
44
|
+
expect(Keen::Client.new.api_url).to eq("https://api.keen.io")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -51,11 +51,11 @@ describe Keen::Client do
|
|
51
51
|
let (:process_response) { client.method(:process_response) }
|
52
52
|
|
53
53
|
it "should return encoded json for a 200" do
|
54
|
-
process_response.call(200, body).
|
54
|
+
expect(process_response.call(200, body)).to eq({ "wazzup" => 1 })
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should return encoded json for a 201" do
|
58
|
-
process_response.call(201, body).
|
58
|
+
expect(process_response.call(201, body)).to eq({ "wazzup" => 1 })
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should return empty for bad json on a 200/201" do
|
data/spec/keen/keen_spec.rb
CHANGED
@@ -17,31 +17,31 @@ describe Keen do
|
|
17
17
|
let(:client) { Keen.send(:default_client) }
|
18
18
|
|
19
19
|
it "should set a project id from the environment" do
|
20
|
-
client.project_id.
|
20
|
+
expect(client.project_id).to eq("12345")
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should set a write key from the environment" do
|
24
|
-
client.write_key.
|
24
|
+
expect(client.write_key).to eq("abcdewrite")
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should set a read key from the environment" do
|
28
|
-
client.read_key.
|
28
|
+
expect(client.read_key).to eq("abcderead")
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should set a master key from the environment" do
|
32
|
-
client.master_key.
|
32
|
+
expect(client.master_key).to eq("lalalala")
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should set an api host from the environment" do
|
36
|
-
client.api_url.
|
36
|
+
expect(client.api_url).to eq("http://fake.keen.io:fakeport")
|
37
37
|
end
|
38
38
|
|
39
39
|
it "should set an proxy host from the environment" do
|
40
|
-
client.proxy_url.
|
40
|
+
expect(client.proxy_url).to eq("http://proxy.keen.io:proxyport")
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should set an proxy type from the environment" do
|
44
|
-
client.proxy_type.
|
44
|
+
expect(client.proxy_type).to eq("http")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -49,7 +49,7 @@ describe Keen do
|
|
49
49
|
describe "Keen delegation" do
|
50
50
|
it "should memoize the default client, retaining settings" do
|
51
51
|
Keen.project_id = "new-abcde"
|
52
|
-
Keen.project_id.
|
52
|
+
expect(Keen.project_id).to eq("new-abcde")
|
53
53
|
end
|
54
54
|
|
55
55
|
after do
|
@@ -60,33 +60,33 @@ describe Keen do
|
|
60
60
|
describe "forwardable" do
|
61
61
|
before do
|
62
62
|
@default_client = double("client")
|
63
|
-
Keen.
|
63
|
+
allow(Keen).to receive(:default_client).and_return(@default_client)
|
64
64
|
end
|
65
65
|
|
66
66
|
[:project_id, :write_key, :read_key, :api_url, :proxy_url, :proxy_type].each do |_method|
|
67
67
|
it "should forward the #{_method} method" do
|
68
|
-
@default_client.
|
68
|
+
expect(@default_client).to receive(_method)
|
69
69
|
Keen.send(_method)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
73
|
[:project_id, :write_key, :read_key, :master_key, :api_url].each do |_method|
|
74
74
|
it "should forward the #{_method} method" do
|
75
|
-
@default_client.
|
75
|
+
expect(@default_client).to receive(_method)
|
76
76
|
Keen.send(_method)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
80
|
[:project_id=, :write_key=, :read_key=, :master_key=, :api_url=].each do |_method|
|
81
81
|
it "should forward the #{_method} method" do
|
82
|
-
@default_client.
|
82
|
+
expect(@default_client).to receive(_method).with("12345")
|
83
83
|
Keen.send(_method, "12345")
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
87
|
[:publish, :publish_async, :publish_batch, :publish_batch_async].each do |_method|
|
88
88
|
it "should forward the #{_method} method" do
|
89
|
-
@default_client.
|
89
|
+
expect(@default_client).to receive(_method).with("users", {})
|
90
90
|
Keen.send(_method, "users", {})
|
91
91
|
end
|
92
92
|
end
|
@@ -95,7 +95,7 @@ describe Keen do
|
|
95
95
|
# any new methods have a corresponding delegator
|
96
96
|
Keen::Client::QueryingMethods.instance_methods.each do |_method|
|
97
97
|
it "should forward the #{_method} query method" do
|
98
|
-
@default_client.
|
98
|
+
expect(@default_client).to receive(_method).with("users", {})
|
99
99
|
Keen.send(_method, "users", {})
|
100
100
|
end
|
101
101
|
end
|
@@ -103,7 +103,7 @@ describe Keen do
|
|
103
103
|
|
104
104
|
describe "logger" do
|
105
105
|
it "should be set to info" do
|
106
|
-
Keen.logger.level.
|
106
|
+
expect(Keen.logger.level).to eq(Logger::INFO)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
@@ -14,11 +14,11 @@ describe Keen::ScopedKey do
|
|
14
14
|
|
15
15
|
describe "constructor" do
|
16
16
|
it "should retain the api_key" do
|
17
|
-
new_scoped_key.api_key.
|
17
|
+
expect(new_scoped_key.api_key).to eq(api_key)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should retain the data" do
|
21
|
-
new_scoped_key.data.
|
21
|
+
expect(new_scoped_key.data).to eq(data)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -26,19 +26,19 @@ describe Keen::ScopedKey do
|
|
26
26
|
it "should encrypt and hex encode the data using the api key" do
|
27
27
|
encrypted_str = new_scoped_key.encrypt!
|
28
28
|
other_api_key = Keen::ScopedKey.decrypt!(api_key, encrypted_str)
|
29
|
-
other_api_key.data.
|
29
|
+
expect(other_api_key.data).to eq(data)
|
30
30
|
end
|
31
31
|
|
32
32
|
describe "when an IV is not provided" do
|
33
33
|
it "should not produce the same encrypted key text" do
|
34
|
-
new_scoped_key.encrypt
|
34
|
+
expect(new_scoped_key.encrypt!).to_not eq(new_scoped_key.encrypt!)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe "when an IV is provided" do
|
39
39
|
it "should produce the same encrypted key text for a " do
|
40
40
|
iv = "\0" * 16
|
41
|
-
new_scoped_key.encrypt!(iv).
|
41
|
+
expect(new_scoped_key.encrypt!(iv)).to eq(new_scoped_key.encrypt!(iv))
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should raise error when an invalid IV is supplied" do
|
@@ -14,11 +14,11 @@ describe Keen::ScopedKey do
|
|
14
14
|
|
15
15
|
describe "constructor" do
|
16
16
|
it "should retain the api_key" do
|
17
|
-
new_scoped_key.api_key.
|
17
|
+
expect(new_scoped_key.api_key).to eq(api_key)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should retain the data" do
|
21
|
-
new_scoped_key.data.
|
21
|
+
expect(new_scoped_key.data).to eq(data)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -26,19 +26,19 @@ describe Keen::ScopedKey do
|
|
26
26
|
it "should encrypt and hex encode the data using the api key" do
|
27
27
|
encrypted_str = new_scoped_key.encrypt!
|
28
28
|
other_api_key = Keen::ScopedKey.decrypt!(api_key, encrypted_str)
|
29
|
-
other_api_key.data.
|
29
|
+
expect(other_api_key.data).to eq(data)
|
30
30
|
end
|
31
31
|
|
32
32
|
describe "when an IV is not provided" do
|
33
33
|
it "should not produce the same encrypted key text" do
|
34
|
-
new_scoped_key.encrypt
|
34
|
+
expect(new_scoped_key.encrypt!).to_not eq(new_scoped_key.encrypt!)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
38
|
describe "when an IV is provided" do
|
39
39
|
it "should produce the same encrypted key text for a " do
|
40
40
|
iv = "\0" * 16
|
41
|
-
new_scoped_key.encrypt!(iv).
|
41
|
+
expect(new_scoped_key.encrypt!(iv)).to eq(new_scoped_key.encrypt!(iv))
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should raise error when an invalid IV is supplied" do
|
data/spec/spec_helper.rb
CHANGED
@@ -31,7 +31,7 @@ module Keen::SpecHelpers
|
|
31
31
|
stub_keen_request(:delete, url, status, "")
|
32
32
|
end
|
33
33
|
|
34
|
-
def expect_keen_request(method, url, body, sync_or_async_ua, read_or_write_key)
|
34
|
+
def expect_keen_request(method, url, body, sync_or_async_ua, read_or_write_key, extra_headers={})
|
35
35
|
user_agent = "keen-gem, v#{Keen::VERSION}, #{sync_or_async_ua}"
|
36
36
|
user_agent += ", #{RUBY_VERSION}, #{RUBY_PLATFORM}, #{RUBY_PATCHLEVEL}"
|
37
37
|
if defined?(RUBY_ENGINE)
|
@@ -43,22 +43,24 @@ module Keen::SpecHelpers
|
|
43
43
|
"Authorization" => read_or_write_key,
|
44
44
|
"Keen-Sdk" => "ruby-#{Keen::VERSION}" }
|
45
45
|
|
46
|
-
|
46
|
+
headers = headers.merge(extra_headers) if not extra_headers.empty?
|
47
|
+
|
48
|
+
expect(WebMock).to have_requested(method, url).with(
|
47
49
|
:body => body,
|
48
50
|
:headers => headers)
|
49
51
|
|
50
52
|
end
|
51
53
|
|
52
|
-
def expect_keen_get(url, sync_or_async_ua, read_key)
|
53
|
-
expect_keen_request(:get, url, "", sync_or_async_ua, read_key)
|
54
|
+
def expect_keen_get(url, sync_or_async_ua, read_key, extra_headers={})
|
55
|
+
expect_keen_request(:get, url, "", sync_or_async_ua, read_key, extra_headers)
|
54
56
|
end
|
55
57
|
|
56
|
-
def expect_keen_post(url, event_properties, sync_or_async_ua, write_key)
|
57
|
-
expect_keen_request(:post, url, MultiJson.encode(event_properties), sync_or_async_ua, write_key)
|
58
|
+
def expect_keen_post(url, event_properties, sync_or_async_ua, write_key, extra_headers={})
|
59
|
+
expect_keen_request(:post, url, MultiJson.encode(event_properties), sync_or_async_ua, write_key, extra_headers)
|
58
60
|
end
|
59
61
|
|
60
|
-
def expect_keen_delete(url, sync_or_async_ua, master_key)
|
61
|
-
expect_keen_request(:delete, url, "", sync_or_async_ua, master_key)
|
62
|
+
def expect_keen_delete(url, sync_or_async_ua, master_key, extra_headers={})
|
63
|
+
expect_keen_request(:delete, url, "", sync_or_async_ua, master_key, extra_headers)
|
62
64
|
end
|
63
65
|
|
64
66
|
def api_event_collection_resource_url(base_url, collection)
|
@@ -77,4 +79,3 @@ RSpec.configure do |config|
|
|
77
79
|
config.tty = true
|
78
80
|
config.formatter = :progress # :progress, :documentation, :html, :textmate
|
79
81
|
end
|
80
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Kleissner
|
@@ -9,157 +9,143 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-05-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '1.3'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.3'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: addressable
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - ~>
|
32
|
+
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 2.3.5
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - ~>
|
39
|
+
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 2.3.5
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: guard
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - ~>
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '2.14'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - ~>
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '2.14'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: guard-rspec
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - ~>
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '4.7'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - ~>
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '4.7'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rb-inotify
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- - ~>
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0.9'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- - ~>
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0.9'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: rb-fsevent
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - ~>
|
88
|
+
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
90
|
version: '0.9'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - ~>
|
95
|
+
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0.9'
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rb-fchange
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
|
-
- - ~>
|
102
|
+
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
104
|
version: 0.0.6
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- - ~>
|
109
|
+
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: 0.0.6
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: ruby_gntp
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
|
-
- - ~>
|
116
|
+
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
version: '0.3'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
|
-
- - ~>
|
123
|
+
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
125
|
version: '0.3'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: rb-readline
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
129
129
|
requirements:
|
130
|
-
- - ~>
|
130
|
+
- - "~>"
|
131
131
|
- !ruby/object:Gem::Version
|
132
132
|
version: '0.5'
|
133
133
|
type: :development
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
|
-
- - ~>
|
137
|
+
- - "~>"
|
138
138
|
- !ruby/object:Gem::Version
|
139
139
|
version: '0.5'
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: debugger
|
142
|
-
requirement: !ruby/object:Gem::Requirement
|
143
|
-
requirements:
|
144
|
-
- - ! '>='
|
145
|
-
- !ruby/object:Gem::Version
|
146
|
-
version: '0'
|
147
|
-
type: :development
|
148
|
-
prerelease: false
|
149
|
-
version_requirements: !ruby/object:Gem::Requirement
|
150
|
-
requirements:
|
151
|
-
- - ! '>='
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
version: '0'
|
154
140
|
description: Send events and build analytics features into your Ruby applications.
|
155
141
|
email: opensource@keen.io
|
156
142
|
executables: []
|
157
143
|
extensions: []
|
158
144
|
extra_rdoc_files: []
|
159
145
|
files:
|
160
|
-
- .gitignore
|
161
|
-
- .rspec
|
162
|
-
- .travis.yml
|
146
|
+
- ".gitignore"
|
147
|
+
- ".rspec"
|
148
|
+
- ".travis.yml"
|
163
149
|
- Gemfile
|
164
150
|
- Guardfile
|
165
151
|
- LICENSE
|
@@ -203,17 +189,17 @@ require_paths:
|
|
203
189
|
- lib
|
204
190
|
required_ruby_version: !ruby/object:Gem::Requirement
|
205
191
|
requirements:
|
206
|
-
- -
|
192
|
+
- - ">="
|
207
193
|
- !ruby/object:Gem::Version
|
208
194
|
version: '0'
|
209
195
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
196
|
requirements:
|
211
|
-
- -
|
197
|
+
- - ">="
|
212
198
|
- !ruby/object:Gem::Version
|
213
199
|
version: '0'
|
214
200
|
requirements: []
|
215
201
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
202
|
+
rubygems_version: 2.4.5.1
|
217
203
|
signing_key:
|
218
204
|
specification_version: 4
|
219
205
|
summary: Keen IO API Client
|