rack-perftools_profiler 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -54,11 +54,12 @@ For Rack::Builder, call 'use' inside the Builder constructor block
54
54
 
55
55
  == Options
56
56
 
57
- * :default_printer - can be set to 'text', 'gif', or 'pdf'. Default is :text
57
+ * :default_printer - can be set to 'text', 'gif', or 'pdf'. Default is 'text'.
58
58
  * :mode - can be set to 'cputime', 'methods', 'objects', 'walltime'. Default is :cputime. See the 'Profiling Modes' section below.
59
- * :frequency - in :cputime mode, the number of times per second the app will be sampled. Default is 100 (times/sec)
60
- * :bundler - run the profiler binary using 'bundle' if set to true. Default is false
59
+ * :frequency - in :cputime mode, the number of times per second the app will be sampled. Default is 100 (times/sec).
60
+ * :bundler - run the profiler binary using 'bundle' if set to true. Default is false.
61
61
  * :gemfile_dir - directory with Gemfile. Default is the current directory.
62
+ * :password - password-protect profiling.
62
63
 
63
64
  == Usage
64
65
 
@@ -139,6 +140,16 @@ When profiling using multiple requests, add the option when visiting \_\_start\_
139
140
 
140
141
  If the 'mode' option is omitted, the middleware will default to the mode specified at configuration.
141
142
 
143
+ == Profiling in production
144
+
145
+ It is recommended that you always profile your application in the 'production' environment (using `rails server -e production` or an equivalent), since there can be important differences between 'development' and 'production' that may affect performance.
146
+
147
+ However, it is recommended that you profile your application on a development or staging machine rather than on a production machine. This is because profiling with multiple requests *will not* work if your app is running in multiple Ruby server processes.
148
+
149
+ Profiling a single request will work if there are multiple server processes. If your staging machine is publicly accessible, you can password-protect single-request profiling by using the `:password` option and then using the `profile` GET parameter to provide the password:
150
+
151
+ curl http://localhost:3000/foobar?profile=PASSWORD
152
+
142
153
  == Changing behavior with environment variables
143
154
 
144
155
  The mode and frequency settings are enabled by setting environment variables. Some of these environment variables must be set before 'perftools' is required. If you only require 'rack/perftools_profiler', it will do the right thing (require 'perftools' after setting the environment variables).
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ begin
10
10
  gem.email = 'ben@bbrinck.com'
11
11
  gem.homepage = 'http://github.com/bhb/rack-perftools_profiler'
12
12
  gem.authors = ['Ben Brinckerhoff']
13
- gem.add_dependency 'perftools.rb', '~> 0.5'
13
+ gem.add_dependency 'perftools.rb', '~> 0.5.6'
14
14
  gem.add_dependency 'rack', '~> 1.0'
15
15
  gem.add_dependency('open4', '~> 1.0')
16
16
  gem.add_development_dependency 'rack', '~> 1.1'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.5.0
@@ -17,18 +17,22 @@ module Rack::PerftoolsProfiler
17
17
  def self.for_env(env, profiler, middleware)
18
18
  request = Rack::Request.new(env)
19
19
  klass =
20
- case request.path_info
21
- when %r{/__start__$}
22
- StartProfiling
23
- when %r{/__stop__$}
24
- StopProfiling
25
- when %r{/__data__$}
26
- ReturnData
20
+ if !profiler.password_valid?(request.GET['profile'])
21
+ ReturnPasswordError
27
22
  else
28
- if ProfileOnce.has_special_param?(request)
29
- ProfileOnce
23
+ case request.path_info
24
+ when %r{/__start__$}
25
+ StartProfiling
26
+ when %r{/__stop__$}
27
+ StopProfiling
28
+ when %r{/__data__$}
29
+ ReturnData
30
30
  else
31
- CallAppDirectly
31
+ if ProfileOnce.has_special_param?(request)
32
+ ProfileOnce
33
+ else
34
+ CallAppDirectly
35
+ end
32
36
  end
33
37
  end
34
38
  klass.new(env, profiler, middleware)
