firephruby 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog +3 -0
- data/lib/firephruby.rb +86 -24
- metadata +2 -2
data/Changelog
CHANGED
data/lib/firephruby.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/local/bin/ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
-
# Version 0.2.
|
4
|
+
# Version 0.2.1
|
5
5
|
|
6
6
|
require 'json'
|
7
7
|
|
@@ -10,24 +10,27 @@ module FirePHRuby
|
|
10
10
|
FPHR_FUNCTION_NAMES = %w(LOG INFO WARN ERROR)
|
11
11
|
module Common
|
12
12
|
FPHR_INIT_HEADERS = { 'X-Wf-Protocol-1' => 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2',
|
13
|
+
# 'X-FirePHP-RendererURL' => 'http://banza.net/firephruby/Renderer.js',
|
14
|
+
# 'X-FirePHP-ProcessorURL' => 'http://banza.net/firephruby/RequestProcessor.js',
|
13
15
|
'X-Wf-1-Plugin-1' =>'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.2.0'}
|
14
16
|
FPHR_INIT_HEADERS_LOG = { 'X-Wf-1-Structure-1' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1' }
|
15
17
|
FPHR_INIT_HEADERS_DUMP = { 'X-Wf-1-Structure-2' => 'http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1' }
|
16
18
|
FPHR_KINDS = %w(LOG INFO WARN ERROR DUMP TRACE EXCEPTION TABLE)
|
17
19
|
FPHR_LEGACY_WARNING = { 'X-FirePHP-Data-100000000001' => '{' ,
|
18
20
|
'X-FirePHP-Data-300000000001' => '"FirePHP.Firebug.Console":[',
|
19
|
-
'X-FirePHP-Data-300000000002' => '[ "INFO", "This version of FirePHP is no longer supported by FirePHRuby. Please update to 0.2 or higher." ],',
|
21
|
+
'X-FirePHP-Data-300000000002' => '[ "INFO", "This version of FirePHP is no longer supported by FirePHRuby. Please update to 0.2.1 or higher." ],',
|
20
22
|
'X-FirePHP-Data-399999999999' => '["__SKIP__"]],',
|
21
23
|
'X-FirePHP-Data-999999999999' => '"__SKIP__":"__SKIP__"}' }
|
22
24
|
MAX_LENGTH = 4000
|
23
25
|
|
24
|
-
def
|
26
|
+
def _firephruby_build_headers msg,kind='LOG',label=nil
|
25
27
|
headers = []
|
26
28
|
t_pref,g_kind = kind == 'DUMP' ? [ 2, 'DUMP' ] : [ 1, 'LOG' ]
|
27
29
|
file, line, function = caller[2].split ':'
|
28
30
|
msg_meta = { 'Type' => kind, 'File' => file, 'Line' => line }
|
29
31
|
msg_meta['Label'] = label if label
|
30
32
|
@fire_msg_index = 0 unless instance_variables.member? '@fire_msg_index'
|
33
|
+
msg = _firephruby_mask_ruby_types msg if ( @firephruby_options.has_key? :mask_ruby_types && :mask_ruby_types )
|
31
34
|
msg = kind == 'DUMP' ? "{#{label.to_json}:#{msg.to_json}}" : "[#{msg_meta.to_json},#{msg.to_json}]"
|
32
35
|
#puts msg.to_json
|
33
36
|
(msg.gsub /.{#{MAX_LENGTH}}/ do |m| "#{m}\n" end).split( "\n" ).each_with_index do |msg_part,ind|
|
@@ -41,26 +44,76 @@ module FirePHRuby
|
|
41
44
|
end
|
42
45
|
return headers
|
43
46
|
end
|
44
|
-
def
|
47
|
+
def _firephruby_set_options opts
|
48
|
+
@firephruby_options = {} unless instance_variables.member? '@firephruby_options'
|
49
|
+
@firephruby_options.merge! opts
|
50
|
+
end
|
51
|
+
def _firephruby_initialize_request ua
|
45
52
|
@firephp_version = ua.match( /FirePHP\/(\d+)\.(\d+)\.([\db.]+)/)
|
46
53
|
@firephp_version = @firephp_version[1,3].map {|i| i.to_i} if @firephp_version
|
47
54
|
firephp_01_version = ( @firephp_version || [0,2] )[0,2].join('.').to_f<0.2
|
48
55
|
@firephpruby_skip = @firephp_version == nil || firephp_01_version
|
49
|
-
firephp_01_version ? FPHR_LEGACY_WARNING : FPHR_INIT_HEADERS
|
56
|
+
headers = firephp_01_version ? FPHR_LEGACY_WARNING : FPHR_INIT_HEADERS
|
57
|
+
headers['X-FirePHP-RendererURL'] = @firephruby_options[:renderer_url] if @firephruby_options.has_key? :renderer_url
|
58
|
+
headers['X-FirePHP-ProcessorURL'] = @firephruby_options[:processor_url] if @firephruby_options.has_key? :processor_url
|
59
|
+
return headers
|
60
|
+
end
|
61
|
+
def firephruby_internal_log msg
|
62
|
+
@fire_msg_index = 0 unless instance_variables.member? '@fire_msg_index'
|
63
|
+
@fire_msg_index += 1
|
64
|
+
msg = "[#{{:Type=>'LOG',:Label=>'____________________________ internal message'}.to_json},#{msg.to_json}]"
|
65
|
+
puts "X-Wf-1-1-1-#{@fire_msg_index}: #{msg.size}|#{msg}|"
|
66
|
+
end
|
67
|
+
def _firephruby_mask_ruby_types data, skip=true # skip masking if not hash key
|
68
|
+
#firephruby_internal_log data.class.to_s
|
69
|
+
if data.is_a? String
|
70
|
+
return data
|
71
|
+
elsif data.is_a? Integer
|
72
|
+
return "__INT__#{data.to_s}__INT__"
|
73
|
+
elsif data.is_a? Numeric
|
74
|
+
return skip ? data : "__NUM__#{data.to_s}__NUM__"
|
75
|
+
elsif data.is_a? TrueClass or data.is_a? FalseClass
|
76
|
+
return skip ? data : "__BOOL__#{data.to_s}__BOOL__"
|
77
|
+
elsif data.nil?
|
78
|
+
return skip ? data : '__NIL__nil__NIL__'
|
79
|
+
elsif data.is_a? Symbol
|
80
|
+
return "__SYM__:#{data.to_s}__SYM__"
|
81
|
+
elsif data.is_a? Array
|
82
|
+
#firephruby_internal_log 'wird'
|
83
|
+
return data.map { |v| _firephruby_mask_ruby_types v }
|
84
|
+
elsif data.is_a? Hash
|
85
|
+
k_types = [ Symbol, Fixnum, Bignum, Float, Range, TrueClass, FalseClass, NilClass ]
|
86
|
+
j_types = [ Array, Hash ]
|
87
|
+
data.each { |k,v| data[k] = _firephruby_mask_ruby_types v }
|
88
|
+
keys_to_mask = data.keys.select { |k| k_types.include? k.class }
|
89
|
+
keys_to_mask.each { |k| nk = _firephruby_mask_ruby_types k,false; data[nk] = data[k]; data.delete k }
|
90
|
+
keys_to_jsonize = data.keys.select { |k| j_types.include? k.class }
|
91
|
+
keys_to_jsonize.each do |k|
|
92
|
+
nk = _firephruby_mask_ruby_types( k,false ).to_json
|
93
|
+
data["__JSON__#{nk}__JSON__"] = data[k]
|
94
|
+
data.delete k
|
95
|
+
end
|
96
|
+
return data
|
97
|
+
elsif data.is_a? Range
|
98
|
+
return "__RNG__#{data.to_s}__RNG__"
|
99
|
+
end
|
100
|
+
firephruby_internal_log 'shit happens - class: ' + data.class.to_s
|
101
|
+
return data
|
50
102
|
end
|
51
103
|
end
|
52
104
|
|
53
105
|
class CGI
|
54
106
|
include Common
|
55
|
-
def initialize
|
107
|
+
def initialize options={}
|
108
|
+
_firephruby_set_options options
|
56
109
|
ENV['HTTP_USER_AGENT'] = 'FirePHP/0.2.b.7' unless ENV['HTTP_USER_AGENT'] # for being callable from shell
|
57
|
-
headers =
|
110
|
+
headers = _firephruby_initialize_request ENV['HTTP_USER_AGENT']
|
58
111
|
return if @firephpruby_skip
|
59
112
|
headers.each_pair { |k,v| puts "#{k}: #{v}" }
|
60
113
|
end
|
61
114
|
def firelog msg,kind='LOG', label=nil
|
62
115
|
return if @firephpruby_skip
|
63
|
-
headers =
|
116
|
+
headers = _firephruby_build_headers msg,kind,label
|
64
117
|
headers.each { |h| puts "#{h[0]}: #{h[1]}" }
|
65
118
|
end
|
66
119
|
FPHR_FUNCTION_NAMES.each { |x| self.class_eval "def #{x.downcase} msg, label=nil; firelog msg,'#{x}',label; end" }
|
@@ -76,24 +129,27 @@ module FirePHRuby
|
|
76
129
|
include Common
|
77
130
|
def fire_clog msg,kind='LOG', label=nil
|
78
131
|
return if defined?( @firephpruby_skip ) && @firephpruby_skip
|
79
|
-
headers =
|
132
|
+
headers = _firephruby_build_headers msg,kind,label
|
80
133
|
headers.each { |h| @header[h[0]] = h[1] }
|
81
134
|
return if defined? @firephruby_inited
|
82
|
-
|
135
|
+
_firephruby_initialize_request( @firephruby_user_agent ).each_pair { |k,v| @header[k] = v }
|
83
136
|
@firephruby_inited = true
|
84
137
|
end
|
138
|
+
def fire_options options={}
|
139
|
+
_firephruby_set_options options
|
140
|
+
end
|
85
141
|
FPHR_FUNCTION_NAMES.each { |x| self.module_eval "def fire_#{x.downcase} msg, label=nil; fire_clog msg,'#{x}',label; end" }
|
86
|
-
|
142
|
+
def fire_dump obj, label=''
|
87
143
|
fire_clog obj,'DUMP', label
|
88
144
|
end
|
89
|
-
def
|
145
|
+
def _firephruby_set_user_agent ua
|
90
146
|
@firephruby_user_agent = ua
|
91
147
|
end
|
92
148
|
end
|
93
149
|
|
94
150
|
module Rails
|
95
151
|
include HTTPResponse
|
96
|
-
def
|
152
|
+
def _firephruby_set_header_var # the @header-hash from WEBrick/Mongrel-response-classes
|
97
153
|
@header = @headers # is called @headers in the Rails-response-class
|
98
154
|
end
|
99
155
|
module Interface
|
@@ -101,6 +157,9 @@ module FirePHRuby
|
|
101
157
|
def fire_dump obj, label=''
|
102
158
|
response.fire_clog obj,'DUMP', label
|
103
159
|
end
|
160
|
+
def fire_options opts={}
|
161
|
+
response.fire_options opts
|
162
|
+
end
|
104
163
|
end
|
105
164
|
end
|
106
165
|
end
|
@@ -109,13 +168,14 @@ if defined? ActionController # guessing Rails should be a little bit more detail
|
|
109
168
|
module ActionController
|
110
169
|
class Base
|
111
170
|
include FirePHRuby::Rails::Interface
|
112
|
-
unless defined?
|
113
|
-
puts "alias
|
114
|
-
alias
|
171
|
+
unless defined? _firephruby_the_original_process_method
|
172
|
+
puts "alias _firephruby_the_original_process_method process"
|
173
|
+
alias _firephruby_the_original_process_method process
|
115
174
|
def process(request, response, method = :perform_action, *arguments)
|
116
|
-
response.
|
117
|
-
response.
|
118
|
-
|
175
|
+
response._firephruby_set_user_agent request.env['HTTP_USER_AGENT']
|
176
|
+
response._firephruby_set_header_var
|
177
|
+
response._firephruby_set_options( {} )
|
178
|
+
_firephruby_the_original_process_method(request, response, method, *arguments)
|
119
179
|
end
|
120
180
|
end
|
121
181
|
end
|
@@ -134,10 +194,11 @@ elsif defined? WEBrick
|
|
134
194
|
include FirePHRuby::HTTPResponse
|
135
195
|
end
|
136
196
|
class HTTPServer
|
137
|
-
alias
|
197
|
+
alias _firephruby_the_original_service_method service # 'duck punching' the service method
|
138
198
|
def service(req,res) # to get req.properties to the response object
|
139
|
-
res.
|
140
|
-
|
199
|
+
res._firephruby_set_user_agent( req.meta_vars['HTTP_USER_AGENT'] )
|
200
|
+
res._firephruby_set_options( {} )
|
201
|
+
_firephruby_the_original_service_method(req,res)
|
141
202
|
end
|
142
203
|
end
|
143
204
|
end
|
@@ -145,8 +206,9 @@ elsif defined? Mongrel
|
|
145
206
|
module Mongrel
|
146
207
|
class HttpResponse
|
147
208
|
include FirePHRuby::HTTPResponse
|
148
|
-
def fire_init req
|
149
|
-
|
209
|
+
def fire_init req, options={}
|
210
|
+
_firephruby_set_user_agent req.params['HTTP_USER_AGENT']
|
211
|
+
_firephruby_set_options options
|
150
212
|
end
|
151
213
|
end
|
152
214
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: firephruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors: []
|
7
7
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-07 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|