keen 0.5.0 → 0.6.0

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.
@@ -3,9 +3,7 @@ require File.expand_path("../spec_helper", __FILE__)
3
3
  describe Keen::Client do
4
4
  let(:project_id) { "12345" }
5
5
  let(:api_key) { "abcde" }
6
- let(:collection) { "users" }
7
- let(:event_properties) { { "name" => "Bob" } }
8
- let(:api_success) { { "created" => true } }
6
+ let(:client) { Keen::Client.new(:project_id => project_id) }
9
7
 
10
8
  describe "#initialize" do
11
9
  context "deprecated" do
@@ -25,200 +23,36 @@ describe Keen::Client do
25
23
  end
26
24
  end
27
25
 
28
- describe "with a unconfigured client" do
29
- [:publish, :publish_async].each do |_method|
30
- describe "##{_method}" do
31
- it "should raise an exception if no project_id" do
32
- expect {
33
- Keen::Client.new(:api_key => api_key).
34
- send(_method, collection, event_properties)
35
- }.to raise_error(Keen::ConfigurationError)
36
- end
37
- end
38
- end
39
- end
26
+ describe "process_response" do
27
+ let (:body) { "{ \"wazzup\": 1 }" }
28
+ let (:process_response) { client.method(:process_response) }
40
29
 
41
- describe "with a configured client" do
42
- before do
43
- @client = Keen::Client.new(:project_id => project_id)
30
+ it "should raise a bad request error for a 400" do
31
+ process_response.call(200, body).should == { "wazzup" => 1 }
44
32
  end
45
33
 
46
- describe "#publish" do
47
- it "should post using the collection and properties" do
48
- stub_api(api_url(collection), 201, "")
49
- @client.publish(collection, event_properties)
50
- expect_post(api_url(collection), event_properties, "sync")
51
- end
52
-
53
- it "should return the proper response" do
54
- api_response = { "created" => true }
55
- stub_api(api_url(collection), 201, api_response)
56
- @client.publish(collection, event_properties).should == api_response
57
- end
58
-
59
- it "should raise an argument error if no event collection is specified" do
60
- expect {
61
- @client.publish(nil, {})
62
- }.to raise_error(ArgumentError)
63
- end
64
-
65
- it "should raise an argument error if no properties are specified" do
66
- expect {
67
- @client.publish(collection, nil)
68
- }.to raise_error(ArgumentError)
69
- end
70
-
71
- it "should url encode the event collection" do
72
- stub_api(api_url("foo%20bar"), 201, "")
73
- @client.publish("foo bar", event_properties)
74
- expect_post(api_url("foo%20bar"), event_properties, "sync")
75
- end
76
-
77
- it "should wrap exceptions" do
78
- stub_request(:post, api_url(collection)).to_timeout
79
- e = nil
80
- begin
81
- @client.publish(collection, event_properties)
82
- rescue Exception => exception
83
- e = exception
84
- end
85
-
86
- e.class.should == Keen::HttpError
87
- e.original_error.class.should == Timeout::Error
88
- e.message.should == "Couldn't connect to Keen IO: execution expired"
89
- end
34
+ it "should raise a bad request error for a 400" do
35
+ expect {
36
+ process_response.call(400, body)
37
+ }.to raise_error(Keen::BadRequestError)
90
38
  end
91
39
 
92
- describe "#publish_async" do
93
-
94
- # no TLS support in EventMachine on jRuby
95
- unless defined?(JRUBY_VERSION)
96
- it "should require a running event loop" do
97
- expect {
98
- @client.publish_async(collection, event_properties)
99
- }.to raise_error(Keen::Error)
100
- end
101
-
102
- it "should post the event data" do
103
- stub_api(api_url(collection), 201, api_success)
104
- EM.run {
105
- @client.publish_async(collection, event_properties).callback {
106
- begin
107
- expect_post(api_url(collection), event_properties, "async")
108
- ensure
109
- EM.stop
110
- end
111
- }
112
- }
113
- end
114
-
115
- it "should uri encode the event collection" do
116
- stub_api(api_url("foo%20bar"), 201, api_success)
117
- EM.run {
118
- @client.publish_async("foo bar", event_properties).callback {
119
- begin
120
- expect_post(api_url("foo%20bar"), event_properties, "async")
121
- ensure
122
- EM.stop
123
- end
124
- }
125
- }
126
- end
127
-
128
- it "should raise an argument error if no event collection is specified" do
129
- expect {
130
- @client.publish_async(nil, {})
131
- }.to raise_error(ArgumentError)
132
- end
133
-
134
- it "should raise an argument error if no properties are specified" do
135
- expect {
136
- @client.publish_async(collection, nil)
137
- }.to raise_error(ArgumentError)
138
- end
139
-
140
- describe "deferrable callbacks" do
141
- it "should trigger callbacks" do
142
- stub_api(api_url(collection), 201, api_success)
143
- EM.run {
144
- @client.publish_async(collection, event_properties).callback { |response|
145
- begin
146
- response.should == api_success
147
- ensure
148
- EM.stop
149
- end
150
- }
151
- }
152
- end
153
-
154
- it "should trigger errbacks" do
155
- stub_request(:post, api_url(collection)).to_timeout
156
- EM.run {
157
- @client.publish_async(collection, event_properties).errback { |error|
158
- begin
159
- error.should_not be_nil
160
- error.message.should == "Couldn't connect to Keen IO: WebMock timeout error"
161
- ensure
162
- EM.stop
163
- end
164
- }
165
- }
166
- end
167
- end
168
- end
169
-
40
+ it "should raise a authentication error for a 401" do
41
+ expect {
42
+ process_response.call(401, body)
43
+ }.to raise_error(Keen::AuthenticationError)
170
44
  end
