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.
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