http_monkey 0.0.3 → 0.0.4

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.
data/Readme.md CHANGED
@@ -1,4 +1,4 @@
1
- # HTTP Monkey [![Build Status](https://secure.travis-ci.org/rogerleite/http_monkey.png?branch=master)](https://travis-ci.org/rogerleite/http_monkey)
1
+ # HTTP Monkey [![Mini logo](https://raw.github.com/rogerleite/http_monkey/gh-pages/images/m1_pb.png)] [![Build Status](https://secure.travis-ci.org/rogerleite/http_monkey.png?branch=master)](https://travis-ci.org/rogerleite/http_monkey)
2
2
 
3
3
  A fluent interface to do HTTP calls, free of fat dependencies and at same time, powered by middlewares rack.
4
4
  * Light and powerful interface
@@ -29,17 +29,20 @@ module HttpMonkey
29
29
  end
30
30
 
31
31
  def http_request(method, request)
32
+ client = self
32
33
  env = Client::EnvironmentBuilder.new(self, method, request).to_env
33
- code, headers, body = @conf.middlewares.execute(Middlewares::HttpRequest, env)
34
- body.close if body.respond_to?(:close) # close when is a Rack::BodyProxy
35
- response = Client::Response.new(code, headers, body)
36
34
 
37
- if (behaviour = @conf.behaviours.find(response.code))
38
- behaviour.call(self, request, response)
39
- else
40
- unknown_behaviour = @conf.behaviours.unknown_behaviour
41
- unknown_behaviour.call(self, request, response) if unknown_behaviour.respond_to?(:call)
35
+ begin
36
+ code, headers, body = @conf.middlewares.execute(Middlewares::HttpRequest, env)
37
+ body.close if body.respond_to?(:close) # close when is a Rack::BodyProxy
38
+ rescue => error
39
+ raise unless @conf.behaviours.error_behaviour
40
+ return @conf.behaviours.error_behaviour.call(client, request, error)
42
41
  end
42
+
43
+ response = Client::Response.new(code, headers, body)
44
+ behaviour = @conf.behaviours.find(response.code)
45
+ behaviour.call(client, request, response)
43
46
  end
44
47
 
45
48
  end
@@ -2,7 +2,7 @@ module HttpMonkey
2
2
 
3
3
  class Configuration::Behaviours
4
4
 
5
- attr_reader :unknown_behaviour
5
+ attr_reader :unknown_behaviour, :error_behaviour
6
6
 
7
7
  def initialize
8
8
  self.clear!
@@ -18,6 +18,7 @@ module HttpMonkey
18
18
  @behaviours = {}
19
19
  @behaviours_range = {}
20
20
  @unknown_behaviour = nil
21
+ @error_behaviour = nil
21
22
  nil
22
23
  end
23
24
 
@@ -34,6 +35,15 @@ module HttpMonkey
34
35
  @unknown_behaviour = block
35
36
  end
36
37
 
38
+ def on_error(&block)
39
+ @error_behaviour = block
40
+ end
41
+
42
+ # Public: Look for behaviours defined by *code*.
43
+ #
44
+ # code - Integer. Generally response.code
45
+ #
46
+ # Returns Proc defined by *code* or unknown_behaviour proc.
37
47
  def find(code)
38
48
  behaviour = @behaviours[code]
39
49
  if behaviour.nil?
@@ -41,7 +51,7 @@ module HttpMonkey
41
51
  range.include?(code)
42
52
  end
43
53
  end
44
- behaviour
54
+ behaviour || self.unknown_behaviour
45
55
  end
46
56
 
47
57
  end
@@ -1,3 +1,3 @@
1
1
  module HttpMonkey
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -33,4 +33,35 @@ describe HttpMonkey::Client do
33
33
  end
34
34
  end
35
35
 
36
+ describe "request error" do
37
+ before do
38
+ subject.configure do
39
+ middlewares do
40
+ self.expects(:execute).raises("request timeout")
41
+ end
42
+ end
43
+ end
44
+
45
+ let(:fake_request) do
46
+ HTTPI::Request.new("http://fake.com")
47
+ end
48
+
49
+ it "raise error by default" do
50
+ lambda {
51
+ subject.http_request(:get, fake_request)
52
+ }.must_raise(RuntimeError)
53
+ end
54
+ it "can intercept error" do
55
+ subject.configure do
56
+ behaviours.on_error do |client, request, error|
57
+ [client, request, error]
58
+ end
59
+ end
60
+ client, request, error = subject.http_request(:get, fake_request)
61
+ client.must_equal(subject)
62
+ request.must_equal(fake_request)
63
+ error.message.must_equal("request timeout")
64
+ end
65
+ end
66
+
36
67
  end
