rack-allocation_stats 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/demo_rack_apps/Rails_3.2.15/app/controllers/application_controller.rb +3 -0
  3. data/demo_rack_apps/Rails_3.2.15/app/controllers/projects_controller.rb +83 -0
  4. data/demo_rack_apps/Rails_3.2.15/app/controllers/tasks_controller.rb +83 -0
  5. data/demo_rack_apps/Rails_3.2.15/app/helpers/application_helper.rb +2 -0
  6. data/demo_rack_apps/Rails_3.2.15/app/helpers/projects_helper.rb +2 -0
  7. data/demo_rack_apps/Rails_3.2.15/app/helpers/tasks_helper.rb +2 -0
  8. data/demo_rack_apps/Rails_3.2.15/app/models/project.rb +4 -0
  9. data/demo_rack_apps/Rails_3.2.15/app/models/task.rb +4 -0
  10. data/demo_rack_apps/Rails_3.2.15/config/application.rb +63 -0
  11. data/demo_rack_apps/Rails_3.2.15/config/boot.rb +6 -0
  12. data/demo_rack_apps/Rails_3.2.15/config/environment.rb +5 -0
  13. data/demo_rack_apps/Rails_3.2.15/config/environments/development.rb +37 -0
  14. data/demo_rack_apps/Rails_3.2.15/config/environments/production.rb +67 -0
  15. data/demo_rack_apps/Rails_3.2.15/config/environments/test.rb +37 -0
  16. data/demo_rack_apps/Rails_3.2.15/config/initializers/backtrace_silencers.rb +7 -0
  17. data/demo_rack_apps/Rails_3.2.15/config/initializers/inflections.rb +15 -0
  18. data/demo_rack_apps/Rails_3.2.15/config/initializers/mime_types.rb +5 -0
  19. data/demo_rack_apps/Rails_3.2.15/config/initializers/secret_token.rb +7 -0
  20. data/demo_rack_apps/Rails_3.2.15/config/initializers/session_store.rb +8 -0
  21. data/demo_rack_apps/Rails_3.2.15/config/initializers/wrap_parameters.rb +14 -0
  22. data/demo_rack_apps/Rails_3.2.15/config/routes.rb +64 -0
  23. data/demo_rack_apps/Rails_3.2.15/db/migrate/20131104031828_create_projects.rb +11 -0
  24. data/demo_rack_apps/Rails_3.2.15/db/migrate/20131104031829_create_tasks.rb +11 -0
  25. data/demo_rack_apps/Rails_3.2.15/db/schema.rb +32 -0
  26. data/demo_rack_apps/Rails_3.2.15/db/seeds.rb +15 -0
  27. data/demo_rack_apps/Rails_3.2.15/test/functional/projects_controller_test.rb +49 -0
  28. data/demo_rack_apps/Rails_3.2.15/test/functional/tasks_controller_test.rb +49 -0
  29. data/demo_rack_apps/Rails_3.2.15/test/performance/browsing_test.rb +12 -0
  30. data/demo_rack_apps/Rails_3.2.15/test/test_helper.rb +13 -0
  31. data/demo_rack_apps/Rails_3.2.15/test/unit/helpers/projects_helper_test.rb +4 -0
  32. data/demo_rack_apps/Rails_3.2.15/test/unit/helpers/tasks_helper_test.rb +4 -0
  33. data/demo_rack_apps/Rails_3.2.15/test/unit/project_test.rb +7 -0
  34. data/demo_rack_apps/Rails_3.2.15/test/unit/task_test.rb +7 -0
  35. data/demo_rack_apps/Rails_4.0.1/app/controllers/application_controller.rb +5 -0
  36. data/demo_rack_apps/Rails_4.0.1/app/controllers/projects_controller.rb +74 -0
  37. data/demo_rack_apps/Rails_4.0.1/app/controllers/tasks_controller.rb +74 -0
  38. data/demo_rack_apps/Rails_4.0.1/app/helpers/application_helper.rb +2 -0
  39. data/demo_rack_apps/Rails_4.0.1/app/helpers/projects_helper.rb +2 -0
  40. data/demo_rack_apps/Rails_4.0.1/app/helpers/tasks_helper.rb +2 -0
  41. data/demo_rack_apps/Rails_4.0.1/app/models/project.rb +3 -0
  42. data/demo_rack_apps/Rails_4.0.1/app/models/task.rb +3 -0
  43. data/demo_rack_apps/Rails_4.0.1/config/application.rb +24 -0
  44. data/demo_rack_apps/Rails_4.0.1/config/boot.rb +4 -0
  45. data/demo_rack_apps/Rails_4.0.1/config/environment.rb +5 -0
  46. data/demo_rack_apps/Rails_4.0.1/config/environments/development.rb +29 -0
  47. data/demo_rack_apps/Rails_4.0.1/config/environments/production.rb +80 -0
  48. data/demo_rack_apps/Rails_4.0.1/config/environments/test.rb +36 -0
  49. data/demo_rack_apps/Rails_4.0.1/config/initializers/backtrace_silencers.rb +7 -0
  50. data/demo_rack_apps/Rails_4.0.1/config/initializers/filter_parameter_logging.rb +4 -0
  51. data/demo_rack_apps/Rails_4.0.1/config/initializers/inflections.rb +16 -0
  52. data/demo_rack_apps/Rails_4.0.1/config/initializers/mime_types.rb +5 -0
  53. data/demo_rack_apps/Rails_4.0.1/config/initializers/secret_token.rb +12 -0
  54. data/demo_rack_apps/Rails_4.0.1/config/initializers/session_store.rb +3 -0
  55. data/demo_rack_apps/Rails_4.0.1/config/initializers/wrap_parameters.rb +14 -0
  56. data/demo_rack_apps/Rails_4.0.1/config/routes.rb +60 -0
  57. data/demo_rack_apps/Rails_4.0.1/db/migrate/20131102201320_create_projects.rb +11 -0
  58. data/demo_rack_apps/Rails_4.0.1/db/migrate/20131102201321_create_tasks.rb +11 -0
  59. data/demo_rack_apps/Rails_4.0.1/db/schema.rb +32 -0
  60. data/demo_rack_apps/Rails_4.0.1/db/seeds.rb +15 -0
  61. data/demo_rack_apps/Rails_4.0.1/test/controllers/projects_controller_test.rb +49 -0
  62. data/demo_rack_apps/Rails_4.0.1/test/controllers/tasks_controller_test.rb +49 -0
  63. data/demo_rack_apps/Rails_4.0.1/test/helpers/projects_helper_test.rb +4 -0
  64. data/demo_rack_apps/Rails_4.0.1/test/helpers/tasks_helper_test.rb +4 -0
  65. data/demo_rack_apps/Rails_4.0.1/test/models/project_test.rb +7 -0
  66. data/demo_rack_apps/Rails_4.0.1/test/models/task_test.rb +7 -0
  67. data/demo_rack_apps/Rails_4.0.1/test/test_helper.rb +15 -0
  68. data/lib/rack/allocation_stats.rb +22 -0
  69. data/lib/rack/allocation_stats/action.rb +14 -0
  70. data/lib/rack/allocation_stats/call_app_directly.rb +14 -0
  71. data/lib/rack/allocation_stats/formatters/base.rb +11 -0
  72. data/lib/rack/allocation_stats/formatters/html.rb +23 -0
  73. data/lib/rack/allocation_stats/formatters/json.rb +12 -0
  74. data/lib/rack/allocation_stats/formatters/text.rb +33 -0
  75. data/lib/rack/allocation_stats/middleware.rb +62 -0
  76. data/lib/rack/allocation_stats/tracer.rb +80 -0
  77. data/spec/factories.rb +53 -0
  78. data/spec/hello_world_app.rb +21 -0
  79. data/spec/rack/allocation_stats_spec.rb +216 -0
  80. data/spec/sinatra_app.rb +10 -0
  81. data/spec/sinatra_templates_app.rb +85 -0
  82. data/spec/spec_helper.rb +55 -0
  83. data/spec/yajl_app.rb +20 -0
  84. data/spec/yaml_app.rb +20 -0
  85. metadata +169 -0
