rack-allocation_stats 0.1.0

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 (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: []