@@ -9,7 +9,7 @@ module Rack::PerftoolsProfiler
9
9
  end
10
10
 
11
11
  def self.check_printer(printer, env=nil)
12
- if printer != nil && !ProfilerMiddleware::PRINTERS.member?(printer.to_sym)
12
+ if printer != nil && printer != '' && !ProfilerMiddleware::PRINTERS.member?(printer.to_sym)
13
13
  message = "Invalid printer type: #{printer}. Valid printer values are #{ProfilerMiddleware::PRINTERS.join(", ")}"
14
14
  raise ProfilerArgumentError, message
15
15
  end
@@ -34,7 +34,9 @@ module Rack::PerftoolsProfiler
34
34
  end
35
35
 
36
36
  def delete_custom_params(env)
37
- new_env = env.clone
37
+ # I used to clone the env, but it broke any apps that used Warden
38
+ # ex) new_env = env.clone
39
+ new_env = env
38
40
 
39
41
  get_params = Rack::Request.new(new_env).GET
40
42
  get_params.delete('profile')
@@ -32,8 +32,9 @@ module Rack::PerftoolsProfiler
32
32
  @printer = (options.delete(:default_printer) { DEFAULT_PRINTER }).to_sym
33
33
  @frequency = (options.delete(:frequency) { UNSET_FREQUENCY }).to_s
34
34
  @mode = (options.delete(:mode) { DEFAULT_MODE }).to_sym
35
- @bundler = (options.delete(:bundler) { false })
36
- @gemfile_dir = (options.delete(:gemfile_dir) { DEFAULT_GEMFILE_DIR })
35
+ @bundler = options.delete(:bundler) { false }
36
+ @gemfile_dir = options.delete(:gemfile_dir) { DEFAULT_GEMFILE_DIR }
37
+ @password = options.delete(:password) { nil }
37
38
  @mode_for_request = nil
38
39
  ProfileDataAction.check_printer(@printer)
39
40
  ensure_mode_is_valid(@mode)
@@ -53,6 +54,10 @@ module Rack::PerftoolsProfiler
53
54
  def self.clear_data
54
55
  ::File.delete(PROFILING_DATA_FILE) if ::File.exists?(PROFILING_DATA_FILE)
55
56
  end
57
+
58
+ def password_valid?(password)
59
+ @password.nil? || password == @password
60
+ end
56
61
 
57
62
  def start(mode = nil)
58
63
  ensure_mode_is_changeable(mode) if mode
@@ -84,17 +89,23 @@ module Rack::PerftoolsProfiler
84
89
  printer = (options.fetch('printer') {@printer}).to_sym
85
90
  ignore = options.fetch('ignore') { nil }
86
91
  focus = options.fetch('focus') { nil }
92
+ nodecount = options.fetch('nodecount') { nil }
93
+ nodefraction = options.fetch('nodefraction') { nil }
87
94
  if ::File.exists?(PROFILING_DATA_FILE)
88
- args = "--#{printer}"
89
- args += " --ignore=#{ignore}" if ignore
90
- args += " --focus=#{focus}" if focus
91
- cmd = "pprof.rb #{args} #{PROFILING_DATA_FILE}"
92
- cmd = "bundle exec " + cmd if @bundler
93
- stdout, stderr, status = Dir.chdir(@gemfile_dir) { run(cmd) }
95
+ args = ["--#{printer}"]
96
+ args << "--ignore=#{ignore}" if ignore
97
+ args << "--focus=#{focus}" if focus
98
+ args << "--nodecount=#{nodecount}" if nodecount
99
+ args << "--nodefraction=#{nodefraction}" if nodefraction
100
+ args << PROFILING_DATA_FILE
101
+ cmd = ["pprof.rb"] + args
102
+ cmd = ["bundle", "exec"] + cmd if @bundler
103
+
104
+ stdout, stderr, status = Dir.chdir(@gemfile_dir) { run(*cmd) }
94
105
  if status!=0
95
- raise ProfilingError.new("Running the command '#{cmd}' exited with status #{status}", stderr)
106
+ raise ProfilingError.new("Running the command '#{cmd.join(" ")}' exited with status #{status}", stderr)
96
107
  elsif stdout.length == 0 && stderr.length > 0
97
- raise ProfilingError.new("Running the command '#{cmd}' failed to generate a file", stderr)
108
+ raise ProfilingError.new("Running the command '#{cmd.join(" ")}' failed to generate a file", stderr)
98
109
  else
99
110
  [printer, stdout]
100
111
  end
@@ -105,10 +116,10 @@ module Rack::PerftoolsProfiler
105
116
 
106
117
  private
107
118
 
108
- def run(command)
119
+ def run(*command)
109
120
  out = err = ""
110
121
  pid = nil
111
- status = Open4.popen4(command) do |pid, stdin, stdout, stderr|
122
+ status = Open4.popen4(*command) do |pid, stdin, stdout, stderr|
112
123
  stdin.close
113
124
  pid = pid
114
125
  out = stdout.read
@@ -9,7 +9,8 @@ module Rack::PerftoolsProfiler
9
9
  :text => 'text/plain',
10
10
  :gif => 'image/gif',
11
11
  :pdf => 'application/pdf',
12
- :callgrind => 'text/plain'
12
+ :callgrind => 'text/plain',
13
+ :raw => 'application/octet-stream'
13
14
  }
14
15
 
15
16
  PRINTERS = PRINTER_CONTENT_TYPE.keys
@@ -20,7 +21,9 @@ module Rack::PerftoolsProfiler
20
21
  end
21
22
 
22
23
  def call(env)
23
- @env = env.clone
24
+ # I used to clone the env, but it broke any apps that used Warden
25
+ # ex) @env = env.clone
26
+ @env = env
24
27
  action = Action.for_env(@env, @profiler, self)
25
28
  action.act
26
29
  action.response
@@ -58,7 +61,7 @@ module Rack::PerftoolsProfiler
58
61
  'Content-Type' => PRINTER_CONTENT_TYPE[printer],
59
62
  'Content-Length' => content_length(body)
60
63
  }
61
- if printer==:pdf
64
+ if printer ==:raw
62
65
  filetype = printer
63
66
  filename='profile_data'
64
67
  headers['Content-Disposition'] = %(attachment; filename="#{filename}.#{filetype}")
@@ -0,0 +1,14 @@
1
+ module Rack::PerftoolsProfiler
2
+
3
+ class ReturnPasswordError < Action
4
+ include Rack::PerftoolsProfiler::Utils
5
+
6
+ def response
7
+ [401,
8
+ {'Content-Type' => 'text/plain'},
9
+ ["Profiling is password-protected. Password is incorrect.\nProvide a password using the 'profile' GET param:\nhttp://domain.com/foobar?profile=PASSWORD"]]
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -12,6 +12,7 @@ require 'rack/perftools_profiler/profile_data_action'
12
12
  require 'rack/perftools_profiler/profile_once'
13
13
  require 'rack/perftools_profiler/return_data'
14
14
  require 'rack/perftools_profiler/call_app_directly'
15
+ require 'rack/perftools_profiler/return_password_error'
15
16
 
16
17
  module Rack::PerftoolsProfiler
17
18
 
Binary file
@@ -1,70 +1,63 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rack-perftools_profiler}
8
- s.version = "0.4.1"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Brinckerhoff"]
12
- s.date = %q{2011-04-21}
12
+ s.date = %q{2011-07-25}
13
13
  s.description = %q{Middleware for profiling Rack-compatible apps using perftools.rb}