@@ -0,0 +1,216 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0, found in the LICENSE file.
3
+
4
+ require_relative "../spec_helper"
5
+
6
+ describe Rack::AllocationStats do
7
+ before do
8
+ @app = HelloWorldApp.new
9
+ @vanilla_request_env = Rack::MockRequest.env_for("/")
10
+ @traced_request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true")
11
+ end
12
+
13
+ it "returns something when called with a tracing request" do
14
+ status, headers, _ = Rack::AllocationStats.new(@app).call(@traced_request_env)
15
+
16
+ expect(headers["Content-Type"]).to eq "text/plain"
17
+ expect(status).to be 200
18
+ end
19
+
20
+ it "does not interfere when not a trace request" do
21
+ _, _, body = Rack::AllocationStats.new(@app).call(@vanilla_request_env)
22
+
23
+ expect(body).to eq ["Hello Rack!"]
24
+ end
25
+
26
+ it "deletes ras[] params before hitting next app" do
27
+ allocation_stats = Rack::AllocationStats.new(@app)
28
+
29
+ @app.should_receive(:call).with(query_string({}))
30
+
31
+ status, headers, _ = allocation_stats.call(@traced_request_env)
32
+ end
33
+
34
+ it "returns the correct body when called with a tracing request" do
35
+ _, _, body = Rack::AllocationStats.new(@app).call(@traced_request_env)
36
+
37
+ expected_body = [
38
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 4 `String`\n",
39
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 1 `Array<String>`\n",
40
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 1 `Array<Fixnum,Hash,Array>`\n",
41
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 1 `Hash`\n",
42
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[0]} allocated 1 `String`\n"
43
+ ]
44
+
45
+ expect(body).to include(expected_body[0])
46
+ expect(body).to include(expected_body[1])
47
+ expect(body).to include(expected_body[2])
48
+ expect(body).to include(expected_body[3])
49
+ expect(body).to include(expected_body[4])
50
+ end
51
+
52
+ it "returns the correct body when called with alias_paths" do
53
+ request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[alias_paths]=true")
54
+ _, _, body = Rack::AllocationStats.new(@app).call(request_env)
55
+
56
+ expected_body = [
57
+ "<PWD>/spec/hello_world_app.rb:#{@app.allocating_lines[1]} allocated 4 `String`\n",
58
+ "<PWD>/spec/hello_world_app.rb:#{@app.allocating_lines[1]} allocated 1 `Array<String>`\n",
59
+ "<PWD>/spec/hello_world_app.rb:#{@app.allocating_lines[1]} allocated 1 `Array<Fixnum,Hash,Array>`\n",
60
+ "<PWD>/spec/hello_world_app.rb:#{@app.allocating_lines[1]} allocated 1 `Hash`\n",
61
+ "<PWD>/spec/hello_world_app.rb:#{@app.allocating_lines[0]} allocated 1 `String`\n"
62
+ ]
63
+
64
+ expect(body).to include(expected_body[0])
65
+ expect(body).to include(expected_body[1])
66
+ expect(body).to include(expected_body[2])
67
+ expect(body).to include(expected_body[3])
68
+ expect(body).to include(expected_body[4])
69
+ end
70
+
71
+ it "returns correct body when called with a tracing request with times" do
72
+ request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[times]=4")
73
+ _, _, body = Rack::AllocationStats.new(@app).call(request_env)
74
+
75
+ expected_body = [
76
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 16 `String`\n",
77
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 4 `Array<String>`\n",
78
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 4 `Array<Fixnum,Hash,Array>`\n",
79
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[1]} allocated 4 `Hash`\n",
80
+ "#{HelloWorldApp::FULL_PATH}:#{@app.allocating_lines[0]} allocated 4 `String`\n"
81
+ ]
82
+
83
+ expect(body).to include(expected_body[0])
84
+ expect(body).to include(expected_body[1])
85
+ expect(body).to include(expected_body[2])
86
+ expect(body).to include(expected_body[3])
87
+ expect(body).to include(expected_body[4])
88
+ end
89
+
90
+ it "returns correct body when called on just local files" do
91
+ yaml_app = YamlApp.new
92
+ request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[scope]=.")
93
+ _, _, body = Rack::AllocationStats.new(yaml_app).call(request_env)
94
+
95
+ # should be:
96
+ # yaml_app.rb:15 allocated 4 `String`
97
+ # yaml_app.rb:14 allocated 2 `String`
98
+ # yaml_app.rb:14 allocated 1 `Array<>`
99
+ # yaml_app.rb:14 allocated 1 `Array<String>`
100
+ # yaml_app.rb:15 allocated 1 `Array<Fixnum,Hash,Array>`
101
+ # yaml_app.rb:15 allocated 1 `Array<String>`
102
+ # yaml_app.rb:15 allocated 1 `Hash`
103
+
104
+ expect(body.size).to eq 7
105
+ end
106
+
107
+ it "returns the correct body when called on a specific directory" do
108
+ yaml_app = YamlApp.new
109
+ psych_request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[scope]=psych")
110
+ _, _, body = Rack::AllocationStats.new(yaml_app).call(psych_request_env)
111
+
112
+ expect(body.size).to eq 44
113
+ end
114
+
115
+ it "returns HTML5 in response to an interactive request" do
116
+ interactive_request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[output]=interactive")
117
+ _, _, body = Rack::AllocationStats.new(@app).call(interactive_request_env)
118
+
119
+ expect(body[0]).to match /^<!DOCTYPE html>/
120
+ end
121
+
122
+ it "returns the corrent Content-Length in the headers" do
123
+ file = "/foo/bar.rb"
124
+ line = 7
125
+
126
+ # TODO 5 comes from factories.rb; it should come from here.
127
+ # TODO String comes from factories.rb; it should come from here.
128
+ expected_body = "#{file}:#{line} allocated 5 `String`\n"
129
+
130
+ stats = FactoryGirl.build(:stats, files: [file], sourceline: line)
131
+ AllocationStats.stub(:trace) { stats }
132
+ allocation_stats = Rack::AllocationStats.new(@app)
133
+ _, headers, _ = allocation_stats.call(@traced_request_env)
134
+
135
+ headers["Content-Length"].to_i.should be expected_body.length
136
+ end
137
+
138
+ context("scoping") do
139
+ before do
140
+ stats = FactoryGirl.build(:stats, files: ["/foo/bar.rb", File.join(Dir.pwd, "baz.rb")])
141
+ AllocationStats.stub(:trace) { stats }
142
+ @allocation_stats = Rack::AllocationStats.new(@app)
143
+ end
144
+
145
+ it "returns all allocations when no scope is specified" do
146
+ _, _, body = @allocation_stats.call(@traced_request_env)
147
+
148
+ text = body.join
149
+ text.should include("bar.rb")
150
+ text.should include("baz.rb")
151
+ end
152
+
153
+ it "returns locally-scoped allocations" do
154
+ request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[scope]=.")
155
+
156
+ _, _, body = @allocation_stats.call(request_env)
157
+
158
+ text = body.join
159
+ text.should include("baz.rb")
160
+ text.should_not include("bar.rb")
161
+ end
162
+
163
+ it "returns allocations limited by scope" do
164
+ request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[scope]=foo")
165
+
166
+ _, _, body = @allocation_stats.call(request_env)
167
+
168
+ text = body.join
169
+ text.should include("bar.rb")
170
+ text.should_not include("baz.rb")
171
+ end
172
+ end
173
+
174
+ it "returns JSON when res[output]=json" do
175
+ stats = FactoryGirl.build(:stats, files: ["/foo/bar.rb", File.join(Dir.pwd, "baz.rb")])
176
+ AllocationStats.stub(:trace) { stats }
177
+ @allocation_stats = Rack::AllocationStats.new(@app)
178
+
179
+ json_request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[output]=json")
180
+ _, _, body = @allocation_stats.call(json_request_env)
181
+
182
+ allocation = stats.allocations.all.first
183
+ first_group_key = ["/foo/bar.rb", 7, String]
184
+
185
+ text = body.join
186
+ text.should include(allocation.to_json)
187
+ text.should include(first_group_key.to_json)
188
+
189
+ hash = {group_key: first_group_key, allocations: [allocation, allocation, allocation]}
190
+
191
+ text.should include(Yajl::Encoder.encode(hash))
192
+ end
193
+
194
+ it "returns the right Content-Type and status for JSON" do
195
+ json_request_env = Rack::MockRequest.env_for("/", :params => "ras[trace]=true&ras[output]=json")
196
+ status, headers, _ = Rack::AllocationStats.new(@app).call(json_request_env)
197
+
198
+ expect(headers["Content-Type"]).to eq "application/json"
199
+ expect(status).to be 200
200
+ end
201
+
202
+ it "returns the right Content-Type and status for help" do
203
+ help_request_env = Rack::MockRequest.env_for("/", :params => "ras[help]")
204
+ status, headers, _ = Rack::AllocationStats.new(@app).call(help_request_env)
205
+
206
+ expect(headers["Content-Type"]).to eq "text/plain"
207
+ expect(status).to be 200
208
+ end
209
+
210
+ it "returns the right body for help" do
211
+ help_request_env = Rack::MockRequest.env_for("/", :params => "ras[help]")
212
+ _, _, body = Rack::AllocationStats.new(@app).call(help_request_env)
213
+
214
+ body.first.should include("Rack AllocationStats help\n")
215
+ end
216
+ end
@@ -0,0 +1,10 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0, found in the LICENSE file.
3
+
4
+ require "sinatra"
5
+
6
+ class HelloSinatraApp < Sinatra::Base
7
+ get "/hello" do
8
+ "Hello World!"
9
+ end
10
+ end
@@ -0,0 +1,85 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0, found in the LICENSE file.
3
+
4
+ require "sinatra"
5
+ require "haml"
6
+ require "liquid"
7
+ require "redcarpet"
8
+ require "slim"
9
+
10
+ class SinatraTemplatesApp < Sinatra::Base
11
+ HELLOS = ["Hello", "Hola", "Bonjour", "Gutentag",
12
+ "こんにちは", "привет"]
13
+
14
+ enable :inline_templates
15
+
16
+ get "/erb" do
17
+ erb :erb
18
+ end
19
+
20
+ get "/haml" do
21
+ haml :haml
22
+ end
23
+
24
+ get "/liquid" do
25
+ liquid :liquid, locals: { hellos: HELLOS }
26
+ end
27
+
28
+ get "/slim" do
29
+ slim :slim
30
+ end
31
+
32
+ get "/markdown" do
33
+ markdown(:markdown)
34
+ end
35
+ end
36
+
37
+ __END__
38
+
39
+ @@ erb
40
+ <html>
41
+ <body>
42
+ <ul id="hi">
43
+ <% HELLOS.each do |hello| %>
44
+ <li class="greeting"><%= hello %> World!</li>
45
+ <% end %>
46
+ </ul>
47
+ </body>
48
+ </html>
49
+
50
+ @@ haml
51
+ %html
52
+ %body
53
+ %ul#hi
54
+ - HELLOS.each do |hello|
55
+ %li.greeting
56
+ =hello
57
+ World!
58
+
59
+ @@ liquid
60
+ <html>
61
+ <body>
62
+ <ul>
63
+ {% for hello in hellos %}
64
+ <li class="greeting">{{ hello }} World!</li>
65
+ {% endfor %}
66
+ </ul>
67
+ </body>
68
+ </html>
69
+
70
+ @@ markdown
71
+ * Hello World!
72
+ * Hola World!
73
+ * Bonjour World!
74
+ * Gutentag World!
75
+ * こんにちは World!
76
+ * привет World!
77
+
78
+ @@ slim
79
+ html
80
+ body
81
+ ul id="hi"
82
+ - HELLOS.each do |hello|
83
+ li.greeting
84
+ = hello
85
+ | World!
@@ -0,0 +1,55 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0, found in the LICENSE file.
3
+
4
+ require "pry"
5
+
6
+ require_relative "../lib/rack/allocation_stats"
7
+ require_relative "hello_world_app"
8
+ require_relative "yaml_app"
9
+ require_relative "yajl_app"
10
+
11
+ require "factory_girl"
12
+ require_relative "factories"
13
+
14
+ if RbConfig::CONFIG["MAJOR"].to_i < 2 || RbConfig::CONFIG["MINOR"].to_i < 1
15
+ warn "Error: ObjectStats requires Ruby 2.1 or greater"
16
+ exit 1
17
+ end
18
+
19
+ module Matchers
20
+ class QueryString
21
+ def initialize(expected_match)
22
+ @expected_match = expected_match
23
+ end
24
+
25
+ def matches?(env)
26
+ request = Rack::Request.new(env)
27
+ query_string = request.GET
28
+ if query_string.eql? @expected_match
29
+ true
30
+ else
31
+ env_description = "env, where Rack::Request.new(env).GET is #{query_string.inspect}"
32
+ env.instance_eval <<-RUBY
33
+ def description; #{env_description.inspect}; end
34
+ RUBY
35
+ false
36
+ end
37
+ end
38
+
39
+ def description
40
+ "query_string(#{@expected_match.inspect})"
41
+ end
42
+
43
+ def failure_message; end
44
+
45
+ def negative_failure_message; end
46
+ end
47
+
48
+ def query_string(expected)
49
+ QueryString.new(expected)
50
+ end
51
+ end
52
+
53
+ RSpec.configure do |config|
54
+ config.include Matchers
55
+ end
data/spec/yajl_app.rb ADDED
@@ -0,0 +1,20 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0, found in the LICENSE file.
3
+
4
+ require "rack"
5
+ require "yajl"
6
+
7
+ class YajlApp
8
+ FULL_PATH = __FILE__
9
+
10
+ attr_accessor :allocating_lines
11
+
12
+ def initialize
13
+ @allocating_lines = []
14
+ end
15
+
16
+ def call(env)
17
+ y = Yajl.dump(["one string", "two string", {"uno" => 1, "two" => 2}, "ho "*3]); @allocating_lines << __LINE__ # lots of objects not from here
18
+ @allocating_lines << __LINE__; [200, {"Content-Type" => "text/html"}, ["Hello Rack!"]]
19
+ end
20
+ end
data/spec/yaml_app.rb ADDED
@@ -0,0 +1,20 @@
1
+ # Copyright 2013 Google Inc. All Rights Reserved.
2
+ # Licensed under the Apache License, Version 2.0, found in the LICENSE file.
3
+
4
+ require "rack"
5
+ require "yaml"
6
+
7
+ class YamlApp
8
+ FULL_PATH = __FILE__
9
+
10
+ attr_accessor :allocating_lines
11
+
12
+ def initialize
13
+ @allocating_lines = []
14
+ end
15
+
16
+ def call(env)
17
+ y = YAML.dump(["one string", "two string"]); @allocating_lines << __LINE__ # lots of objects not from here
18
+ @allocating_lines << __LINE__; [200, {"Content-Type" => "text/html"}, ["Hello Rack!"]]
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-allocation_stats
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sam Rawlins
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: allocation_stats
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: yajl-ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Rack middleware for tracing object allocations in Ruby 2.1
56
+ email:
57
+ - sam.rawlins@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ./demo_rack_apps/Rails_3.2.15/app/helpers/tasks_helper.rb
63
+ - ./demo_rack_apps/Rails_3.2.15/app/helpers/projects_helper.rb
64
+ - ./demo_rack_apps/Rails_3.2.15/app/helpers/application_helper.rb
65
+ - ./demo_rack_apps/Rails_3.2.15/app/models/task.rb
66
+ - ./demo_rack_apps/Rails_3.2.15/app/models/project.rb
67
+ - ./demo_rack_apps/Rails_3.2.15/app/controllers/tasks_controller.rb
68
+ - ./demo_rack_apps/Rails_3.2.15/app/controllers/projects_controller.rb
69
+ - ./demo_rack_apps/Rails_3.2.15/app/controllers/application_controller.rb
70
+ - ./demo_rack_apps/Rails_3.2.15/config/environments/production.rb
71
+ - ./demo_rack_apps/Rails_3.2.15/config/environments/development.rb
72
+ - ./demo_rack_apps/Rails_3.2.15/config/environments/test.rb
73
+ - ./demo_rack_apps/Rails_3.2.15/config/application.rb
74
+ - ./demo_rack_apps/Rails_3.2.15/config/boot.rb
75
+ - ./demo_rack_apps/Rails_3.2.15/config/environment.rb
76
+ - ./demo_rack_apps/Rails_3.2.15/config/routes.rb
77
+ - ./demo_rack_apps/Rails_3.2.15/config/initializers/wrap_parameters.rb
78
+ - ./demo_rack_apps/Rails_3.2.15/config/initializers/inflections.rb
79
+ - ./demo_rack_apps/Rails_3.2.15/config/initializers/backtrace_silencers.rb
80
+ - ./demo_rack_apps/Rails_3.2.15/config/initializers/mime_types.rb
81
+ - ./demo_rack_apps/Rails_3.2.15/config/initializers/secret_token.rb
82
+ - ./demo_rack_apps/Rails_3.2.15/config/initializers/session_store.rb
83
+ - ./demo_rack_apps/Rails_3.2.15/db/migrate/20131104031829_create_tasks.rb
84
+ - ./demo_rack_apps/Rails_3.2.15/db/migrate/20131104031828_create_projects.rb
85
+ - ./demo_rack_apps/Rails_3.2.15/db/schema.rb
86
+ - ./demo_rack_apps/Rails_3.2.15/db/seeds.rb
87
+ - ./demo_rack_apps/Rails_3.2.15/test/test_helper.rb
88
+ - ./demo_rack_apps/Rails_3.2.15/test/unit/helpers/tasks_helper_test.rb
89
+ - ./demo_rack_apps/Rails_3.2.15/test/unit/helpers/projects_helper_test.rb
90
+ - ./demo_rack_apps/Rails_3.2.15/test/unit/project_test.rb
91
+ - ./demo_rack_apps/Rails_3.2.15/test/unit/task_test.rb
92
+ - ./demo_rack_apps/Rails_3.2.15/test/functional/tasks_controller_test.rb
93
+ - ./demo_rack_apps/Rails_3.2.15/test/functional/projects_controller_test.rb
94
+ - ./demo_rack_apps/Rails_3.2.15/test/performance/browsing_test.rb
95
+ - ./demo_rack_apps/Rails_4.0.1/app/helpers/tasks_helper.rb
96
+ - ./demo_rack_apps/Rails_4.0.1/app/helpers/projects_helper.rb
97
+ - ./demo_rack_apps/Rails_4.0.1/app/helpers/application_helper.rb
98
+ - ./demo_rack_apps/Rails_4.0.1/app/models/task.rb
99
+ - ./demo_rack_apps/Rails_4.0.1/app/models/project.rb
100
+ - ./demo_rack_apps/Rails_4.0.1/app/controllers/tasks_controller.rb
101
+ - ./demo_rack_apps/Rails_4.0.1/app/controllers/projects_controller.rb
102
+ - ./demo_rack_apps/Rails_4.0.1/app/controllers/application_controller.rb
103
+ - ./demo_rack_apps/Rails_4.0.1/config/environments/production.rb
104
+ - ./demo_rack_apps/Rails_4.0.1/config/environments/development.rb
105
+ - ./demo_rack_apps/Rails_4.0.1/config/environments/test.rb
106
+ - ./demo_rack_apps/Rails_4.0.1/config/application.rb
107
+ - ./demo_rack_apps/Rails_4.0.1/config/boot.rb
108
+ - ./demo_rack_apps/Rails_4.0.1/config/environment.rb
109
+ - ./demo_rack_apps/Rails_4.0.1/config/routes.rb
110
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/filter_parameter_logging.rb
111
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/wrap_parameters.rb
112
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/inflections.rb
113
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/backtrace_silencers.rb
114
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/mime_types.rb
115
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/secret_token.rb
116
+ - ./demo_rack_apps/Rails_4.0.1/config/initializers/session_store.rb
117
+ - ./demo_rack_apps/Rails_4.0.1/db/migrate/20131102201320_create_projects.rb
118
+ - ./demo_rack_apps/Rails_4.0.1/db/migrate/20131102201321_create_tasks.rb
119
+ - ./demo_rack_apps/Rails_4.0.1/db/schema.rb
120
+ - ./demo_rack_apps/Rails_4.0.1/db/seeds.rb
121
+ - ./demo_rack_apps/Rails_4.0.1/test/helpers/tasks_helper_test.rb
122
+ - ./demo_rack_apps/Rails_4.0.1/test/helpers/projects_helper_test.rb
123
+ - ./demo_rack_apps/Rails_4.0.1/test/test_helper.rb
124
+ - ./demo_rack_apps/Rails_4.0.1/test/models/project_test.rb
125
+ - ./demo_rack_apps/Rails_4.0.1/test/models/task_test.rb
126
+ - ./demo_rack_apps/Rails_4.0.1/test/controllers/tasks_controller_test.rb
127
+ - ./demo_rack_apps/Rails_4.0.1/test/controllers/projects_controller_test.rb
128
+ - ./lib/rack/allocation_stats/call_app_directly.rb
129
+ - ./lib/rack/allocation_stats/tracer.rb
130
+ - ./lib/rack/allocation_stats/formatters/html.rb
131
+ - ./lib/rack/allocation_stats/formatters/json.rb
132
+ - ./lib/rack/allocation_stats/formatters/text.rb
133
+ - ./lib/rack/allocation_stats/formatters/base.rb
134
+ - ./lib/rack/allocation_stats/action.rb
135
+ - ./lib/rack/allocation_stats/middleware.rb
136
+ - ./lib/rack/allocation_stats.rb
137
+ - ./spec/yaml_app.rb
138
+ - ./spec/rack/allocation_stats_spec.rb
139
+ - ./spec/spec_helper.rb
140
+ - ./spec/sinatra_app.rb
141
+ - ./spec/yajl_app.rb
142
+ - ./spec/factories.rb
143
+ - ./spec/sinatra_templates_app.rb
144
+ - ./spec/hello_world_app.rb
145
+ homepage:
146
+ licenses:
147
+ - Apache v2
148
+ metadata: {}
149
+ post_install_message:
150
+ rdoc_options: []
151
+ require_paths:
152
+ - lib
153
+ required_ruby_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - '>'
156
+ - !ruby/object:Gem::Version
157
+ version: 2.0.99
158
+ required_rubygems_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - '>='
161
+ - !ruby/object:Gem::Version
162
+ version: '0'
163
+ requirements: []
164
+ rubyforge_project:
165
+ rubygems_version: 2.0.3
166
+ signing_key:
167
+ specification_version: 4
168
+ summary: Rack middleware for tracing object allocations in Ruby 2.1
169
+ test_files: []