firephruby 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/Changelog +3 -0
  2. data/lib/firephruby.rb +86 -24
  3. metadata +2 -2
data/Changelog CHANGED
@@ -1,2 +1,5 @@
1
1
  0.2 -- changed headers to comply to FirePHP 0.2, added labels, added support
2
2
  for Rails, added version check, added 'DUMP'
3
+
4
+ 0.2.1 -- added type masking with support for arrays, hashes and other types as
5
+ hash keys and options for renderer scripts
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.0
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 build_headers msg,kind='LOG',label=nil
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 initialize_request ua
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 = initialize_request ENV['HTTP_USER_AGENT']
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 = build_headers msg,kind,label
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 = build_headers msg,kind,label
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
- initialize_request( @firephruby_user_agent ).each_pair { |k,v| @header[k] = v }
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
- def fire_dump obj, label=''
142
+ def fire_dump obj, label=''
87
143
  fire_clog obj,'DUMP', label
88
144
  end
89
- def fire_set_user_agent ua
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 set_header_var # the @header-hash from WEBrick/Mongrel-response-classes
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? the_original_process_method
113
- puts "alias the_original_process_method process"
114
- alias the_original_process_method process
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.fire_set_user_agent request.env['HTTP_USER_AGENT']
117
- response.set_header_var
118
- the_original_process_method(request, response, method, *arguments)
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 the_original_service_method service # 'duck punching' the service method
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.fire_set_user_agent( req.meta_vars['HTTP_USER_AGENT'] )
140
- the_original_service_method(req,res)
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
- fire_set_user_agent req.params['HTTP_USER_AGENT']
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.0
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-10-21 00:00:00 +02:00
12
+ date: 2008-12-07 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency