http_api_client 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YTliMDAwZWQ2Y2ZjMzMwNWIxMGQzN2U1ZDQ1YjM1YTQ1NWQwMzNjOQ==
5
+ data.tar.gz: !binary |-
6
+ MzIwMWJiNjQ4MDMxZDVhZDJlYzEyZTllNTFmNWUzMTkxZmRlOGY4Mg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YjMyNjQ0N2QxMjY2MDRkYzM3MjQxYzM4ODc3Y2YzMmEyZTBlYzNlMGZmOTgw
10
+ ZTk5OTg2NzMwYmU2NDgzMjY5YjViNzAyNDBkM2E4YzJiMThkODZkYWJhZTFj
11
+ MTJiN2M4OTgxM2MwMjA2M2JjMDY1OWVhMTQzYjk4OGQzN2FiNDI=
12
+ data.tar.gz: !binary |-
13
+ MzkzNTQwMjBkNzdkZjA0OGIyNjQ1MjExOWQwZWI2ZWQ4NjAxZmEwNzUxNmFm
14
+ NWIyZDk1NGNiMWZjMDhhY2EzMWRkZGRkNDA1MTc3MmQ3ZThkMzZlMGE3YTE0
15
+ MDhhZTIzMWEyMDQ2YmJhYmFkN2Y5NWJiMmExYzhiMjlhOThhNmI=
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014 Rob Monie
1
+ Copyright (c) 2014 Hooroo
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -170,3 +170,7 @@ This will install `/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt`
170
170
 
171
171
  ### 0.2.2 - 2014-04-08
172
172
  * TimedResult class is now no longer in the global namespace. It is in the HttpApiClient namespace now. Fixes problems with name collisions
173
+
174
+ ### 0.2.3 - 2014-05-05
175
+ * Add logging for json parsing failures
176
+ * Remove unused timed result
data/Rakefile CHANGED
@@ -1 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+ task :default => :spec
5
+ RSpec::Core::RakeTask.new
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency "rake"
22
23
  spec.add_development_dependency 'rspec', '~> 2.14'
23
24
  spec.add_development_dependency 'pry', '~> 0.9'
24
25
  spec.add_development_dependency 'pry-debugger', '~> 0.2'
@@ -28,6 +29,4 @@ Gem::Specification.new do |spec|
28
29
  spec.add_dependency 'net-http-persistent', '~> 2.9'
29
30
  spec.add_dependency 'oj', '~> 2.7'
30
31
 
31
-
32
-
33
32
  end
@@ -7,7 +7,6 @@ require 'oj'
7
7
  require 'http_api_client'
8
8
  require 'http_api_client/errors'
9
9
  require 'http_api_client/connection_factory'
10
- require 'http_api_client/timed_result'
11
10
 
12
11
  module HttpApiClient
13
12
  class Client
@@ -90,15 +89,28 @@ module HttpApiClient
90
89
  def handle_response(response, method, path)
91
90
  if ok?(response)
92
91
  if response.body
93
- #Don't use regular load method - any strings starting with ':' ( :-) from example) will be interpreted as a symbol
94
- Oj.strict_load(response.body)
92
+ begin
93
+ #Don't use regular load method - any strings starting with ':' ( :-) from example) will be interpreted as a symbol
94
+ Oj.strict_load(response.body)
95
+
96
+ rescue Oj::ParseError => e
97
+
98
+ HttpApiClient.logger.error(
99
+ error_class: 'OJ::ParseError',
100
+ message: e.message,
101
+ backtrace: e.backtrace,
102
+ json: response.body
103
+ )
104
+
105
+ raise e
106
+ end
95
107
  else
96
108
  true
97
109
  end
98
110
  else
99
111
  error_class = error_for_status(response.status)
100
112
  message = "#{response.status} #{method}: #{path}"
101
- HttpApiClient.logger.warn("Http Client #{error_class}: #{message}")
113
+ HttpApiClient.logger.info("Http Client #{error_class}: #{message}")
102
114
  raise error_class.new(message, response.body)
103
115
  end
104
116
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module HttpApiClient
4
- VERSION = "0.2.2"
4
+ VERSION = "0.2.3"
5
5
  end
@@ -138,7 +138,7 @@ module HttpApiClient
138
138
  describe "response status code handling" do
139
139
 
140
140
  context "with a response with a status code in the 200 range" do
141
- let(:response) { double('response', :body => '{"id": 1}', status: 200) }
141
+ let(:get_response) { double('response', :body => '{"id": 1}', status: 200) }
142
142
 
143
143
  describe "response" do
144
144
  it "returns expected response body as hash" do
@@ -170,6 +170,34 @@ module HttpApiClient
170
170
 
171
171
  end
172
172
 
