firephruby 0.2.0 → 0.2.1
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.
- 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
|