@@ -4,7 +4,15 @@ describe HttpMonkey::Configuration::Behaviours do
4
4
 
5
5
  subject { HttpMonkey::Configuration::Behaviours.new }
6
6
 
7
+ it "#on_unknown" do
8
+ subject.on_unknown { "ok" }
9
+ subject.unknown_behaviour.call.must_equal("ok")
10
+ end
11
+
7
12
  describe "#on" do
13
+ before do
14
+ subject.on_unknown # clears unknown_behaviour
15
+ end
8
16
  it "support Integer code" do
9
17
  subject.on(1) { "test int" }
10
18
 
@@ -25,10 +33,15 @@ describe HttpMonkey::Configuration::Behaviours do
25
33
  subject.find(3).call.must_equal("test array")
26
34
  subject.find(1).must_be_nil
27
35
  end
36
+ it "support unknown_behaviour" do
37
+ subject.on_unknown { "unknown" }
38
+ subject.find(666).call.must_equal("unknown")
39
+ end
28
40
  end
29
41
 
30
- it "#on_unknown" do
31
- subject.on_unknown { "ok" }
32
- subject.unknown_behaviour.call.must_equal("ok")
42
+ it "#on_error" do
43
+ subject.on_error { "on error" }
44
+ subject.error_behaviour.call.must_equal("on error")
33
45
  end
46
+
34
47
  end
@@ -3,13 +3,14 @@ require "http_monkey"
3
3
  require "minitest/autorun"
4
4
  require "minitest/reporters"
5
5
 
6
- require "mocha"
6
+ require "mocha/setup"
7
7
 
8
8
  require "support/fake_environment"
9
9
  require "support/captain_hook"
10
10
 
11
11
  MiniTest::Unit.runner = MiniTest::SuiteRunner.new
12
- MiniTest::Unit.runner.reporters << MiniTest::Reporters::SpecReporter.new
12
+ MiniTest::Unit.runner.reporters << MiniTest::Reporters::DefaultReporter.new
13
+ #MiniTest::Unit.runner.reporters << MiniTest::Reporters::SpecReporter.new
13
14
  MiniTest::Unit.runner.reporters << HttpMonkey::Support::CaptainHook.new
14
15
 
15
16
  require "minion_server"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_monkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2013-02-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70197101569580 !ruby/object:Gem::Requirement
16
+ requirement: &70246023653420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70197101569580
24
+ version_requirements: *70246023653420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: httpi
27
- requirement: &70197101569080 !ruby/object:Gem::Requirement
27
+ requirement: &70246023652900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 2.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70197101569080
35
+ version_requirements: *70246023652900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: http_objects
38
- requirement: &70197101568560 !ruby/object:Gem::Requirement
38
+ requirement: &70246023652400 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.0.4
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70197101568560
46
+ version_requirements: *70246023652400
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70197101568160 !ruby/object:Gem::Requirement
49
+ requirement: &70246023652000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70197101568160
57
+ version_requirements: *70246023652000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: minitest
60
- requirement: &70197101567600 !ruby/object:Gem::Requirement
60
+ requirement: &70246023651380 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '3'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70197101567600
68
+ version_requirements: *70246023651380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: minitest-reporters
71
- requirement: &70197101567040 !ruby/object:Gem::Requirement
71
+ requirement: &70246023650560 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.7.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70197101567040
79
+ version_requirements: *70246023650560
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: mocha
82
- requirement: &70197101566640 !ruby/object:Gem::Requirement
82
+ requirement: &70246023650160 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70197101566640
90
+ version_requirements: *70246023650160
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: minion_server
93
- requirement: &70197101566140 !ruby/object:Gem::Requirement
93
+ requirement: &70246023649660 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70197101566140
101
+ version_requirements: *70246023649660
102
102
  description: A fluent interface to do HTTP calls, free of fat dependencies and at
103
103
  same time, powered by middlewares rack.
104
104
  email: