rack-faraday_inspector 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/Gemfile +4 -0
- data/README.md +36 -0
- data/Rakefile +2 -0
- data/assets/html/inspector.html.erb +60 -0
- data/assets/sass/styles.scss +72 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/faraday/inspector.rb +12 -0
- data/lib/rack/faraday_inspector.rb +4 -0
- data/lib/rack/faraday_inspector/middleware.rb +67 -0
- data/lib/rack/faraday_inspector/railtie.rb +21 -0
- data/lib/rack/faraday_inspector/version.rb +5 -0
- data/lib/rack_faraday_inspector.rb +1 -0
- data/rack-faraday_inspector.gemspec +25 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 95fdbd002b5be9a4b528166a62e9eb9e3bfa5cb0
|
4
|
+
data.tar.gz: c0249d1e1963c4dcc899468ae4b722bc533b4499
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 885457a8bf7c316204a1eeada3102947d8eee6d326648fc43ac0fcf1da0e3e9e545239dac91cadedd3be252589a8a2f4b5d5dc9e9a57d846c85ec38757a3e6af
|
7
|
+
data.tar.gz: 19fd5656a9fa66ee65df837a49dc8157bca02326e0872669eaf1b133a705bf77688a17b3962333cb1c31e6a6015510a51c82ddf87c06591ba46a99b182dcd0e7
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# Rack::FaradayInspector
|
2
|
+
|
3
|
+
Rack::FaradayInspector renders a bit of HTML at the bottom of your pages that allows you to inspect all of the requests Faraday made for the current request.
|
4
|
+
|
5
|
+

