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 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 = ["Kyle Wild", "Josh Dzielak", "Daniel Kador"]
9
- s.email = "josh@keen.io"
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
- url = _query_url(analysis_type, event_collection, params, options)
224
- response = get_response(url)
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
@@ -1,3 +1,3 @@
1
1
  module Keen
2
- VERSION = "0.8.9"
2
+ VERSION = "0.8.10"
3
3
  end
@@ -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.9
5
- prerelease:
4
+ version: 0.8.10
6
5
  platform: ruby
7
6
  authors:
8
- - Kyle Wild
7
+ - Alex Kleissner
9
8
  - Josh Dzielak
10
- - Daniel Kador
9
+ - Joe Wegner
11
10
  autorequire:
12
11
  bindir: bin
13
12
  cert_chain: []
14
- date: 2015-02-27 00:00:00.000000000 Z
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: josh@keen.io
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: 1.8.23
198
+ rubygems_version: 2.2.2
235
199
  signing_key:
236
- specification_version: 3
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: