keen 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -0
- data/Rakefile +5 -0
- data/lib/keen.rb +2 -1
- data/lib/keen/client.rb +1 -1
- data/lib/keen/client/querying_methods.rb +7 -0
- data/lib/keen/version.rb +1 -1
- data/spec/keen/client/querying_methods_spec.rb +38 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c47eef1b0e54dae99c1ea8b602cf656cd42802db
|
4
|
+
data.tar.gz: 34f117595df684a9634475892330fff3d22ac7e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 161ab7ad63b06647a52afe0714564cd53cc03ee720f28e3916cca4b7703b2c39ef1b48fc87ba596655795f93c6beb72e89ba0239f9045757727c9f388b59be86
|
7
|
+
data.tar.gz: 5d7bc3a97aedc1b508bda127b133e191088f5cc1b369fe21f0310da92fae78164410396621626abbf66bd356a9e7cd14eb89dc6f07ea1b2ac09c2c668cfaa2a6
|
data/README.md
CHANGED
@@ -175,6 +175,16 @@ Each query method or alias takes an optional hash of options as an additional pa
|
|
175
175
|
`:response` – Set to `:all_keys` to return the full API response (usually only the value of the `"result"` key is returned).
|
176
176
|
`:method` - Set to `:post` to enable post body based query (https://keen.io/docs/data-analysis/post-queries/).
|
177
177
|
|
178
|
+
##### Query Logging
|
179
|
+
|
180
|
+
You can log all GET and POST queries automatically by setting the `log_queries` option.
|
181
|
+
|
182
|
+
``` ruby
|
183
|
+
Keen.log_queries = true
|
184
|
+
Keen.count('purchases')
|
185
|
+
# I, [2016-10-30T11:45:24.678745 #9978] INFO -- : [KEEN] Send GET query to https://api.keen.io/3.0/projects/<YOUR_PROJECT_ID>/queries/count?event_collection=purchases with options {}
|
186
|
+
```
|
187
|
+
|
178
188
|
### Saved Queries
|
179
189
|
|
180
190
|
You can manage your saved queries from the Keen ruby client.
|
@@ -447,6 +457,10 @@ If you want some bot protection, check out the [Voight-Kampff](https://github.co
|
|
447
457
|
|
448
458
|
### Changelog
|
449
459
|
|
460
|
+
##### 1.1.1
|
461
|
+
+ Added an option to log queries
|
462
|
+
+ Added a cli option that includes the Keen code
|
463
|
+
|
450
464
|
##### 1.1.0
|
451
465
|
+ Add support for access keys
|
452
466
|
+ Move saved queries into the Keen namespace
|
@@ -602,10 +616,21 @@ Similarly, you can use guard to listen for changes to files and run specs.
|
|
602
616
|
|
603
617
|
`bundle exec guard -g synchrony`
|
604
618
|
|
619
|
+
#### Running a Local Console
|
620
|
+
|
621
|
+
You can spawn an `irb` session with the local files already loaded for debugging
|
622
|
+
or experimentation.
|
623
|
+
|
624
|
+
```
|
625
|
+
$ bundle exec rake console
|
626
|
+
2.2.6 :001 > Keen
|
627
|
+
=> Keen
|
628
|
+
```
|
605
629
|
### Community Contributors
|
606
630
|
+ [alexkwolfe](https://github.com/alexkwolfe)
|
607
631
|
+ [peteygao](https://github.com/peteygao)
|
608
632
|
+ [obieq](https://github.com/obieq)
|
609
633
|
+ [cbartlett](https://github.com/cbartlett)
|
634
|
+
+ [myrridin](https://github.com/myrridin)
|
610
635
|
|
611
636
|
Thanks everyone, you rock!
|
data/Rakefile
CHANGED
@@ -21,5 +21,10 @@ RSpec::Core::RakeTask.new(:pattern) do |t|
|
|
21
21
|
t.pattern = "spec/#{ENV['PATTERN']}/**/*_spec.rb"
|
22
22
|
end
|
23
23
|
|
24
|
+
desc "Start a development console with local code loaded"
|
25
|
+
task :console do
|
26
|
+
exec "irb -r keen -I ./lib"
|
27
|
+
end
|
28
|
+
|
24
29
|
task :default => :spec
|
25
30
|
task :test => [:spec]
|
data/lib/keen.rb
CHANGED
data/lib/keen/client.rb
CHANGED
@@ -16,7 +16,7 @@ module Keen
|
|
16
16
|
include Keen::Client::QueryingMethods
|
17
17
|
include Keen::Client::MaintenanceMethods
|
18
18
|
|
19
|
-
attr_accessor :project_id, :write_key, :read_key, :master_key, :api_url, :proxy_url, :proxy_type, :read_timeout, :open_timeout
|
19
|
+
attr_accessor :project_id, :write_key, :read_key, :master_key, :api_url, :proxy_url, :proxy_type, :read_timeout, :log_queries, :open_timeout
|
20
20
|
|
21
21
|
CONFIG = {
|
22
22
|
:api_url => "https://api.keen.io",
|
@@ -240,6 +240,8 @@ module Keen
|
|
240
240
|
ensure_project_id!
|
241
241
|
ensure_read_key!
|
242
242
|
|
243
|
+
log_query("#{self.api_url}#{api_query_resource_path(analysis_type)}", 'POST', params) if log_queries
|
244
|
+
|
243
245
|
query_params = params.dup
|
244
246
|
query_params[:event_collection] = event_collection.to_s if event_collection
|
245
247
|
Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout, self.open_timeout).post(
|
@@ -261,6 +263,7 @@ module Keen
|
|
261
263
|
end
|
262
264
|
|
263
265
|
def get_response(url, options={})
|
266
|
+
log_query(url) if log_queries
|
264
267
|
uri = URI.parse(url)
|
265
268
|
Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout, self.open_timeout).get(
|
266
269
|
:path => "#{uri.path}?#{uri.query}",
|
@@ -274,6 +277,10 @@ module Keen
|
|
274
277
|
"/#{self.api_version}/projects/#{self.project_id}/queries/#{analysis_type}"
|
275
278
|
end
|
276
279
|
|
280
|
+
def log_query(url, method='GET', options={})
|
281
|
+
Keen.logger.info { "[KEEN] Send #{method} query to #{url} with options #{options}" }
|
282
|
+
end
|
283
|
+
|
277
284
|
def request_headers(options={})
|
278
285
|
base_headers = api_headers(self.read_key, "sync")
|
279
286
|
options.has_key?(:headers) ? base_headers.merge(options[:headers]) : base_headers
|
data/lib/keen/version.rb
CHANGED
@@ -148,17 +148,45 @@ describe Keen::Client do
|
|
148
148
|
expect(api_response).to eq({ "result" => [1] })
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
|
-
|
153
|
-
:event_collection => "sign ups",
|
154
|
-
:actor_property => "user.id"
|
155
|
-
}]
|
156
|
-
expected_url = query_url("funnel")
|
157
|
-
stub_keen_post(expected_url, 200, :result => 1)
|
158
|
-
response = query.call("funnel", nil, { :steps => steps }, { :method => :post })
|
151
|
+
context "if log_queries is true" do
|
152
|
+
before(:each) { client.log_queries = true }
|
159
153
|
|
160
|
-
|
161
|
-
|
154
|
+
it "logs the query" do
|
155
|
+
expect(client).to receive(:log_query).with(query_url("count", "?event_collection=users"))
|
156
|
+
test_query
|
157
|
+
end
|
158
|
+
|
159
|
+
after(:each) { client.log_queries = false }
|
160
|
+
end
|
161
|
+
|
162
|
+
context "if method option is set to post" do
|
163
|
+
let(:steps) do
|
164
|
+
[{
|
165
|
+
:event_collection => "sign ups",
|
166
|
+
:actor_property => "user.id"
|
167
|
+
}]
|
168
|
+
end
|
169
|
+
let(:expected_url) { query_url("funnel") }
|
170
|
+
before(:each) { stub_keen_post(expected_url, 200, :result => 1) }
|
171
|
+
|
172
|
+
it "should call API with post body" do
|
173
|
+
response = query.call("funnel", nil, { :steps => steps }, { :method => :post })
|
174
|
+
|
175
|
+
expect_keen_post(expected_url, { :steps => steps }, "sync", read_key)
|
176
|
+
expect(response).to eq(api_response["result"])
|
177
|
+
end
|
178
|
+
|
179
|
+
context "if log_queries is true" do
|
180
|
+
before(:each) { client.log_queries = true }
|
181
|
+
|
182
|
+
it "logs the query" do
|
183
|
+
expected_params = {:steps=>[{:event_collection=>"sign ups", :actor_property=>"user.id"}]}
|
184
|
+
expect(client).to receive(:log_query).with(expected_url, 'POST', expected_params)
|
185
|
+
query.call("funnel", nil, { :steps => steps }, { :method => :post })
|
186
|
+
end
|
187
|
+
|
188
|
+
after(:each) { client.log_queries = false }
|
189
|
+
end
|
162
190
|
end
|
163
191
|
|
164
192
|
it "should add extra headers if you supply them as an option" do
|
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: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Kleissner
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multi_json
|