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 +1 -1
- data/lib/http_monkey/client.rb +11 -8
- data/lib/http_monkey/configuration/behaviours.rb +12 -2
- data/lib/http_monkey/version.rb +1 -1
- data/test/http_monkey/client_test.rb +31 -0
- data/test/http_monkey/configuration/behaviours_test.rb +16 -3
- data/test/test_helper.rb +3 -2
- metadata +18 -18
data/Readme.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# HTTP Monkey [](https://travis-ci.org/rogerleite/http_monkey)
|
1
|
+
# HTTP Monkey [] [](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
|
data/lib/http_monkey/client.rb
CHANGED
@@ -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
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
data/lib/http_monkey/version.rb
CHANGED
@@ -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 "#
|
31
|
-
subject.
|
32
|
-
subject.
|
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
|
data/test/test_helper.rb
CHANGED
@@ -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::
|
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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *70246023653420
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: httpi
|
27
|
-
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: *
|
35
|
+
version_requirements: *70246023652900
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: http_objects
|
38
|
-
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: *
|
46
|
+
version_requirements: *70246023652400
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
|
-
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: *
|
57
|
+
version_requirements: *70246023652000
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: minitest
|
60
|
-
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: *
|
68
|
+
version_requirements: *70246023651380
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest-reporters
|
71
|
-
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: *
|
79
|
+
version_requirements: *70246023650560
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: mocha
|
82
|
-
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: *
|
90
|
+
version_requirements: *70246023650160
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: minion_server
|
93
|
-
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: *
|
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:
|