johac 0.9.1 → 0.9.3
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 +4 -4
- data/lib/johac/client.rb +41 -0
- data/lib/johac/connection.rb +20 -0
- data/lib/johac/response.rb +34 -45
- data/lib/johac/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a61c39d9d7aa0e5b26e26dfb95c3fa939c2ba82
|
4
|
+
data.tar.gz: cb149b3ca883aecb69c3e4254c2972349d09e779
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d047090c1859f0219e3460d167f24f87306b29106fb46a2c18b08e430ffe2aa787dffc921fa11f871ece308bfe384e52d8ce44e0e7efc28a1b1cb0bdb4cca51
|
7
|
+
data.tar.gz: 89c2d34a9bacc322a2f6f4b64e053db7e94f987d8c9d68457dbcb66700c082722c91fbc74feba93c59a3bfa0870f569af595866e2a7ae738106a817b541cea6d
|
data/lib/johac/client.rb
CHANGED
@@ -17,6 +17,7 @@ module Johac
|
|
17
17
|
# @param config [Johac::Config]
|
18
18
|
def initialize(config=nil)
|
19
19
|
@config = Johac.merged_config(config)
|
20
|
+
@mutex = Mutex.new
|
20
21
|
end
|
21
22
|
|
22
23
|
# Reference to +base_uri+ set on {Johac.config} in {Johac.configure} or in the constructor.
|
@@ -34,6 +35,44 @@ module Johac
|
|
34
35
|
config.env
|
35
36
|
end
|
36
37
|
|
38
|
+
# Produce curls commands for captured requests made, within the block
|
39
|
+
#
|
40
|
+
# @param [Block] the block which invokes one or more requests
|
41
|
+
# @return [String] requests which were captured as curl commands
|
42
|
+
def curl_capture(&block)
|
43
|
+
capture(&block).map { |env|
|
44
|
+
output = []
|
45
|
+
output << "curl -s -X#{env.method.to_s.upcase}"
|
46
|
+
env.request_headers.each { |name, value|
|
47
|
+
output << "-H'#{name}: #{value}'"
|
48
|
+
}
|
49
|
+
output << "'#{env.url}'"
|
50
|
+
if env.body
|
51
|
+
output << '-d'
|
52
|
+
output << "'#{env.body}'"
|
53
|
+
end
|
54
|
+
output.join(' ')
|
55
|
+
}
|
56
|
+
end
|
57
|
+
|
58
|
+
# Capture requests and prevent them from going to the remote. Useful
|
59
|
+
# for testing.
|
60
|
+
#
|
61
|
+
# @param [Block] the block which invokes one or more requests
|
62
|
+
# @return [Array] faraday env structs which were captured in the block
|
63
|
+
def capture(&block)
|
64
|
+
result = []
|
65
|
+
@mutex.synchronize {
|
66
|
+
begin
|
67
|
+
connection.options.context = result
|
68
|
+
yield(self)
|
69
|
+
ensure
|
70
|
+
connection.options.context = nil
|
71
|
+
end
|
72
|
+
}
|
73
|
+
result
|
74
|
+
end
|
75
|
+
|
37
76
|
protected
|
38
77
|
|
39
78
|
def head(path, options={})
|
@@ -60,6 +99,8 @@ module Johac
|
|
60
99
|
request { connection.patch(path, options[:body], options[:headers]) }
|
61
100
|
end
|
62
101
|
|
102
|
+
|
103
|
+
|
63
104
|
private
|
64
105
|
|
65
106
|
# Wrap the response or error, or raise an exception if configured
|
data/lib/johac/connection.rb
CHANGED
@@ -22,6 +22,10 @@ module Johac
|
|
22
22
|
faraday.request :request_tap, @config.request_tap
|
23
23
|
end
|
24
24
|
|
25
|
+
# Captures requests when client calls are made
|
26
|
+
# within a capture block
|
27
|
+
faraday.request :request_capture
|
28
|
+
|
25
29
|
# Retry requests
|
26
30
|
faraday.request :retry, {
|
27
31
|
max: 2,
|
@@ -111,6 +115,22 @@ module Johac
|
|
111
115
|
|
112
116
|
end
|
113
117
|
|
118
|
+
# A request middleware that captures the request and halts the request, if
|
119
|
+
# the connections context isn't nil
|
120
|
+
class RequestCaptureMiddleware < Faraday::Middleware
|
121
|
+
|
122
|
+
Faraday::Request.register_middleware :request_capture => self
|
123
|
+
|
124
|
+
def call(env)
|
125
|
+
if env.request.context.kind_of?(Array)
|
126
|
+
env.request.context << env
|
127
|
+
return false
|
128
|
+
end
|
129
|
+
@app.call(env)
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
114
134
|
# Write custom user agent to all requests.
|
115
135
|
class RequestTapMiddleware < Faraday::Middleware
|
116
136
|
|
data/lib/johac/response.rb
CHANGED
@@ -1,11 +1,9 @@
|
|
1
1
|
module Johac
|
2
2
|
class Response
|
3
3
|
|
4
|
-
attr_reader :response, :exception, :body, :status
|
4
|
+
attr_reader :response, :exception, :body, :status, :chain
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
def initialize(result)
|
6
|
+
def initialize(result, chain=[])
|
9
7
|
if result.kind_of?(Faraday::Response)
|
10
8
|
@response = result
|
11
9
|
else
|
@@ -14,6 +12,7 @@ module Johac
|
|
14
12
|
|
15
13
|
@body = result.body if result.respond_to?(:body)
|
16
14
|
@status = result.status if result.respond_to?(:status)
|
15
|
+
@chain = chain
|
17
16
|
end
|
18
17
|
|
19
18
|
# Determine if the request failed
|
@@ -30,64 +29,48 @@ module Johac
|
|
30
29
|
status
|
31
30
|
end
|
32
31
|
|
33
|
-
# @return OpenStruct object of hash
|
32
|
+
# @return OpenStruct object of hash, or empty struct if error
|
34
33
|
def object
|
35
|
-
|
34
|
+
if error?
|
35
|
+
OpenStruct.new(body)
|
36
|
+
else
|
37
|
+
OpenStruct.new
|
38
|
+
end
|
36
39
|
end
|
37
40
|
|
38
|
-
# Map body
|
41
|
+
# Map response body if successful
|
39
42
|
#
|
40
43
|
# @param block [Block] mapping function block
|
41
44
|
#
|
42
45
|
# @return result of block
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
# Dig for a item in the body
|
48
|
-
#
|
49
|
-
# @param args [Varargs] path of value
|
50
|
-
#
|
51
|
-
# @see {Hash.dig}
|
52
|
-
#
|
53
|
-
# @return value of key path
|
54
|
-
def dig(*args)
|
55
|
-
body.kind_of?(Hash) ? body.dig(*args) : nil
|
56
|
-
end
|
57
|
-
|
58
|
-
# Enumerate over response body object and return
|
59
|
-
# a new Response with a modified body
|
60
|
-
#
|
61
|
-
# @see {Enumerable}
|
62
|
-
# @param block [Block] to invoke
|
63
|
-
def each(&block)
|
64
|
-
if response?
|
65
|
-
body.each(&block)
|
46
|
+
def map(&block)
|
47
|
+
unless error?
|
48
|
+
yield body
|
66
49
|
else
|
67
|
-
|
50
|
+
nil
|
68
51
|
end
|
69
52
|
end
|
70
53
|
|
71
|
-
#
|
72
|
-
# the exception as the paramter.
|
54
|
+
# Map the exception if present
|
73
55
|
#
|
74
56
|
# @param block [Block] to invoke
|
75
|
-
def
|
57
|
+
def map_error(&block)
|
76
58
|
if error?
|
77
59
|
yield exception
|
60
|
+
else
|
61
|
+
nil
|
78
62
|
end
|
79
|
-
self
|
80
63
|
end
|
81
64
|
|
82
|
-
#
|
83
|
-
# as a parameter
|
65
|
+
# Dig for a item in the body
|
84
66
|
#
|
85
|
-
# @param
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
67
|
+
# @param args [Varargs] path of value
|
68
|
+
#
|
69
|
+
# @see {Hash.dig}
|
70
|
+
#
|
71
|
+
# @return value of key path
|
72
|
+
def dig(*args)
|
73
|
+
body.kind_of?(Hash) ? body.dig(*args) : nil
|
91
74
|
end
|
92
75
|
|
93
76
|
# Chain another request to the successful response. The expected
|
@@ -104,9 +87,11 @@ module Johac
|
|
104
87
|
def flat_map(&block)
|
105
88
|
if response?
|
106
89
|
begin
|
107
|
-
yield self
|
90
|
+
result = yield self, chain
|
91
|
+
result.set_chain(chain + [self])
|
92
|
+
result
|
108
93
|
rescue => e
|
109
|
-
Response.new(e)
|
94
|
+
Response.new(e, chain + [self])
|
110
95
|
end
|
111
96
|
else
|
112
97
|
self
|
@@ -120,6 +105,10 @@ module Johac
|
|
120
105
|
|
121
106
|
protected
|
122
107
|
|
108
|
+
def set_chain(chain)
|
109
|
+
@chain = chain
|
110
|
+
end
|
111
|
+
|
123
112
|
def response?
|
124
113
|
response != nil
|
125
114
|
end
|
data/lib/johac/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: johac
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Simpson
|
@@ -118,14 +118,14 @@ dependencies:
|
|
118
118
|
requirements:
|
119
119
|
- - "~>"
|
120
120
|
- !ruby/object:Gem::Version
|
121
|
-
version: 0.
|
121
|
+
version: 0.9.11
|
122
122
|
type: :development
|
123
123
|
prerelease: false
|
124
124
|
version_requirements: !ruby/object:Gem::Requirement
|
125
125
|
requirements:
|
126
126
|
- - "~>"
|
127
127
|
- !ruby/object:Gem::Version
|
128
|
-
version: 0.
|
128
|
+
version: 0.9.11
|
129
129
|
- !ruby/object:Gem::Dependency
|
130
130
|
name: minitest
|
131
131
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,4 +183,3 @@ signing_key:
|
|
183
183
|
specification_version: 4
|
184
184
|
summary: JSON Over HTTP API Client
|
185
185
|
test_files: []
|
186
|
-
has_rdoc: true
|