171
45
 
172
- describe "response handling" do
173
- def stub_status_and_publish(code, api_response=nil)
174
- stub_api(api_url(collection), code, api_response)
175
- @client.publish(collection, event_properties)
176
- end
177
-
178
- it "should return the json body for a 200-201" do
179
- api_response = { "created" => "true" }
180
- stub_status_and_publish(200, api_response).should == api_response
181
- stub_status_and_publish(201, api_response).should == api_response
182
- end
183
-
184
- it "should raise a bad request error for a 400" do
185
- expect {
186
- stub_status_and_publish(400)
187
- }.to raise_error(Keen::BadRequestError)
188
- end
189
-
190
- it "should raise a authentication error for a 401" do
191
- expect {
192
- stub_status_and_publish(401)
193
- }.to raise_error(Keen::AuthenticationError)
194
- end
195
-
196
- it "should raise a not found error for a 404" do
197
- expect {
198
- stub_status_and_publish(404)
199
- }.to raise_error(Keen::NotFoundError)
200
- end
201
-
202
- it "should raise an http error otherwise" do
203
- expect {
204
- stub_status_and_publish(420)
205
- }.to raise_error(Keen::HttpError)
206
- end
46
+ it "should raise a not found error for a 404" do
47
+ expect {
48
+ process_response.call(404, body)
49
+ }.to raise_error(Keen::NotFoundError)
207
50
  end
208
51
 
209
- describe "#add_event" do
210
- it "should alias to publish" do
211
- @client.should_receive(:publish).with("users", {:a => 1}, {:b => 2})
212
- @client.add_event("users", {:a => 1}, {:b => 2})
213
- end
214
- end
215
- end
216
-
217
- describe "beacon_url" do
218
- it "should return a url with a base-64 encoded json param" do
219
- client = Keen::Client.new(project_id)
220
- client.beacon_url("sign_ups", { :name => "Bob" }).should ==
221
- "https://api.keen.io/3.0/projects/12345/events/sign_ups?data=eyJuYW1lIjoiQm9iIn0="
52
+ it "should raise an http error otherwise" do
53
+ expect {
54
+ process_response.call(420, body)
55
+ }.to raise_error(Keen::HttpError)
222
56
  end
223
57
  end
224
58
  end
@@ -11,26 +11,41 @@ require 'em-http'
11
11
  require File.expand_path("../../lib/keen", __FILE__)
12
12
 
13
13
  module Keen::SpecHelpers
14
- def stub_api(url, status, json_body)
15
- stub_request(:post, url).to_return(
16
- :status => status,
17
- :body => MultiJson.encode(json_body))
14
+ def stub_keen_request(method, url, status, response_body)
15
+ stub_request(method, url).to_return(:status => status, :body => response_body)
18
16
  end
19
17
 
20
- def expect_post(url, event_properties, sync_or_async_ua)
18
+ def stub_keen_post(url, status, response_body)
19
+ stub_keen_request(:post, url, status, MultiJson.encode(response_body))
20
+ end
21
+
22
+ def stub_keen_get(url, status, response_body)
23
+ stub_keen_request(:get, url, status, MultiJson.encode(response_body))
24
+ end
25
+
26
+ def expect_keen_request(method, url, body, sync_or_async_ua)
21
27
  user_agent = "keen-gem, v#{Keen::VERSION}, #{sync_or_async_ua}"
22
28
  user_agent += ", #{RUBY_VERSION}, #{RUBY_PLATFORM}, #{RUBY_PATCHLEVEL}"
23
29
  if defined?(RUBY_ENGINE)
24
30
  user_agent += ", #{RUBY_ENGINE}"
25
31
  end
26
32
 
