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 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