reverb 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +44 -0
- data/lib/reverb.rb +4 -3
- data/lib/reverb/configuration.rb +16 -0
- data/lib/reverb/core.rb +9 -0
- data/lib/reverb/response.rb +88 -14
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d253f03805c6dfea7a968b0c6f98cfd7eff557ce
|
4
|
+
data.tar.gz: 2f988191d4ee9e915a73814aa1288bc0e6df7414
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bff291d48bc230bac6ac13109c2a93e16a59a23b94e501001b5b7a3d617a59a43ea6ee3d26db99598735cac60d19fa1eb40c644514c933cc71e7bd6f491fbc10
|
7
|
+
data.tar.gz: 0446afe9a2a9f7fec238bea268080f78762a97be7721ed3c94d17abad3f187f0f7f86232ac61b671d4b4d24974b9a9d95f3ed8dc95461e68cb31feafeff2c5e3
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
Reverb
|
2
2
|
======
|
3
3
|
|
4
|
+
[![Build Status](https://semaphoreci.com/api/v1/projects/2ed8a518-6a6c-4ebe-844b-4a1fc310baa4/459078/badge.svg)](https://semaphoreci.com/awesomenesstv/reverb--2)
|
5
|
+
|
4
6
|
Reverb provides a generic interface for responding to API requests.
|
5
7
|
|
6
8
|
|
@@ -43,6 +45,8 @@ The only methods that are considered part of the public API are:
|
|
43
45
|
* `status`
|
44
46
|
* `data`
|
45
47
|
* `on_success`
|
48
|
+
* `scrub`
|
49
|
+
* `scrubbed`
|
46
50
|
|
47
51
|
`on_success` only gets called if `success?` is true.
|
48
52
|
|
@@ -61,6 +65,46 @@ Include them after requiring FactoryGirl:
|
|
61
65
|
require 'reverb/factories'
|
62
66
|
|
63
67
|
|
68
|
+
Sensitive Data
|
69
|
+
--------------
|
70
|
+
|
71
|
+
Responses may be scrubbed to remove sensitive data such as credentials.
|
72
|
+
Use `response.scrubbed` to access the 'scrubbed' version of the response.
|
73
|
+
|
74
|
+
By default, Reverb will scrub etags.
|
75
|
+
|
76
|
+
To turn this off, set `scrub_etags` to false in a configuration block:
|
77
|
+
|
78
|
+
```
|
79
|
+
Reverb.configure do |config|
|
80
|
+
config.scrub_etags = false
|
81
|
+
end
|
82
|
+
```
|
83
|
+
|
84
|
+
|
85
|
+
To turn off scrubbing entirely, set `scrub` to false a configuration block:
|
86
|
+
This will cause no scrubbing to occur, even if `scrub_etags` is set to true.
|
87
|
+
|
88
|
+
```
|
89
|
+
Reverb.configure do |config|
|
90
|
+
config.scrub = false
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
|
95
|
+
To scrub custom values, simply call `scrub` with the regex/string
|
96
|
+
to scrub and a replacement string.
|
97
|
+
|
98
|
+
```
|
99
|
+
response = Reverb::Response.new(original_response)
|
100
|
+
response.scrub 'sensitive-string', 'YOU_CANT_SEE_ME'
|
101
|
+
```
|
102
|
+
|
103
|
+
The code above will replace all occurences
|
104
|
+
of 'sensitive-string' with 'YOU_CANT_SEE_ME'.
|
105
|
+
|
106
|
+
|
107
|
+
|
64
108
|
Deployment
|
65
109
|
----------
|
66
110
|
|
data/lib/reverb.rb
CHANGED
data/lib/reverb/core.rb
ADDED
data/lib/reverb/response.rb
CHANGED
@@ -5,29 +5,103 @@ module Reverb
|
|
5
5
|
attr_accessor :status, :success, :data
|
6
6
|
|
7
7
|
def initialize(response = nil)
|
8
|
-
@status
|
9
|
-
@success
|
10
|
-
@body
|
8
|
+
@status = nil
|
9
|
+
@success = false
|
10
|
+
@body = nil
|
11
|
+
@response = response
|
12
|
+
@scrubbers = {}
|
11
13
|
|
12
|
-
if response
|
13
|
-
@response = response
|
14
|
-
|
15
|
-
@status = @response.status
|
16
|
-
@success = @response.success?
|
17
|
-
|
18
|
-
if success?
|
19
|
-
@body = JSON.parse(response.body)
|
20
|
-
on_success
|
21
|
-
end
|
22
|
-
end
|
14
|
+
process_response if @response
|
23
15
|
end
|
24
16
|
|
25
17
|
def success?
|
26
18
|
@success
|
27
19
|
end
|
28
20
|
|
21
|
+
def scrubbed
|
22
|
+
return @scrubbed if defined?(@scrubbed)
|
23
|
+
|
24
|
+
scrub etag, 'ETAG' if Configuration.current.scrub_etag && etag
|
25
|
+
|
26
|
+
scrubbers = @scrubbers
|
27
|
+
@scrubbers = {}
|
28
|
+
|
29
|
+
@scrubbed = PP.pp(self, '')
|
30
|
+
|
31
|
+
scrub_all scrubbers
|
32
|
+
|
33
|
+
@scrubbers = scrubbers
|
34
|
+
|
35
|
+
@scrubbed
|
36
|
+
end
|
37
|
+
|
38
|
+
def scrub(regex, value)
|
39
|
+
return self unless regex
|
40
|
+
@scrubbers[regex] = value
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
29
44
|
private
|
30
45
|
|
46
|
+
def process_response
|
47
|
+
@status = @response.status
|
48
|
+
@success = @response.success?
|
49
|
+
|
50
|
+
if success?
|
51
|
+
@body = JSON.parse(@response.body)
|
52
|
+
on_success
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def scrub_all(scrubbers)
|
57
|
+
return unless Configuration.current.scrub
|
58
|
+
scrubbers.each do |regex, value|
|
59
|
+
wipe regex, value
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def wipe(regex, value)
|
64
|
+
value ||= 'NIL_SCRUB'
|
65
|
+
|
66
|
+
regexes(regex).each do |match|
|
67
|
+
@scrubbed = @scrubbed.gsub(match, value)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def regexes(regex)
|
72
|
+
return [regex] unless regex.is_a?(String)
|
73
|
+
|
74
|
+
escaped = CGI.escape(regex)
|
75
|
+
|
76
|
+
list = Set.new([regex])
|
77
|
+
list << escaped
|
78
|
+
list << escaped.gsub('+', '%20').gsub('%2F', '/')
|
79
|
+
|
80
|
+
list
|
81
|
+
end
|
82
|
+
|
83
|
+
def etag
|
84
|
+
raw_etag &&
|
85
|
+
@response.env.response_headers['etag'].gsub(/"/, '')
|
86
|
+
end
|
87
|
+
|
88
|
+
def raw_etag
|
89
|
+
response_headers &&
|
90
|
+
@response.env.response_headers.is_a?(Hash) &&
|
91
|
+
@response.env.response_headers['etag'] || nil
|
92
|
+
end
|
93
|
+
|
94
|
+
def response_headers
|
95
|
+
response_env &&
|
96
|
+
@response.env.respond_to?(:response_headers) &&
|
97
|
+
@response.env.response_headers || nil
|
98
|
+
end
|
99
|
+
|
100
|
+
def response_env
|
101
|
+
@response.respond_to?(:env) &&
|
102
|
+
@response.env || nil
|
103
|
+
end
|
104
|
+
|
31
105
|
def body
|
32
106
|
@body
|
33
107
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reverb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis Herrick
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gems
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '4'
|
34
|
+
version: '4.1'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '4'
|
41
|
+
version: '4.1'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: cane
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,6 +107,8 @@ extra_rdoc_files:
|
|
107
107
|
files:
|
108
108
|
- README.md
|
109
109
|
- lib/reverb.rb
|
110
|
+
- lib/reverb/configuration.rb
|
111
|
+
- lib/reverb/core.rb
|
110
112
|
- lib/reverb/factories.rb
|
111
113
|
- lib/reverb/factories/response.rb
|
112
114
|
- lib/reverb/response.rb
|