14
14
  s.email = %q{ben@bbrinck.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.rdoc"
17
+ "README.rdoc"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
21
- ".gitignore",
22
- "LICENSE",
23
- "README.rdoc",
24
- "Rakefile",
25
- "VERSION",
26
- "lib/rack/perftools_profiler.rb",
27
- "lib/rack/perftools_profiler/action.rb",
28
- "lib/rack/perftools_profiler/call_app_directly.rb",
29
- "lib/rack/perftools_profiler/profile_data_action.rb",
30
- "lib/rack/perftools_profiler/profile_once.rb",
31
- "lib/rack/perftools_profiler/profiler.rb",
32
- "lib/rack/perftools_profiler/profiler_middleware.rb",
33
- "lib/rack/perftools_profiler/return_data.rb",
34
- "lib/rack/perftools_profiler/start_profiling.rb",
35
- "lib/rack/perftools_profiler/stop_profiling.rb",
36
- "lib/rack/perftools_profiler/utils.rb",
37
- "rack-perftools_profiler.gemspec",
38
- "test/multiple_request_profiling_test.rb",
39
- "test/rack-perftools-profiler_test.rb",
40
- "test/single_request_profiling_test.rb",
41
- "test/test_helper.rb"
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "lib/rack/perftools_profiler.rb",
26
+ "lib/rack/perftools_profiler/action.rb",
27
+ "lib/rack/perftools_profiler/call_app_directly.rb",
28
+ "lib/rack/perftools_profiler/profile_data_action.rb",
29
+ "lib/rack/perftools_profiler/profile_once.rb",
30
+ "lib/rack/perftools_profiler/profiler.rb",
31
+ "lib/rack/perftools_profiler/profiler_middleware.rb",
32
+ "lib/rack/perftools_profiler/return_data.rb",
33
+ "lib/rack/perftools_profiler/return_password_error.rb",
34
+ "lib/rack/perftools_profiler/start_profiling.rb",
35
+ "lib/rack/perftools_profiler/stop_profiling.rb",
36
+ "lib/rack/perftools_profiler/utils.rb",
37
+ "rack-perftools_profiler-0.4.1.gem",
38
+ "rack-perftools_profiler.gemspec",
39
+ "test/multiple_request_profiling_test.rb",
40
+ "test/rack-perftools-profiler_test.rb",
41
+ "test/single_request_profiling_test.rb",
42
+ "test/test_helper.rb"
42
43
  ]