173
+ describe 'response parsing' do
174
+
175
+ let(:get_response) { double('response', :body => json, status: 200) }
176
+
177
+ context 'with a valid json response' do
178
+
179
+ let(:json) { '{"id": 1}' }
180
+
181
+ it 'returns the json as a ruby hash' do
182
+ response = client.find('/path', 1)
183
+ expect(response['id']).to eq 1
184
+ end
185
+
186
+ end
187
+
188
+ context 'with and invalid json response' do
189
+
190
+ let(:json) { 'invalid json' }
191
+
192
+ it 'logs and re-raises error' do
193
+ HttpApiClient.logger.should_receive(:error)
194
+ lambda { client.find('/path', 1) }.should raise_error(Oj::ParseError)
195
+ end
196
+
197
+ end
198
+
199
+ end
200
+
173
201
  context 'without request id tracking configured' do
174
202
  it "does not add the Request-Id header to the request" do
175
203
  connection.should_receive(:get).with('/test-base-uri/path/1', {}, base_get_headers)
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
5
- prerelease:
4
+ version: 0.2.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rob Monie
@@ -12,12 +11,11 @@ authors:
12
11
  autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2014-04-14 00:00:00.000000000 Z
14
+ date: 2014-05-05 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: bundler
19
18
  requirement: !ruby/object:Gem::Requirement
20
- none: false
21
19
  requirements:
22
20
  - - ~>
23
21
  - !ruby/object:Gem::Version
@@ -25,15 +23,27 @@ dependencies:
25
23
  type: :development
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
27
  - - ~>
31
28
  - !ruby/object:Gem::Version
32
29
  version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ! '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
33
44
  - !ruby/object:Gem::Dependency
34
45
  name: rspec
35
46
  requirement: !ruby/object:Gem::Requirement
36
- none: false
37
47
  requirements:
38
48
  - - ~>
39
49
  - !ruby/object:Gem::Version
@@ -41,7 +51,6 @@ dependencies:
41
51
  type: :development
42
52
  prerelease: false
43
53
  version_requirements: !ruby/object:Gem::Requirement
44
- none: false
45
54
  requirements:
46
55
  - - ~>
47
56
  - !ruby/object:Gem::Version
@@ -49,7 +58,6 @@ dependencies:
49
58
  - !ruby/object:Gem::Dependency
50
59
  name: pry
51
60
  requirement: !ruby/object:Gem::Requirement
52
- none: false
53
61
  requirements:
54
62
  - - ~>
55
63
  - !ruby/object:Gem::Version
@@ -57,7 +65,6 @@ dependencies:
57
65
  type: :development
58
66
  prerelease: false
59
67
  version_requirements: !ruby/object:Gem::Requirement
60
- none: false
61
68
  requirements:
62
69
  - - ~>
63
70
  - !ruby/object:Gem::Version
@@ -65,7 +72,6 @@ dependencies:
65
72
  - !ruby/object:Gem::Dependency
66
73
  name: pry-debugger
67
74
  requirement: !ruby/object:Gem::Requirement
68
- none: false
69
75
  requirements:
70
76
  - - ~>
71
77
  - !ruby/object:Gem::Version
@@ -73,7 +79,6 @@ dependencies:
73
79
  type: :development
74
80
  prerelease: false
75
81
  version_requirements: !ruby/object:Gem::Requirement
76
- none: false
77
82
  requirements:
78
83
  - - ~>
79
84
  - !ruby/object:Gem::Version
@@ -81,7 +86,6 @@ dependencies:
81
86
  - !ruby/object:Gem::Dependency
82
87
  name: activesupport
83
88
  requirement: !ruby/object:Gem::Requirement
84
- none: false
85
89
  requirements:
86
90
  - - ! '>='
87
91
  - !ruby/object:Gem::Version
@@ -89,7 +93,6 @@ dependencies:
89
93
  type: :runtime
90
94
  prerelease: false
91
95
  version_requirements: !ruby/object:Gem::Requirement
92
- none: false
93
96
  requirements:
94
97
  - - ! '>='
95
98
  - !ruby/object:Gem::Version
@@ -97,7 +100,6 @@ dependencies:
97
100
  - !ruby/object:Gem::Dependency
98
101
  name: faraday
99
102
  requirement: !ruby/object:Gem::Requirement
100
- none: false
101
103
  requirements:
102
104
  - - ~>
103
105
  - !ruby/object:Gem::Version
@@ -105,7 +107,6 @@ dependencies:
105
107
  type: :runtime
106
108
  prerelease: false
107
109
  version_requirements: !ruby/object:Gem::Requirement
108
- none: false
109
110
  requirements:
110
111
  - - ~>
111
112
  - !ruby/object:Gem::Version
@@ -113,7 +114,6 @@ dependencies:
113
114
  - !ruby/object:Gem::Dependency
114
115
  name: net-http-persistent
115
116
  requirement: !ruby/object:Gem::Requirement
116
- none: false
117
117
  requirements:
118
118
  - - ~>
