keen 0.8.9 → 0.8.10
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 +7 -0
- data/README.md +12 -0
- data/keen.gemspec +2 -2
- data/lib/keen/client/querying_methods.rb +23 -2
- data/lib/keen/version.rb +1 -1
- data/spec/keen/client/querying_methods_spec.rb +14 -1
- metadata +31 -68
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8215941d3fa167bb6a6dee9cca7676cbe7eb1747
|
4
|
+
data.tar.gz: 70feb127ffdda8835bab9a88bcb60cc181445d4e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b84e12067e3cd9407ddc50fa7d84c84f957da770ee00986c830a37ef2f2973e7f28c5acc81dff0705bd955545e0ace977a6eeaca7fbe89944823e1b9402832df
|
7
|
+
data.tar.gz: dec784de84eb32a24c3386b0af53d606f80b5640153ee86e8b33b5c7be9051668f86ff8846a9b0ae86b232de9ea964a9efa482536c27a4fb5a0c2db429544727
|
data/README.md
CHANGED
@@ -175,6 +175,7 @@ This simplifes querying code where the analysis type is dynamic.
|
|
175
175
|
Each query method or alias takes an optional hash of options as an additional parameter. Possible keys are:
|
176
176
|
|
177
177
|
`:response` – Set to `:all_keys` to return the full API response (usually only the value of the `"result"` key is returned).
|
178
|
+
`:method` - Set to `:post` to enable post body based query (https://keen.io/docs/data-analysis/post-queries/).
|
178
179
|
|
179
180
|
##### Getting Query URLs
|
180
181
|
|
@@ -376,8 +377,19 @@ loop has died. This can happen for a variety of reasons, and every app is differ
|
|
376
377
|
If you write a script that uses `publish_async`, you need to keep the script alive long enough for the call(s) to complete.
|
377
378
|
EventMachine itself won't do this because it runs in a different thread. Here's an [example gist](https://gist.github.com/dzello/7472823) that shows how to exit the process after the event has been recorded.
|
378
379
|
|
380
|
+
### Additional Considerations
|
381
|
+
|
382
|
+
##### Bots
|
383
|
+
|
384
|
+
It's not just us humans that browse the web. Spiders, crawlers, and bots share the pipes too. When it comes to analytics, this can cause a mild headache. Events generated by bots can inflate your metrics and eat up your event quota.
|
385
|
+
|
386
|
+
If you want some bot protection, check out the [Voight-Kampff](https://github.com/biola/Voight-Kampff) gem. Use the gem's `request.bot?` method to detect bots and avoid logging events.
|
387
|
+
|
379
388
|
### Changelog
|
380
389
|
|
390
|
+
##### 0.8.10
|
391
|
+
+ Added support for posting queries. Thanks [@soloman1124](https://github.com/soloman1124).
|
392
|
+
|
381
393
|
##### 0.8.9
|
382
394
|
+ Fix proxy support for sync client. Thanks [@nvieirafelipe](https://github.com/nvieirafelipe)!
|
383
395
|
|
data/keen.gemspec
CHANGED
@@ -5,8 +5,8 @@ require "keen/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "keen"
|
7
7
|
s.version = Keen::VERSION
|
8
|
-
s.authors = ["
|
9
|
-
s.email = "
|
8
|
+
s.authors = ["Alex Kleissner", "Josh Dzielak", "Joe Wegner"]
|
9
|
+
s.email = "opensource@keen.io"
|
10
10
|
s.homepage = "https://github.com/keenlabs/keen-gem"
|
11
11
|
s.summary = "Keen IO API Client"
|
12
12
|
s.description = "Send events and build analytics features into your Ruby applications."
|
@@ -220,8 +220,14 @@ module Keen
|
|
220
220
|
# filters (optional) [Array]
|
221
221
|
# timezone (optional)
|
222
222
|
def query(analysis_type, event_collection, params={}, options={})
|
223
|
-
|
224
|
-
|
223
|
+
response =
|
224
|
+
if options[:method] == :post
|
225
|
+
post_query(analysis_type, event_collection, params)
|
226
|
+
else
|
227
|
+
url = _query_url(analysis_type, event_collection, params, options)
|
228
|
+
get_response(url)
|
229
|
+
end
|
230
|
+
|
225
231
|
response_body = response.body.chomp
|
226
232
|
api_result = process_response(response.code, response_body)
|
227
233
|
api_result = api_result["result"] unless options[:response] == :all_keys
|
@@ -230,6 +236,21 @@ module Keen
|
|
230
236
|
|
231
237
|
private
|
232
238
|
|
239
|
+
def post_query(analysis_type, event_collection, params={})
|
240
|
+
ensure_project_id!
|
241
|
+
ensure_read_key!
|
242
|
+
|
243
|
+
query_params = params.dup
|
244
|
+
query_params[:event_collection] = event_collection.to_s if event_collection
|
245
|
+
Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout).post(
|
246
|
+
:path => api_query_resource_path(analysis_type),
|
247
|
+
:headers => api_headers(self.read_key, "sync"),
|
248
|
+
:body => MultiJson.encode(query_params)
|
249
|
+
)
|
250
|
+
rescue Exception => http_error
|
251
|
+
raise HttpError.new("Couldn't perform #{@analysis_type} on Keen IO: #{http_error.message}", http_error)
|
252
|
+
end
|
253
|
+
|
233
254
|
def _query_url(analysis_type, event_collection, params={}, options={})
|
234
255
|
ensure_project_id!
|
235
256
|
ensure_read_key!
|
data/lib/keen/version.rb
CHANGED
@@ -10,7 +10,7 @@ describe Keen::Client do
|
|
10
10
|
:project_id => project_id, :read_key => read_key,
|
11
11
|
:api_url => api_url ) }
|
12
12
|
|
13
|
-
def query_url(query_name, query_params)
|
13
|
+
def query_url(query_name, query_params = "")
|
14
14
|
"#{api_url}/#{api_version}/projects/#{project_id}/queries/#{query_name}#{query_params}"
|
15
15
|
end
|
16
16
|
|
@@ -147,6 +147,19 @@ describe Keen::Client do
|
|
147
147
|
api_response = query.call("funnel", nil, { :steps => [] }, { :response => :all_keys })
|
148
148
|
api_response.should == { "result" => [1] }
|
149
149
|
end
|
150
|
+
|
151
|
+
it "should call API with post body if method opton is set to post " do
|
152
|
+
steps = [{
|
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 })
|
159
|
+
|
160
|
+
expect_keen_post(expected_url, { :steps => steps }, "sync", read_key)
|
161
|
+
response.should == api_response["result"]
|
162
|
+
end
|
150
163
|
end
|
151
164
|
end
|
152
165
|
|
metadata
CHANGED
@@ -1,187 +1,152 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: keen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.10
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- Alex Kleissner
|
9
8
|
- Josh Dzielak
|
10
|
-
-
|
9
|
+
- Joe Wegner
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date: 2015-
|
13
|
+
date: 2015-05-04 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: multi_json
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
18
|
requirements:
|
21
|
-
- - ~>
|
19
|
+
- - "~>"
|
22
20
|
- !ruby/object:Gem::Version
|
23
21
|
version: '1.3'
|
24
22
|
type: :runtime
|
25
23
|
prerelease: false
|
26
24
|
version_requirements: !ruby/object:Gem::Requirement
|
27
|
-
none: false
|
28
25
|
requirements:
|
29
|
-
- - ~>
|
26
|
+
- - "~>"
|
30
27
|
- !ruby/object:Gem::Version
|
31
28
|
version: '1.3'
|
32
29
|
- !ruby/object:Gem::Dependency
|
33
30
|
name: addressable
|
34
31
|
requirement: !ruby/object:Gem::Requirement
|
35
|
-
none: false
|
36
32
|
requirements:
|
37
|
-
- - ~>
|
33
|
+
- - "~>"
|
38
34
|
- !ruby/object:Gem::Version
|
39
35
|
version: 2.3.5
|
40
36
|
type: :runtime
|
41
37
|
prerelease: false
|
42
38
|
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
39
|
requirements:
|
45
|
-
- - ~>
|
40
|
+
- - "~>"
|
46
41
|
- !ruby/object:Gem::Version
|
47
42
|
version: 2.3.5
|
48
43
|
- !ruby/object:Gem::Dependency
|
49
44
|
name: guard
|
50
45
|
requirement: !ruby/object:Gem::Requirement
|
51
|
-
none: false
|
52
46
|
requirements:
|
53
|
-
- -
|
47
|
+
- - ">="
|
54
48
|
- !ruby/object:Gem::Version
|
55
49
|
version: '0'
|
56
50
|
type: :development
|
57
51
|
prerelease: false
|
58
52
|
version_requirements: !ruby/object:Gem::Requirement
|
59
|
-
none: false
|
60
53
|
requirements:
|
61
|
-
- -
|
54
|
+
- - ">="
|
62
55
|
- !ruby/object:Gem::Version
|
63
56
|
version: '0'
|
64
57
|
- !ruby/object:Gem::Dependency
|
65
58
|
name: guard-rspec
|
66
59
|
requirement: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
60
|
requirements:
|
69
|
-
- -
|
61
|
+
- - ">="
|
70
62
|
- !ruby/object:Gem::Version
|
71
63
|
version: '0'
|
72
64
|
type: :development
|
73
65
|
prerelease: false
|
74
66
|
version_requirements: !ruby/object:Gem::Requirement
|
75
|
-
none: false
|
76
67
|
requirements:
|
77
|
-
- -
|
68
|
+
- - ">="
|
78
69
|
- !ruby/object:Gem::Version
|
79
70
|
version: '0'
|
80
71
|
- !ruby/object:Gem::Dependency
|
81
72
|
name: rb-inotify
|
82
73
|
requirement: !ruby/object:Gem::Requirement
|
83
|
-
none: false
|
84
74
|
requirements:
|
85
|
-
- -
|
75
|
+
- - ">="
|
86
76
|
- !ruby/object:Gem::Version
|
87
77
|
version: '0'
|
88
78
|
type: :development
|
89
79
|
prerelease: false
|
90
80
|
version_requirements: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
81
|
requirements:
|
93
|
-
- -
|
82
|
+
- - ">="
|
94
83
|
- !ruby/object:Gem::Version
|
95
84
|
version: '0'
|
96
85
|
- !ruby/object:Gem::Dependency
|
97
86
|
name: rb-fsevent
|
98
87
|
requirement: !ruby/object:Gem::Requirement
|
99
|
-
none: false
|
100
88
|
requirements:
|
101
|
-
- -
|
89
|
+
- - ">="
|
102
90
|
- !ruby/object:Gem::Version
|
103
91
|
version: '0'
|
104
92
|
type: :development
|
105
93
|
prerelease: false
|
106
94
|
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
none: false
|
108
95
|
requirements:
|
109
|
-
- -
|
96
|
+
- - ">="
|
110
97
|
- !ruby/object:Gem::Version
|
111
98
|
version: '0'
|
112
99
|
- !ruby/object:Gem::Dependency
|
113
100
|
name: rb-fchange
|
114
101
|
requirement: !ruby/object:Gem::Requirement
|
115
|
-
none: false
|
116
102
|
requirements:
|
117
|
-
- -
|
103
|
+
- - ">="
|
118
104
|
- !ruby/object:Gem::Version
|
119
105
|
version: '0'
|
120
106
|
type: :development
|
121
107
|
prerelease: false
|
122
108
|
version_requirements: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
109
|
requirements:
|
125
|
-
- -
|
110
|
+
- - ">="
|
126
111
|
- !ruby/object:Gem::Version
|
127
112
|
version: '0'
|
128
113
|
- !ruby/object:Gem::Dependency
|
129
114
|
name: ruby_gntp
|
130
115
|
requirement: !ruby/object:Gem::Requirement
|
131
|
-
none: false
|
132
116
|
requirements:
|
133
|
-
- -
|
117
|
+
- - ">="
|
134
118
|
- !ruby/object:Gem::Version
|
135
119
|
version: '0'
|
136
120
|
type: :development
|
137
121
|
prerelease: false
|
138
122
|
version_requirements: !ruby/object:Gem::Requirement
|
139
|
-
none: false
|
140
123
|
requirements:
|
141
|
-
- -
|
124
|
+
- - ">="
|
142
125
|
- !ruby/object:Gem::Version
|
143
126
|
version: '0'
|
144
127
|
- !ruby/object:Gem::Dependency
|
145
128
|
name: rb-readline
|
146
129
|
requirement: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
130
|
requirements:
|
149
|
-
- -
|
131
|
+
- - ">="
|
150
132
|
- !ruby/object:Gem::Version
|
151
133
|
version: '0'
|
152
134
|
type: :development
|
153
135
|
prerelease: false
|
154
136
|
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
none: false
|
156
137
|
requirements:
|
157
|
-
- -
|
158
|
-
- !ruby/object:Gem::Version
|
159
|
-
version: '0'
|
160
|
-
- !ruby/object:Gem::Dependency
|
161
|
-
name: debugger
|
162
|
-
requirement: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
|
-
requirements:
|
165
|
-
- - ! '>='
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version: '0'
|
168
|
-
type: :development
|
169
|
-
prerelease: false
|
170
|
-
version_requirements: !ruby/object:Gem::Requirement
|
171
|
-
none: false
|
172
|
-
requirements:
|
173
|
-
- - ! '>='
|
138
|
+
- - ">="
|
174
139
|
- !ruby/object:Gem::Version
|
175
140
|
version: '0'
|
176
141
|
description: Send events and build analytics features into your Ruby applications.
|
177
|
-
email:
|
142
|
+
email: opensource@keen.io
|
178
143
|
executables: []
|
179
144
|
extensions: []
|
180
145
|
extra_rdoc_files: []
|
181
146
|
files:
|
182
|
-
- .gitignore
|
183
|
-
- .rspec
|
184
|
-
- .travis.yml
|
147
|
+
- ".gitignore"
|
148
|
+
- ".rspec"
|
149
|
+
- ".travis.yml"
|
185
150
|
- Gemfile
|
186
151
|
- Guardfile
|
187
152
|
- LICENSE
|
@@ -213,27 +178,26 @@ files:
|
|
213
178
|
homepage: https://github.com/keenlabs/keen-gem
|
214
179
|
licenses:
|
215
180
|
- MIT
|
181
|
+
metadata: {}
|
216
182
|
post_install_message:
|
217
183
|
rdoc_options: []
|
218
184
|
require_paths:
|
219
185
|
- lib
|
220
186
|
required_ruby_version: !ruby/object:Gem::Requirement
|
221
|
-
none: false
|
222
187
|
requirements:
|
223
|
-
- -
|
188
|
+
- - ">="
|
224
189
|
- !ruby/object:Gem::Version
|
225
190
|
version: '0'
|
226
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
227
|
-
none: false
|
228
192
|
requirements:
|
229
|
-
- -
|
193
|
+
- - ">="
|
230
194
|
- !ruby/object:Gem::Version
|
231
195
|
version: '0'
|
232
196
|
requirements: []
|
233
197
|
rubyforge_project:
|
234
|
-
rubygems_version:
|
198
|
+
rubygems_version: 2.2.2
|
235
199
|
signing_key:
|
236
|
-
specification_version:
|
200
|
+
specification_version: 4
|
237
201
|
summary: Keen IO API Client
|
238
202
|
test_files:
|
239
203
|
- spec/integration/api_spec.rb
|
@@ -248,4 +212,3 @@ test_files:
|
|
248
212
|
- spec/spec_helper.rb
|
249
213
|
- spec/synchrony/spec_helper.rb
|
250
214
|
- spec/synchrony/synchrony_spec.rb
|
251
|
-
has_rdoc:
|