43
44
  s.homepage = %q{http://github.com/bhb/rack-perftools_profiler}
44
- s.rdoc_options = ["--charset=UTF-8"]
45
45
  s.require_paths = ["lib"]
46
- s.rubygems_version = %q{1.3.6}
46
+ s.rubygems_version = %q{1.6.2}
47
47
  s.summary = %q{Middleware for profiling Rack-compatible apps using perftools.rb}
48
- s.test_files = [
49
- "test/multiple_request_profiling_test.rb",
50
- "test/rack-perftools-profiler_test.rb",
51
- "test/single_request_profiling_test.rb",
52
- "test/test_helper.rb"
53
- ]
54
48
 
55
49
  if s.respond_to? :specification_version then
56
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
57
50
  s.specification_version = 3
58
51
 
59
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
60
- s.add_runtime_dependency(%q<perftools.rb>, ["~> 0.5"])
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
+ s.add_runtime_dependency(%q<perftools.rb>, ["~> 0.5.6"])
61
54
  s.add_runtime_dependency(%q<rack>, ["~> 1.0"])
62
55
  s.add_runtime_dependency(%q<open4>, ["~> 1.0"])
63
56
  s.add_development_dependency(%q<rack>, ["~> 1.1"])
64
57
  s.add_development_dependency(%q<shoulda>, ["~> 2.10"])
65
58
  s.add_development_dependency(%q<mocha>, ["~> 0.9"])
66
59
  else
67
- s.add_dependency(%q<perftools.rb>, ["~> 0.5"])
60
+ s.add_dependency(%q<perftools.rb>, ["~> 0.5.6"])
68
61
  s.add_dependency(%q<rack>, ["~> 1.0"])
69
62
  s.add_dependency(%q<open4>, ["~> 1.0"])
70
63
  s.add_dependency(%q<rack>, ["~> 1.1"])
@@ -72,7 +65,7 @@ Gem::Specification.new do |s|
72
65
  s.add_dependency(%q<mocha>, ["~> 0.9"])
73
66
  end
74
67
  else
75
- s.add_dependency(%q<perftools.rb>, ["~> 0.5"])
68
+ s.add_dependency(%q<perftools.rb>, ["~> 0.5.6"])
76
69
  s.add_dependency(%q<rack>, ["~> 1.0"])
77
70
  s.add_dependency(%q<open4>, ["~> 1.0"])
78
71
  s.add_dependency(%q<rack>, ["~> 1.1"])
@@ -158,7 +158,7 @@ class MultipleRequestProfilingTest < Test::Unit::TestCase
158
158
  should "call pprof.rb using 'bundle' command if bundler is set" do
159
159
  status = stub_everything(:exitstatus => 0)
160
160
  profiled_app = Rack::PerftoolsProfiler.new(@app, :bundler => true)
161
- Open4.expects(:popen4).with(regexp_matches(/^bundle exec pprof\.rb/)).returns(status)
161
+ Open4.expects(:popen4).with('bundle', 'exec', 'pprof.rb', '--text', regexp_matches(/rack_perftools_profiler\.prof$/)).returns(status)
162
162
  profile(profiled_app)
163
163
  end
164
164
 
@@ -176,6 +176,17 @@ class MultipleRequestProfilingTest < Test::Unit::TestCase
176
176
 
177
177
  end
178
178
 
179
+ context "when the nodefraction parameter is specified" do
180
+ should "call pprof.rb with nodefraction" do
181
+ status = stub_everything(:exitstatus => 0)
182
+ profiled_app = Rack::PerftoolsProfiler.new(@app)
183
+ custom_env = Rack::MockRequest.env_for('/method1', :params => 'profile=true&nodefraction=160')
184
+ Open4.expects(:popen4).with('pprof.rb', '--text', '--nodefraction=160', regexp_matches(/rack_perftools_profiler\.prof$/)).returns(status)
185
+ profiled_app.call(custom_env)
186
+ end
187
+ end
188
+
189
+
179
190
  context "when overriding profiling mode" do
180
191
 
181
192
  should "default to configured mode if mode is empty string" do
@@ -300,7 +311,9 @@ class MultipleRequestProfilingTest < Test::Unit::TestCase
300
311
  profiled_app = Rack::PerftoolsProfiler.new(app, :default_printer => 'text')
301
312
  profiled_app.call(@start_env)
302
313
  profiled_app.call(env)
303
- assert_equal env, old_env
314
+ # I used to clone the environment to avoid conflicts, but this seems to break
315
+ # Devise/Warden.
316
+ # assert_equal env, old_env
304
317
  end
305
318
 
306
319
  should 'pass on non-profiling params in environment' do
@@ -314,7 +327,9 @@ class MultipleRequestProfilingTest < Test::Unit::TestCase
314
327
  profiled_app = Rack::PerftoolsProfiler.new(app, :default_printer => 'text')
315
328
  profiled_app.call(@start_env)
316
329
  profiled_app.call(env)
317
- assert_equal env, old_env
330
+ # I used to clone the environment to avoid conflicts, but this seems to break
331
+ # Devise/Warden.
332
+ # assert_equal env, old_env
318
333
  end
319
334
 
320
335
  should 'not alter regular calls' do
@@ -105,7 +105,7 @@ class SingleRequestProfilingTest < Test::Unit::TestCase
105
105
  should "call pprof.rb using 'bundle' command if bundler is set" do
106
106
  status = stub_everything(:exitstatus => 0)
107
107
  profiled_app = Rack::PerftoolsProfiler.new(@app, :bundler => true)
108
- Open4.expects(:popen4).with(regexp_matches(/^bundle exec pprof\.rb/)).returns(status)
108
+ Open4.expects(:popen4).with('bundle', 'exec', 'pprof.rb', '--text', regexp_matches(/rack_perftools_profiler\.prof$/)).returns(status)
109
109
  profiled_app.call(@profiled_request_env)
110
110
  end
111
111
 
@@ -123,6 +123,16 @@ class SingleRequestProfilingTest < Test::Unit::TestCase
123
123
 
124
124
  end
125
125
 
126
+ context "when the nodecount parameter is specified" do
127
+ should "call pprof.rb with nodecount" do
128
+ status = stub_everything(:exitstatus => 0)
129
+ profiled_app = Rack::PerftoolsProfiler.new(@app)
130
+ custom_env = Rack::MockRequest.env_for('/method1', :params => 'profile=true&nodecount=160')
131
+ Open4.expects(:popen4).with('pprof.rb', '--text', '--nodecount=160', regexp_matches(/rack_perftools_profiler\.prof$/)).returns(status)
132
+ profiled_app.call(custom_env)
133
+ end
134
+ end
135
+
126
136
  context "when overriding profiling mode" do
127
137
 
128
138
  should "default to configured mode if mode is empty string" do
@@ -248,11 +258,11 @@ class SingleRequestProfilingTest < Test::Unit::TestCase
248
258
 
249
259
  end
250
260
 
251
- context 'when using the pdf printer' do
261
+ context 'when using the raw printer' do
252
262
 
253
263
  should 'have default filename' do
254
- _, headers, _ = Rack::PerftoolsProfiler.new(@app, :default_printer => 'pdf').call(@profiled_request_env)
255
- assert_equal %q{attachment; filename="profile_data.pdf"}, headers['Content-Disposition']
264
+ _, headers, _ = Rack::PerftoolsProfiler.new(@app, :default_printer => 'raw').call(@profiled_request_env)
265
+ assert_equal %q{attachment; filename="profile_data.raw"}, headers['Content-Disposition']
256
266
  end
257
267
 
258
268
  end
@@ -272,7 +282,9 @@ class SingleRequestProfilingTest < Test::Unit::TestCase
272
282
  app = @app.clone
273
283
  app.expects(:call).with(expected_env)
274
284
  Rack::PerftoolsProfiler.new(app, :default_printer => 'gif').call(env)
275
- assert_equal env, old_env
285
+ # I used to clone the environment to avoid conflicts, but this seems to break
286
+ # Devise/Warden.
287
+ # assert_equal env, old_env
276
288
  end
277
289
 
278
290
  context "when request is not GET" do
@@ -312,4 +324,21 @@ class SingleRequestProfilingTest < Test::Unit::TestCase
312
324
 
313
325
  end
314
326
 
327
+ context "when a profile password is required" do
328
+ should "error if password does not match" do
329
+ app = @app.clone
330
+ env = Rack::MockRequest.env_for('/', :params => {'profile' => 'true'})
331
+ status, headers, body = Rack::PerftoolsProfiler.new(app, :default_printer => 'pdf', :password => 'secret_password').call(env)
332
+ assert_equal 401, status
333
+ assert_equal 'text/plain', headers['Content-Type']
334
+ assert_match /Profiling is password-protected\. Password is incorrect\./, RackResponseBody.new(body).to_s
335
+ end
336
+
337
+ should "profile if the parameter matches" do
338
+ env = Rack::MockRequest.env_for('/', :params => 'profile=secret_password&printer=gif')
339
+ _, headers, _ = Rack::PerftoolsProfiler.new(@app, :default_printer => 'pdf', :password => 'secret_password').call(env)
340
+ assert_equal 'image/gif', headers['Content-Type']
341
+ end
342
+ end
343
+
315
344
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-perftools_profiler
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 11
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 4
8
- - 1
9
- version: 0.4.1
8
+ - 5
9
+ - 0
10
+ version: 0.5.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Ben Brinckerhoff
@@ -14,29 +15,34 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2011-04-21 00:00:00 -06:00
18
+ date: 2011-07-25 00:00:00 -06:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: perftools.rb
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ~>
26
28
  - !ruby/object:Gem::Version
29
+ hash: 7
27
30
  segments:
28
31
  - 0
29
32
  - 5
30
- version: "0.5"
33
+ - 6
34
+ version: 0.5.6
31
35
  type: :runtime
32
36
  version_requirements: *id001
33
37
  - !ruby/object:Gem::Dependency
34
38
  name: rack
35
39
  prerelease: false
36
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
45
+ hash: 15
40
46
  segments:
41
47
  - 1
42
48
  - 0
@@ -47,9 +53,11 @@ dependencies:
47
53
  name: open4
48
54
  prerelease: false
49
55
  requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
50
57
  requirements:
51
58
  - - ~>
52
59
  - !ruby/object:Gem::Version
60
+ hash: 15
53
61
  segments:
54
62
  - 1
55
63
  - 0
@@ -60,9 +68,11 @@ dependencies:
60
68
  name: rack
61
69
  prerelease: false
62
70
  requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
63
72
  requirements:
64
73
  - - ~>
65
74
  - !ruby/object:Gem::Version
75
+ hash: 13
66
76
  segments:
67
77
  - 1
68
78
  - 1
@@ -73,9 +83,11 @@ dependencies:
73
83
  name: shoulda
74
84
  prerelease: false
75
85
  requirement: &id005 !ruby/object:Gem::Requirement
86
+ none: false
76
87
  requirements:
77
88
  - - ~>
78
89
  - !ruby/object:Gem::Version
90
+ hash: 23
79
91
  segments:
80
92
  - 2
81
93
  - 10
@@ -86,9 +98,11 @@ dependencies:
86
98
  name: mocha
87
99
  prerelease: false
88
100
  requirement: &id006 !ruby/object:Gem::Requirement
101
+ none: false
89
102
  requirements:
90
103
  - - ~>
91
104
  - !ruby/object:Gem::Version
105
+ hash: 25
92
106
  segments:
93
107
  - 0
94
108
  - 9
@@ -106,7 +120,6 @@ extra_rdoc_files:
106
120
  - README.rdoc
107
121
  files:
108
122
  - .document
109
- - .gitignore
110
123
  - LICENSE
111
124
  - README.rdoc
112
125
  - Rakefile
@@ -119,9 +132,11 @@ files:
119
132
  - lib/rack/perftools_profiler/profiler.rb
120
133
  - lib/rack/perftools_profiler/profiler_middleware.rb
121
134
  - lib/rack/perftools_profiler/return_data.rb
135
+ - lib/rack/perftools_profiler/return_password_error.rb
122
136
  - lib/rack/perftools_profiler/start_profiling.rb
123
137
  - lib/rack/perftools_profiler/stop_profiling.rb
124
138
  - lib/rack/perftools_profiler/utils.rb
139
+ - rack-perftools_profiler-0.4.1.gem
125
140
  - rack-perftools_profiler.gemspec
126
141
  - test/multiple_request_profiling_test.rb
127
142
  - test/rack-perftools-profiler_test.rb
@@ -132,33 +147,34 @@ homepage: http://github.com/bhb/rack-perftools_profiler
132
147
  licenses: []
133
148
 
134
149
  post_install_message:
135
- rdoc_options:
136
- - --charset=UTF-8
150
+ rdoc_options: []
151
+
137
152
  require_paths:
138
153
  - lib
139
154
  required_ruby_version: !ruby/object:Gem::Requirement
155
+ none: false
140
156
  requirements:
141
157
  - - ">="
142
158
  - !ruby/object:Gem::Version
159
+ hash: 3
143
160
  segments:
144
161
  - 0
145
162
  version: "0"
146
163
  required_rubygems_version: !ruby/object:Gem::Requirement
164
+ none: false
147
165
  requirements:
148
166
  - - ">="
149
167
  - !ruby/object:Gem::Version
168
+ hash: 3
150
169
  segments:
151
170
  - 0
152
171
  version: "0"
153
172
  requirements: []
154
173
 
155
174
  rubyforge_project:
156
- rubygems_version: 1.3.6
175
+ rubygems_version: 1.6.2
157
176
  signing_key:
158
177
  specification_version: 3
159
178
  summary: Middleware for profiling Rack-compatible apps using perftools.rb
160
- test_files:
161
- - test/multiple_request_profiling_test.rb
162
- - test/rack-perftools-profiler_test.rb
163
- - test/single_request_profiling_test.rb
164
- - test/test_helper.rb
179
+ test_files: []
180
+
data/.gitignore DELETED
@@ -1,6 +0,0 @@
1
- *.sw?
2
- .DS_Store
3
- coverage
4
- rdoc
5
- pkg
6
- .rvmrc