119
119
  - !ruby/object:Gem::Version
@@ -121,7 +121,6 @@ dependencies:
121
121
  type: :runtime
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
- none: false
125
124
  requirements:
126
125
  - - ~>
127
126
  - !ruby/object:Gem::Version
@@ -129,7 +128,6 @@ dependencies:
129
128
  - !ruby/object:Gem::Dependency
130
129
  name: oj
131
130
  requirement: !ruby/object:Gem::Requirement
132
- none: false
133
131
  requirements:
134
132
  - - ~>
135
133
  - !ruby/object:Gem::Version
@@ -137,7 +135,6 @@ dependencies:
137
135
  type: :runtime
138
136
  prerelease: false
139
137
  version_requirements: !ruby/object:Gem::Requirement
140
- none: false
141
138
  requirements:
142
139
  - - ~>
143
140
  - !ruby/object:Gem::Version
@@ -162,7 +159,6 @@ files:
162
159
  - lib/http_api_client/connection_factory.rb
163
160
  - lib/http_api_client/errors.rb
164
161
  - lib/http_api_client/rails_params_encoder.rb
165
- - lib/http_api_client/timed_result.rb
166
162
  - lib/http_api_client/version.rb
167
163
  - spec/config/http_api_clients.yml
168
164
  - spec/config/http_api_clients_with_basic_auth.yml
@@ -174,31 +170,29 @@ files:
174
170
  - spec/http_client/config_spec.rb
175
171
  - spec/http_client/connection_factory_spec.rb
176
172
  - spec/http_client/errors_spec.rb
177
- - spec/http_client/timed_result_spec.rb
178
173
  homepage: ''
179
174
  licenses:
180
175
  - MIT
176
+ metadata: {}
181
177
  post_install_message:
182
178
  rdoc_options: []
183
179
  require_paths:
184
180
  - lib
185
181
  required_ruby_version: !ruby/object:Gem::Requirement
186
- none: false
187
182
  requirements:
188
183
  - - ! '>='
189
184
  - !ruby/object:Gem::Version
190
185
  version: '0'
191
186
  required_rubygems_version: !ruby/object:Gem::Requirement
192
- none: false
193
187
  requirements:
194
188
  - - ! '>='
195
189
  - !ruby/object:Gem::Version
196
190
  version: '0'
197
191
  requirements: []
198
192
  rubyforge_project:
199
- rubygems_version: 1.8.23
193
+ rubygems_version: 2.2.2
200
194
  signing_key:
201
- specification_version: 3
195
+ specification_version: 4
202
196
  summary: ''
203
197
  test_files:
204
198
  - spec/config/http_api_clients.yml
@@ -211,4 +205,3 @@ test_files:
211
205
  - spec/http_client/config_spec.rb
212
206
  - spec/http_client/connection_factory_spec.rb
213
207
  - spec/http_client/errors_spec.rb
214
- - spec/http_client/timed_result_spec.rb
@@ -1,32 +0,0 @@
1
- # encoding: utf-8
2
- module HttpApiClient
3
- class TimedResult
4
-
5
- def self.time(event, log_data = {})
6
- start_time = Time.now
7
- yield
8
- ensure
9
-
10
- time = millis_since(start_time)
11
-
12
- log_entries = ["event_name=#{event}"]
13
- log_entries << "request_id=#{Thread.current[:request_id]}" if Thread.current[:request_id]
14
- log_entries << "timing=#{time}"
15
- log_entries.concat(as_log_entries(log_data))
16
-
17
- HttpApiClient.logger.info(log_entries.join(", "))
18
-
19
- end
20
-
21
- def self.millis_since(start_time)
22
- (Time.now - start_time) * 1000
23
- end
24
-
25
- def self.as_log_entries(hash)
26
- hash.inject [] do |result, entry|
27
- result << "#{entry[0]}=#{entry[1]}"
28
- end
29
- end
30
-
31
- end
32
- end
@@ -1,31 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'http_api_client'
4
-
5
- module HttpApiClient
6
-
7
- describe TimedResult do
8
-
9
- context 'without extra log data' do
10
-
11
- let(:request_id) { 'abc-123' }
12
- let(:logger) { HttpApiClient.logger }
13
-
14
- before do
15
- TimedResult.stub(:millis_since).and_return 1000
16
- Thread.current[:request_id] = request_id
17
- end
18
-
19
- it 'logs event with base data' do
20
- logger.should_receive(:info).with("event_name=my_event, request_id=#{request_id}, timing=#{1000}")
21
- TimedResult.time('my_event') { }
22
- end
23
-
24
- it 'logs event with extra data' do
25
- logger.should_receive(:info).with("event_name=my_event, request_id=#{request_id}, timing=#{1000}, foo=bar")
26
- TimedResult.time('my_event', { foo: 'bar' }) { }
27
- end
28
-
29
- end
30
- end
31
- end