Skip to content

Commit cf340ed

Browse files
committed
Initial semi-working version
1 parent 0a8e5e2 commit cf340ed

File tree

3 files changed

+73
-5
lines changed

3 files changed

+73
-5
lines changed

init.rb

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
require 'firephp'
22

3-
ActionController::Base.extend(FirePHP)

lib/firephp.rb

+34-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,40 @@
11
module FirePHP
2-
private
2+
def self.included(controller)
3+
controller.after_filter :firephp_filter
4+
end
35

6+
protected
47
def firephp(obj = "", type = :log)
8+
@firephp ||= {}
9+
types = [:log, :info, :warn, :error]
10+
type = (types.include?(type) ? type : :log).to_s.upcase
11+
@firephp[type] ||= []
12+
@firephp[type] << obj
513
end
614
alias_method :fb, :firephp
15+
16+
private
17+
def firephp_filter
18+
# Add headers only when browser has FirePHP-Plugin
19+
return if !(request.headers["HTTP_USER_AGENT"]=~/FirePHP\//)
20+
# Do not add headers in production mode
21+
return if ENV["RAILS_ENV"] == "production"
22+
return if @firephp.blank?
23+
24+
headers["X-FirePHP-Data-100000000001"]='{'
25+
headers["X-FirePHP-Data-200000000001"]='"FirePHP.Dump":{'
26+
headers["X-FirePHP-Data-200000000002"]="\"RailsVersion\":\"#{RAILS_GEM_VERSION}\","
27+
headers["X-FirePHP-Data-299999999999"]='"__SKIP__":"__SKIP__"},'
28+
headers["X-FirePHP-Data-300000000001"]='"FirePHP.Firebug.Console":['
29+
count=2
30+
@firephp.each do |type, arr|
31+
next if !(type=~/^(LOG|INFO|WARN|ERROR)$/)
32+
arr.each do |a|
33+
headers["X-FirePHP-Data-3#{sprintf("%011d", count)}"]="[\"#{type}\",#{a.to_json}],"
34+
count+=1
35+
end
36+
end
37+
headers["X-FirePHP-Data-399999999999"]='["__SKIP__"]],'
38+
headers["X-FirePHP-Data-999999999999"]='"__SKIP__":"__SKIP__"}'
39+
end
740
end

test/firephp_rails_test.rb

+39-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,47 @@
11
require 'test_helper'
22

3-
class FirephpRailsTest < ActiveSupport::TestCase
3+
class FirePHPController < ActionController::Base
4+
include FirePHP
5+
6+
def a
7+
firephp("hi")
8+
render :nothing => true
9+
end
10+
11+
12+
def b
13+
fb("hi")
14+
render :nothing => true
15+
end
16+
end
17+
18+
class FirePHPControllerTest < ActionController::TestCase
19+
EXAMPLE_HEADER = "X-FirePHP-Data-100000000001"
20+
421
test "firephp method exists" do
5-
assert ActionController::Base.private_methods.include?("firephp")
22+
get :a
623
end
724

825
test "fb method exists" do
9-
assert ActionController::Base.private_methods.include?("fb")
26+
get :b
1027
end
28+
29+
test "headers not sent on non-firephp enabled request" do
30+
get :a
31+
assert !@response.headers.include?(EXAMPLE_HEADER)
32+
end
33+
34+
test "headers sent on firephp enabled request" do
35+
@request.env["HTTP_USER_AGENT"] = "FirePHP/"
36+
get :a
37+
assert @response.headers.include?(EXAMPLE_HEADER)
38+
end
39+
40+
test "headers not sent in production mode" do
41+
ENV["RAILS_ENV"] = "production"
42+
get :a
43+
assert !@response.headers.include?(EXAMPLE_HEADER)
44+
ENV["RAILS_ENV"] = "test"
45+
end
46+
1147
end

0 commit comments

Comments
 (0)