reverb 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 948de7b1ca89f2d1cd47c1c4ac4056e5dc26b2d7
4
- data.tar.gz: 8cf997b3e04627b2c46c63bade13622c3cb4208a
3
+ metadata.gz: d253f03805c6dfea7a968b0c6f98cfd7eff557ce
4
+ data.tar.gz: 2f988191d4ee9e915a73814aa1288bc0e6df7414
5
5
  SHA512:
6
- metadata.gz: 0077e6bd52b1ff520b72899e6cc4fe1891b04293f605a0d12b5ce4a3f0fe97de458fa42ad36bf53200a01aabf37127599421478c28bfa4e17edbfcf8ae50020d
7
- data.tar.gz: 6c39cb1f270a0e34a2d1a29033b3da2719db115da426f1301c6bbf9c52dfa013fcf4cee5a3f3bf04220f65a71400255b769e4e1aceabfb621416e12eb0157e51
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
 
@@ -1,6 +1,7 @@
1
1
  require 'json'
2
+ require 'pp'
3
+ require 'cgi'
2
4
 
3
- module Reverb
4
- end
5
-
5
+ require_relative 'reverb/configuration'
6
+ require_relative 'reverb/core'
6
7
  require_relative 'reverb/response'
@@ -0,0 +1,16 @@
1
+ module Reverb
2
+ class Configuration
3
+ attr_accessor :scrub, :scrub_etag
4
+
5
+ def initialize
6
+ @scrub = true
7
+ @scrub_etag = true
8
+ end
9
+
10
+ class << self
11
+ def current
12
+ @config ||= self.new
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ module Reverb
2
+ module Core
3
+ def configuration(&block)
4
+ yield Configuration.current
5
+ end
6
+ end
7
+
8
+ extend Core
9
+ end
@@ -5,29 +5,103 @@ module Reverb
5
5
  attr_accessor :status, :success, :data
6
6
 
7
7
  def initialize(response = nil)
8
- @status = nil
9
- @success = false
10
- @body = nil
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.3
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-03-10 00:00:00.000000000 Z
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