watchdocs-rails 0.6.0 → 0.7.0

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: 759c089b37d5306a90c488465c6f2ba497954820
4
- data.tar.gz: cf29d40f4b26ca075296059b967e587dacd46378
3
+ metadata.gz: 7d1845d7f31d111819223a47123e0e1faf07bfb8
4
+ data.tar.gz: b39fc2397b69a677627adaf348c23146f555e1e9
5
5
  SHA512:
6
- metadata.gz: da742003e254f774aba12748d588332536a22a2bc368568108b86c1c316470bc921f0d71701cf3a543c43ee2b1f912a7a321a7136cd8c6a6d9560262566a6acf
7
- data.tar.gz: 919006c6c34e2301c7954d32c7379c4139030ae306685abfe486df334430be4338b3527e888e8e0cb5975dd8001d758fb2c48a4a7f0e29c906001a9e6cdf8846
6
+ metadata.gz: ee89cfdf079de10cfb05cc5d9812c992fe0aba7f741c7f233b2adcb92bd50b3bb601bc0c00e5f3a88cdefa315ef2bc09f8b15bda0448c1293c33f17b9ab0d657
7
+ data.tar.gz: d54d105671e5479961455a3154508c3129780a15f1f3618003a7f3155b045181996f0afe38d19d6fe54c90e599db232cd5eb8923ab0497d4c6a1a70567f1b78f
@@ -1,6 +1,7 @@
1
1
  require 'watchdocs/rails/core_extensions'
2
2
  require 'watchdocs/rails/buffer'
3
3
  require 'watchdocs/rails/configuration'
4
+ require 'watchdocs/rails/helpers'
4
5
  require 'watchdocs/rails/middleware'
5
6
  require 'watchdocs/rails/recordings'
6
7
 
@@ -0,0 +1,3 @@
1
+ require 'watchdocs/rails/helpers/headers_helper'
2
+ require 'watchdocs/rails/helpers/body_helper'
3
+ require 'watchdocs/rails/helpers/query_string_helper'
@@ -0,0 +1,38 @@
1
+ module Watchdocs
2
+ module Rails
3
+ module Helpers
4
+ module BodyHelper
5
+ def body_string(body)
6
+ body_string = ''
7
+ body.each { |line| body_string += line } if body
8
+ body_string
9
+ end
10
+
11
+ def parse_response_body(body)
12
+ return if body.empty?
13
+ filter_data(JSON.parse(body))
14
+ rescue JSON::ParserError => e
15
+ log_and_return_empty "Invalid JSON data: #{e.message}, Body: #{body}"
16
+ rescue StandardError
17
+ log_and_return_empty "Response body format not supported. Body: #{body}"
18
+ end
19
+
20
+ def parse_request_body(body)
21
+ return if body.empty?
22
+ filter_data(JSON.parse(body))
23
+ rescue JSON::ParserError
24
+ begin
25
+ filter_data(Rack::Utils.parse_nested_query(body))
26
+ rescue StandardError
27
+ log_and_return_empty "Request body format not supported. Body: #{body}"
28
+ end
29
+ end
30
+
31
+ def log_and_return_empty(error)
32
+ $stderr.puts "Watchdocs Middleware Error: #{error}"
33
+ {}
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,19 @@
1
+ module Watchdocs
2
+ module Rails
3
+ module Helpers
4
+ module HeadersHelper
5
+ def request_headers(env)
6
+ env.keys
7
+ .select { |k| k.start_with? 'HTTP_' }
8
+ .map { |k| format_header(k) }
9
+ .sort
10
+ end
11
+
12
+ def format_header(header)
13
+ header.sub(/^HTTP_/, '')
14
+ .tr('_', '-')
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module Watchdocs
2
+ module Rails
3
+ module Helpers
4
+ module QueryStringHelper
5
+ def parse_query_string(params)
6
+ filter_data(
7
+ Rack::Utils.parse_nested_query(params)
8
+ )
9
+ rescue StandardError
10
+ $stderr.puts "Query String format not supported. String: #{params}"
11
+ {}
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,6 +1,10 @@
1
1
  module Watchdocs