|
6
|
+
|
7
|
+
Currently only supports Rails. Requires SASS and jQuery.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'rack-faraday_inspector', github: 'chrisb/rack-faraday_inspector'
|
15
|
+
```
|
16
|
+
|
17
|
+
I'm still actively working on this Gem, so it has not been pushed to Rubygems yet.
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
To view requests, simply add the middleware to each of the Faraday connections you want to inspect:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
require 'rack/faraday_inspector'
|
25
|
+
|
26
|
+
Faraday.new url: 'http://www.sushi.com' do |faraday|
|
27
|
+
faraday.use :inspector
|
28
|
+
# ...
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
Note: only in the `development` environment will requests be instrumented and the inspector rendered.
|
33
|
+
|
34
|
+
## Contributing
|
35
|
+
|
36
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/chrisb/rack-faraday_inspector.
|
data/Rakefile
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
<style type='text/css'>
|
2
|
+
<!--
|
3
|
+
<%= @css %>
|
4
|
+
-->
|
5
|
+
</style>
|
6
|
+
<h1>I'm here!</h1>
|
7
|
+
<div class='faraday_inspector minimized'>
|
8
|
+
<div class='prompt'>
|
9
|
+
<%= Thread.current[:faraday_requests].count %> Faraday Request<%= 's' unless Thread.current[:faraday_requests].to_a.count == 1 %>
|
10
|
+
</div>
|
11
|
+
<div class='close'>×</div>
|
12
|
+
<table class='faraday_inspector-requests'>
|
13
|
+
<% Thread.current[:faraday_requests].to_a.each do |event| %>
|
14
|
+
<% req = event[:env] %>
|
15
|
+
<tr class='event'>
|
16
|
+
<td class='method'><%= req.method.upcase %></td>
|
17
|
+
<td class='host'><%= req.url.host %></td>
|
18
|
+
<td class='path'><%= req.url.path %></td>
|
19
|
+
<td class='duration'><%= event[:duration].round(2) %>s</td>
|
20
|
+
<td class='status'><%= req.status %></td>
|
21
|
+
</tr>
|
22
|
+
<tr>
|
23
|
+
<td colspan='5'>
|
24
|
+
<div class='request'>
|
25
|
+
<% if req[:body].present? %>
|
26
|
+
<% body = req[:body] %>
|
27
|
+
<% body = JSON.pretty_generate(JSON.parse(req[:body])) if req[:response_headers]['content-type'].to_s.include?('json') %>
|
28
|
+
<%= CGI.escapeHTML(body).gsub("\n", "<br />") %>
|
29
|
+
<% else %>
|
30
|
+
(No body for this request.)
|
31
|
+
<% end %>
|
32
|
+
</div>
|
33
|
+
</td>
|
34
|
+
</tr>
|
35
|
+
<% end %>
|
36
|
+
</table>
|
37
|
+
</div>
|
38
|
+
<script type="text/javascript">
|
39
|
+
//<![CDATA[
|
40
|
+
var closeAllRequests = function() {
|
41
|
+
$('.faraday_inspector table .request').removeClass('open');
|
42
|
+
}
|
43
|
+
|
44
|
+
var showFaradayRequest = function(e) {
|
45
|
+
var $el = $(this).next().find('.request');
|
46
|
+
var isOpen = $el.hasClass('open');
|
47
|
+
closeAllRequests();
|
48
|
+
if(!isOpen) { $el.addClass('open'); }
|
49
|
+
}
|
50
|
+
|
51
|
+
var toggleFardayInspector = function(e) {
|
52
|
+
closeAllRequests();
|
53
|
+
$('.faraday_inspector').toggleClass('minimized');
|
54
|
+
$('.faraday_inspector').toggleClass('open');
|
55
|
+
};
|
56
|
+
|
57
|
+
$('.faraday_inspector tr.event').click(showFaradayRequest);
|
58
|
+
$('.faraday_inspector .prompt, .faraday_inspector .close').click(toggleFardayInspector);
|
59
|
+
//]]>
|
60
|
+
</script>
|
@@ -0,0 +1,72 @@
|
|
1
|
+
.faraday_inspector {
|
2
|
+
position: absolute;
|
3
|
+
bottom: 0;
|
4
|
+
left: 0;
|
5
|
+
background-color: #f2f2f2;
|
6
|
+
font-size: 12px;
|
7
|
+
font-family: 'Helvetica Neue', sans-serif;
|
8
|
+
|
9
|
+
&.minimized {
|
10
|
+
border: 1px solid #eee;
|
11
|
+
border-top-right-radius: 8px;
|
12
|
+
padding: 8px;
|
13
|
+
table { display: none; }
|
14
|
+
.request { display: none; }
|
15
|
+
.close { display: none; }
|
16
|
+
}
|
17
|
+
|
18
|
+
&.open {
|
19
|
+
width: 100%;
|
20
|
+
border-top: 1px solid #eee;
|
21
|
+
.prompt { display: none; }
|
22
|
+
.close {
|
23
|
+
display: inline-block;
|
24
|
+
position: absolute;
|
25
|
+
top: 0;
|
26
|
+
right: 0;
|
27
|
+
padding: 6px;
|
28
|
+
font-size: 14px;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
.event {
|
33
|
+
.method { font-weight: bold; }
|
34
|
+
.host, .duration, .status { color: #aaa; }
|
35
|
+
.host, .duration, .status, .method { width: 60px; }
|
36
|
+
.host, .duration, .status { text-align: right; }
|
37
|
+
.method { text-align: center; }
|
38
|
+
}
|
39
|
+
|
40
|
+
.request {
|
41
|
+
max-height: 400px;
|
42
|
+
text-overflow: scroll;
|
43
|
+
overflow: scroll;
|
44
|
+
font-family: 'Source Code Pro Light', 'Menlo', monospace;
|
45
|
+
margin: 10px;
|
46
|
+
background-color: #fff;
|
47
|
+
// border: 1px solid #aaa;
|
48
|
+
padding: 8px;
|
49
|
+
}
|
50
|
+
|
51
|
+
.prompt, .close {
|
52
|
+
cursor: pointer;
|
53
|
+
cursor: hand;
|
54
|
+
font-weight: bold;
|
55
|
+
}
|
56
|
+
|
57
|
+
table {
|
58
|
+
width: 100%;
|
59
|
+
font-family: 'Source Code Pro Light', 'Menlo', monospace;
|
60
|
+
.request {
|
61
|
+
display: none;
|
62
|
+
}
|
63
|
+
.request.open {
|
64
|
+
display: block;
|
65
|
+
}
|
66
|
+
tr.event:hover {
|
67
|
+
cursor: hand;
|
68
|
+
cursor: pointer;
|
69
|
+
background-color: #ffe;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "rack/faraday_inspector"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'faraday_middleware/instrumentation'
|
2
|
+
|
3
|
+
module Faraday
|
4
|
+
class Inspector < FaradayMiddleware::Instrumentation
|
5
|
+
def initialize(app, options = {})
|
6
|
+
super(app)
|
7
|
+
@name = options.fetch(:name, 'request.faraday.inspector')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
Faraday::Middleware.register_middleware inspector: -> { Faraday::Inspector }
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Rack
|
2
|
+
module FaradayInspector
|
3
|
+
class Middleware
|
4
|
+
def initialize(app)
|
5
|
+
@app = app
|
6
|
+
end
|
7
|
+
|
8
|
+
def template_path(*paths)
|
9
|
+
::File.expand_path(::File.join(::File.dirname(__FILE__), '..', '..', '..', 'assets', *paths))
|
10
|
+
end
|
11
|
+
|
12
|
+
def css_template_path
|
13
|
+
template_path('sass', 'styles.scss')
|
14
|
+
end
|
15
|
+
|
16
|
+
def css_template
|
17
|
+
::File.open(css_template_path).read
|
18
|
+
end
|
19
|
+
|
20
|
+
def render_css
|
21
|
+
@css = Sass::Engine.new(css_template,{
|
22
|
+
cache: true,
|
23
|
+
syntax: :scss,
|
24
|
+
style: :compressed,
|
25
|
+
filename: css_template_path,
|
26
|
+
}).render
|
27
|
+
end
|
28
|
+
|
29
|
+
def template
|
30
|
+
::File.open(template_path('html', 'inspector.html.erb')).read
|
31
|
+
end
|
32
|
+
|
33
|
+
def content
|
34
|
+
render_css
|
35
|
+
ERB.new(template).result(binding)
|
36
|
+
end
|
37
|
+
|
38
|
+
def clear_requests
|
39
|
+
Thread.current[:faraday_requests] = nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def call(env)
|
43
|
+
status, headers, response = @app.call(env)
|
44
|
+
|
45
|
+
if headers['Content-Type'].to_s.include? 'text/html'
|
46
|
+
new_response = []
|
47
|
+
response.each do |body|
|
48
|
+
partition = body.rpartition('</body>')
|
49
|
+
partition[0] += content.to_s
|
50
|
+
new_response << partition.join
|
51
|
+
end
|
52
|
+
|
53
|
+
# Update the content-length
|
54
|
+
headers['Content-Length'] = new_response.inject(0) do |len, body|
|
55
|
+
len += body.bytesize
|
56
|
+
end.to_s
|
57
|
+
|
58
|
+
[status, headers, new_response]
|
59
|
+
else
|
60
|
+
[status, headers, response]
|
61
|
+
end
|
62
|
+
ensure
|
63
|
+
clear_requests
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Rack
|
2
|
+
module FaradayInspector
|
3
|
+
class Railtie < Rails::Railtie
|
4
|
+
initializer 'rack.faraday_inspector.subscribe' do
|
5
|
+
next unless Rails.env.development?
|
6
|
+
ActiveSupport::Notifications.subscribe('request.faraday.inspector') do |name, starts, ends, _, env|
|
7
|
+
Thread.current[:faraday_requests] ||= []
|
8
|
+
Thread.current[:faraday_requests] << {
|
9
|
+
env: env,
|
10
|
+
duration: ends - starts
|
11
|
+
}
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "rack.faraday_inspector.inject_middleware" do
|
16
|
+
next unless Rails.env.development?
|
17
|
+
Rails.application.middleware.use Rack::FaradayInspector::Middleware
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'rack/faraday_inspector'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rack/faraday_inspector/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "rack-faraday_inspector"
|
8
|
+
spec.version = Rack::FaradayInspector::VERSION
|
9
|
+
spec.authors = ["Chris Bielinski"]
|
10
|
+
spec.email = ["chris@shadow.io"]
|
11
|
+
|
12
|
+
spec.summary = %q{View Faraday requests made in your controllers on rendered pages}
|
13
|
+
spec.description = %q{View Faraday requests made in your controllers on rendered pages}
|
14
|
+
spec.homepage = "https://github.com/chrisb/rack-faraday_inspector"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'faraday_middleware'
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rack-faraday_inspector
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Bielinski
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday_middleware
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.11'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
description: View Faraday requests made in your controllers on rendered pages
|
56
|
+
email:
|
57
|
+
- chris@shadow.io
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- Gemfile
|
64
|
+
- README.md
|
65
|
+
- Rakefile
|
66
|
+
- assets/html/inspector.html.erb
|
67
|
+
- assets/sass/styles.scss
|
68
|
+
- bin/console
|
69
|
+
- bin/setup
|
70
|
+
- lib/faraday/inspector.rb
|
71
|
+
- lib/rack/faraday_inspector.rb
|
72
|
+
- lib/rack/faraday_inspector/middleware.rb
|
73
|
+
- lib/rack/faraday_inspector/railtie.rb
|
74
|
+
- lib/rack/faraday_inspector/version.rb
|
75
|
+
- lib/rack_faraday_inspector.rb
|
76
|
+
- rack-faraday_inspector.gemspec
|
77
|
+
homepage: https://github.com/chrisb/rack-faraday_inspector
|
78
|
+
licenses: []
|
79
|
+
metadata: {}
|
80
|
+
post_install_message:
|
81
|
+
rdoc_options: []
|
82
|
+
require_paths:
|
83
|
+
- lib
|
84
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
requirements: []
|
95
|
+
rubyforge_project:
|
96
|
+
rubygems_version: 2.4.5.1
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: View Faraday requests made in your controllers on rendered pages
|
100
|
+
test_files: []
|
101
|
+
has_rdoc:
|