27
- WebMock.should have_requested(:post, url).with(
28
- :body => MultiJson.encode(event_properties),
33
+ WebMock.should have_requested(method, url).with(
34
+ :body => body,
29
35
  :headers => { "Content-Type" => "application/json",
30
36
  "User-Agent" => user_agent })
37
+
38
+ end
39
+
40
+ def expect_keen_get(url, sync_or_async_ua)
41
+ expect_keen_request(:get, url, "", sync_or_async_ua)
42
+ end
43
+
44
+ def expect_keen_post(url, event_properties, sync_or_async_ua)
45
+ expect_keen_request(:post, url, MultiJson.encode(event_properties), sync_or_async_ua)
31
46
  end
32
47
 
33
- def api_url(collection)
48
+ def api_event_resource_url(collection)
34
49
  "https://api.keen.io/3.0/projects/#{project_id}/events/#{collection}"
35
50
  end
36
51
  end
@@ -13,16 +13,16 @@ describe Keen::HTTP::Async do
13
13
 
14
14
  describe "success" do
15
15
  it "should post the event data" do
16
- stub_api(api_url(collection), 201, api_success)
16
+ stub_keen_post(api_event_resource_url(collection), 201, api_success)
17
17
  EM.synchrony {
18
18
  @client.publish_async(collection, event_properties)
19
- expect_post(api_url(collection), event_properties, "async")
19
+ expect_keen_post(api_event_resource_url(collection), event_properties, "async")
20
20
  EM.stop
21
21
  }
22
22
  end
23
23
 
24
24
  it "should recieve the right response 'synchronously'" do
25
- stub_api(api_url(collection), 201, api_success)
25
+ stub_keen_post(api_event_resource_url(collection), 201, api_success)
26
26
  EM.synchrony {
27
27
  @client.publish_async(collection, event_properties).should == api_success
28
28
  EM.stop
@@ -32,7 +32,7 @@ describe Keen::HTTP::Async do
32
32
 
33
33
  describe "failure" do
34
34
  it "should raise an exception" do
35
- stub_request(:post, api_url(collection)).to_timeout
35
+ stub_request(:post, api_event_resource_url(collection)).to_timeout
36
36
  e = nil
37
37
  EM.synchrony {
38
38
  begin
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: keen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Kyle Wild
@@ -9,11 +10,12 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-02-24 00:00:00.000000000 Z
13
+ date: 2013-04-05 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: multi_json
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
20
  - - ~>
19
21
  - !ruby/object:Gem::Version
@@ -21,6 +23,7 @@ dependencies:
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
28
  - - ~>
26
29
  - !ruby/object:Gem::Version
@@ -43,10 +46,14 @@ files:
43
46
  - keen.gemspec
44
47
  - lib/keen.rb
45
48
  - lib/keen/client.rb
49
+ - lib/keen/client/publishing_methods.rb
50
+ - lib/keen/client/querying_methods.rb
46
51
  - lib/keen/http.rb
47
52
  - lib/keen/version.rb
48
53
  - spec/integration/api_spec.rb
49
54
  - spec/integration/spec_helper.rb
55
+ - spec/keen/client/publishing_methods_spec.rb
56
+ - spec/keen/client/querying_methods_spec.rb
50
57
  - spec/keen/client_spec.rb
51
58
  - spec/keen/keen_spec.rb
52
59
  - spec/keen/spec_helper.rb
@@ -55,30 +62,33 @@ files:
55
62
  - spec/synchrony/synchrony_spec.rb
56
63
  homepage: https://github.com/keenlabs/keen-gem
57
64
  licenses: []
58
- metadata: {}
59
65
  post_install_message:
60
66
  rdoc_options: []
61
67
  require_paths:
62
68
  - lib
63
69
  required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
64
71
  requirements:
65
- - - '>='
72
+ - - ! '>='
66
73
  - !ruby/object:Gem::Version
67
74
  version: '0'
68
75
  required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
69
77
  requirements:
70
- - - '>='
78
+ - - ! '>='
71
79
  - !ruby/object:Gem::Version
72
80
  version: '0'
73
81
  requirements: []
74
82
  rubyforge_project:
75
- rubygems_version: 2.0.0
83
+ rubygems_version: 1.8.23
76
84
  signing_key:
77
- specification_version: 4
85
+ specification_version: 3
78
86
  summary: Keen IO API Client
79
87
  test_files:
80
88
  - spec/integration/api_spec.rb
81
89
  - spec/integration/spec_helper.rb
90
+ - spec/keen/client/publishing_methods_spec.rb
91
+ - spec/keen/client/querying_methods_spec.rb
82
92
  - spec/keen/client_spec.rb
83
93
  - spec/keen/keen_spec.rb
84
94
  - spec/keen/spec_helper.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: b5661cff5eaa3017d59716166dc7b265519b95c9
4
- data.tar.gz: 4644e32d886566a16b91bf3693bee6de1ba46c65
5
- SHA512:
6
- metadata.gz: 7eeb6df1b69794c412f914a770da11addb9cbbddef4dfc17cab0cf96a27b44a9856c9eec5d654464c8f43d2c697510ba6386d16e203e954abb24bc81d0fc2f6f
7
- data.tar.gz: 14e3bbf44cdc20227605e4452de88e4097f7d9081ab262ecd5fc5a2ce5c2d3072ead63ed1f25994953736eb0f74b0911f3076529ee46c1260223b0e7bdd962f9