2
2
  module Rails
3
3
  class Middleware
4
+ include Rails::Helpers::HeadersHelper
5
+ include Rails::Helpers::BodyHelper
6
+ include Rails::Helpers::QueryStringHelper
7
+
4
8
  attr_reader :app, :report
5
9
 
6
10
  def initialize(app)
@@ -10,12 +14,16 @@ module Watchdocs
10
14
 
11
15
  def call(env)
12
16
  app.call(env).tap do |response|
13
- if json_response?(response)
14
- clear_report
15
- catch_request(env)
16
- catch_response(response)
17
- match_endpoint_pattern
18
- record_call
17
+ begin
18
+ if json_response?(response)
19
+ clear_report
20
+ catch_request(env)
21
+ catch_response(response)
22
+ match_endpoint_pattern
23
+ record_call
24
+ end
25
+ rescue StandardError => e
26
+ $stderr.puts "Watchdocs Middleware Error: #{e.message}"
19
27
  end
20
28
  end
21
29
  end
@@ -35,7 +43,7 @@ module Watchdocs
35
43
  @report[:request] = {
36
44
  method: env['REQUEST_METHOD'],
37
45
  url: env['PATH_INFO'],
38
- query_string_params: Rack::Utils.parse_nested_query(env['QUERY_STRING']),
46
+ query_string_params: parse_query_string(env['QUERY_STRING']),
39
47
  body: parse_request_body(env['rack.input'].read),
40
48
  headers: request_headers(env)
41
49
  }
@@ -70,46 +78,8 @@ module Watchdocs
70
78
  ::Rails.env.test?
71
79
  end
72
80
 
73
- def request_headers(env)
74
- env.keys
75
- .select { |k| k.start_with? 'HTTP_' }
76
- .map { |k| format_header(k) }
77
- .sort
78
- end
79
-
80
- def format_header(header)
81
- header.sub(/^HTTP_/, '')
82
- .tr('_', '-')
83
- end
84
-
85
- def body_string(body)
86
- body_string = ''
87
- body.each { |line| body_string += line } if body
88
- body_string
89
- end
90
-
91
- def parse_response_body(body)
92
- return if body.empty?
93
- filter_body(JSON.parse(body))
94
- rescue JSON::ParserError => e
95
- { watchdocs_error: "Invalid JSON data: #{e.message}" }
96
- rescue StandardError
97
- { watchdocs_error: 'Response body format not supported' }
98
- end
99
-
100
- def parse_request_body(body)
101
- return if body.empty?
102
- filter_body(JSON.parse(body))
103
- rescue JSON::ParserError
104
- begin
105
- filter_body(Rack::Utils.parse_nested_query(body))
106
- rescue StandardError
107
- { watchdocs_error: 'Request body format not supported' }
108
- end
109
- end
110
-
111
- def filter_body(body)
112
- body.is_a?(Enumerable) ? body.filter_data : body
81
+ def filter_data(data)
82
+ data.is_a?(Enumerable) ? data.filter_data : data
113
83
  end
114
84
  end
115
85
  end
@@ -1,5 +1,5 @@
1
1
  module Watchdocs
2
2
  module Rails
3
- VERSION = '0.6.0'
3
+ VERSION = '0.7.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watchdocs-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mazikwyry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-21 00:00:00.000000000 Z
11
+ date: 2017-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -141,6 +141,10 @@ files:
141
141
  - lib/watchdocs/rails/core_extensions/enumerable.rb
142
142
  - lib/watchdocs/rails/core_extensions/hash.rb
143
143
  - lib/watchdocs/rails/core_extensions/object.rb
144
+ - lib/watchdocs/rails/helpers.rb
145
+ - lib/watchdocs/rails/helpers/body_helper.rb
146
+ - lib/watchdocs/rails/helpers/headers_helper.rb
147
+ - lib/watchdocs/rails/helpers/query_string_helper.rb
144
148
  - lib/watchdocs/rails/middleware.rb
145
149
  - lib/watchdocs/rails/recordings.rb
146
150
  - lib/watchdocs/rails/recordings/exporter.rb