derailed_benchmarks 1.6.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +75 -0
  3. data/.github/workflows/check_changelog.yml +11 -8
  4. data/CHANGELOG.md +25 -1
  5. data/README.md +32 -9
  6. data/derailed_benchmarks.gemspec +6 -3
  7. data/gemfiles/rails_5_1.gemfile +3 -1
  8. data/gemfiles/rails_5_2.gemfile +3 -3
  9. data/gemfiles/rails_6_1.gemfile +13 -0
  10. data/gemfiles/rails_git.gemfile +2 -2
  11. data/lib/derailed_benchmarks.rb +4 -2
  12. data/lib/derailed_benchmarks/core_ext/kernel_require.rb +29 -24
  13. data/lib/derailed_benchmarks/git/commit.rb +36 -0
  14. data/lib/derailed_benchmarks/git/in_path.rb +59 -0
  15. data/lib/derailed_benchmarks/git/switch_project.rb +128 -0
  16. data/lib/derailed_benchmarks/git_switch_project.rb +1 -0
  17. data/lib/derailed_benchmarks/load_tasks.rb +11 -4
  18. data/lib/derailed_benchmarks/require_tree.rb +11 -1
  19. data/lib/derailed_benchmarks/{stats_in_file.rb → stats_for_file.rb} +8 -2
  20. data/lib/derailed_benchmarks/stats_from_dir.rb +53 -9
  21. data/lib/derailed_benchmarks/tasks.rb +26 -63
  22. data/lib/derailed_benchmarks/version.rb +1 -1
  23. data/test/derailed_benchmarks/core_ext/kernel_require_test.rb +70 -11
  24. data/test/derailed_benchmarks/git_switch_project_test.rb +83 -0
  25. data/test/derailed_benchmarks/require_tree_test.rb +1 -1
  26. data/test/derailed_benchmarks/stats_from_dir_test.rb +43 -10
  27. data/test/fixtures/require/autoload_child.rb +5 -0
  28. data/test/fixtures/require/autoload_parent.rb +8 -0
  29. data/test/fixtures/require/child_one.rb +1 -1
  30. data/test/fixtures/require/child_two.rb +1 -1
  31. data/test/fixtures/require/load_child.rb +3 -0
  32. data/test/fixtures/require/load_parent.rb +5 -0
  33. data/test/fixtures/require/parent_one.rb +1 -1
  34. data/test/integration/tasks_test.rb +31 -5
  35. data/test/rails_app/config/application.rb +2 -0
  36. data/test/rails_app/config/storage.yml +0 -0
  37. data/test/test_helper.rb +6 -1
  38. metadata +90 -26
  39. data/.travis.yml +0 -18
  40. data/Appraisals +0 -26
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DerailedBenchmarks
4
- VERSION = "1.6.0"
4
+ VERSION = "2.0.1"
5
5
  end
@@ -3,7 +3,6 @@
3
3
  require 'test_helper'
4
4
 
5
5
  class KernelRequireTest < ActiveSupport::TestCase
6
-
7
6
  setup do
8
7
  require 'derailed_benchmarks/core_ext/kernel_require'
9
8
  GC.disable
@@ -11,23 +10,83 @@ class KernelRequireTest < ActiveSupport::TestCase
11
10
 
12
11
  teardown do
13
12
  GC.enable
13
+ DerailedBenchmarks::RequireTree.reset!
14
+ end
15
+
16
+ test "profiles load" do
17
+ in_fork do
18
+ require fixtures_dir("require/load_parent.rb")
19
+
20
+ parent = assert_node_in_parent("load_parent.rb", TOP_REQUIRE)
21
+
22
+ assert_node_in_parent("load_child.rb", parent)
23
+ end
24
+ end
25
+
26
+ test "profiles autoload" do
27
+ skip if RUBY_VERSION.start_with?("2.2") # Fails on CI, I can't install Ruby 2.2 locally to debug https://stackoverflow.com/questions/63926460/install-ruby-2-2-on-mac-osx-catalina-with-ruby-install, https://github.com/postmodern/ruby-install/issues/375
28
+
29
+ in_fork do
30
+ require fixtures_dir("require/autoload_parent.rb")
31
+ parent = assert_node_in_parent("autoload_parent.rb", TOP_REQUIRE)
32
+
33
+ assert_node_in_parent("autoload_child.rb", parent)
34
+ end
14
35
  end
15
36
 
37
+ test "core extension profiles useage" do
38
+ in_fork do
39
+ require fixtures_dir("require/parent_one.rb")
40
+ parent = assert_node_in_parent("parent_one.rb", TOP_REQUIRE)
41
+ assert_node_in_parent("child_one.rb", parent)
42
+ child_two = assert_node_in_parent("child_two.rb", parent)
43
+ assert_node_in_parent("relative_child", parent)
44
+ assert_node_in_parent("relative_child_two", parent)
45
+ assert_node_in_parent("raise_child.rb", child_two)
46
+ end
47
+ end
48
+
49
+ # Checks to see that the given file name is present in the
50
+ # parent tree node and that the memory of that file
51
+ # is less than the parent (since the parent should include itself
52
+ # plus its children)
53
+ #
54
+ # Returns the child node
16
55
  def assert_node_in_parent(file_name, parent)
17
56
  file = fixtures_dir(File.join("require", file_name))
18
57
  node = parent[file]
19
- assert node, "Expected:\n#{parent.children}\nto include:\n#{file.inspect}"
20
- assert node.cost < parent.cost, "Expected:\n#{node.inspect}\nto cost less than:\n#{parent.inspect}" unless parent == TOP_REQUIRE
58
+ assert node, "Expected: #{parent.name} to include: #{file.to_s} but it did not.\nChildren: #{parent.children.map(&:name).map(&:to_s)}"
59
+ unless parent == TOP_REQUIRE
60
+ assert node.cost < parent.cost, "Expected: #{node.name.inspect} (#{node.cost}) to cost less than: #{parent.name.inspect} (#{parent.cost})"
61
+ end
21
62
  node
22
63
  end
23
64
 
24
- test "core extension profiles useage" do
25
- require fixtures_dir("require/parent_one.rb")
26
- parent = assert_node_in_parent("parent_one.rb", TOP_REQUIRE)
27
- assert_node_in_parent("child_one.rb", parent)
28
- child_two = assert_node_in_parent("child_two.rb", parent)
29
- assert_node_in_parent("relative_child", parent)
30
- assert_node_in_parent("relative_child_two", parent)
31
- assert_node_in_parent("raise_child.rb", child_two)
65
+ # Used to get semi-clean process memory
66
+ # It would be better to run the requires in a totally different process
67
+ # but...that would take engineering
68
+ #
69
+ # If I was going to do that, I would find a way to serialize RequireTree
70
+ # into a json structure with file names and costs, run the script
71
+ # dump the json to a file, then in this process read the file and
72
+ # run assertions
73
+ def in_fork
74
+ Tempfile.create("stdout") do |tmp_file|
75
+ pid = fork do
76
+ $stdout.reopen(tmp_file, "w")
77
+ $stderr.reopen(tmp_file, "w")
78
+ $stdout.sync = true
79
+ $stderr.sync = true
80
+ yield
81
+ Kernel.exit!(0) # needed for https://github.com/seattlerb/minitest/pull/683
82
+ end
83
+ Process.waitpid(pid)
84
+
85
+ if $?.success?
86
+ print File.read(tmp_file)
87
+ else
88
+ raise File.read(tmp_file)
89
+ end
90
+ end
32
91
  end
33
92
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ class GitSwitchProjectTest < ActiveSupport::TestCase
6
+ test "tells me when it's not pointing at a git project" do
7
+ exception = assert_raises {
8
+ DerailedBenchmarks::Git::SwitchProject.new(path: "/dev/null")
9
+ }
10
+ assert_includes(exception.message, '.git directory')
11
+ end
12
+
13
+ test "dirty gemspec cleaning" do
14
+ Dir.mktmpdir do |dir|
15
+ run!("git clone https://github.com/sharpstone/default_ruby #{dir} 2>&1 && cd #{dir} && git checkout 6e642963acec0ff64af51bd6fba8db3c4176ed6e 2>&1 && git checkout -b mybranch 2>&1")
16
+ run!("cd #{dir} && echo lol > foo.gemspec && git add .")
17
+
18
+ io = StringIO.new
19
+ project = DerailedBenchmarks::Git::SwitchProject.new(path: dir, io: io)
20
+
21
+ assert project.dirty?
22
+ refute project.clean?
23
+
24
+ project.restore_branch_on_return do
25
+ project.commits.map(&:checkout!)
26
+ end
27
+
28
+ assert_includes io.string, "Bundler modifies gemspec files"
29
+ assert_includes io.string, "Applying stash"
30
+ end
31
+ end
32
+
33
+ test "works on a git repo" do
34
+ Dir.mktmpdir do |dir|
35
+ run!("git clone https://github.com/sharpstone/default_ruby #{dir} 2>&1 && cd #{dir} && git checkout 6e642963acec0ff64af51bd6fba8db3c4176ed6e 2>&1 && git checkout -b mybranch 2>&1")
36
+
37
+ # finds shas when none given
38
+ project = DerailedBenchmarks::Git::SwitchProject.new(path: dir)
39
+
40
+ assert_equal ["6e642963acec0ff64af51bd6fba8db3c4176ed6e", "da748a59340be8b950e7bbbfb32077eb67d70c3c"], project.commits.map(&:ref)
41
+ first_commit = project.commits.first
42
+
43
+ assert_equal "CI test support", first_commit.description
44
+ assert_equal "6e64296", first_commit.short_sha
45
+ assert_equal "/dev/null/6e642963acec0ff64af51bd6fba8db3c4176ed6e.bench.txt", first_commit.log.to_s
46
+ assert_equal DateTime.parse("Tue, 14 Apr 2020 13:26:03 -0500"), first_commit.time
47
+
48
+ assert_equal "mybranch", project.current_branch_or_sha
49
+
50
+ # Finds shas when 1 is given
51
+ project = DerailedBenchmarks::Git::SwitchProject.new(path: dir, ref_array: ["da748a59340be8b950e7bbbfb32077eb67d70c3c"])
52
+
53
+ assert_equal ["da748a59340be8b950e7bbbfb32077eb67d70c3c", "5c09f748957d2098182762004adee27d1ff83160"], project.commits.map(&:ref)
54
+
55
+
56
+ # Returns correct refs if given
57
+ project = DerailedBenchmarks::Git::SwitchProject.new(path: dir, ref_array: ["da748a59340be8b950e7bbbfb32077eb67d70c3c", "9b19275a592f148e2a53b87ead4ccd8c747539c9"])
58
+
59
+ assert_equal ["da748a59340be8b950e7bbbfb32077eb67d70c3c", "9b19275a592f148e2a53b87ead4ccd8c747539c9"], project.commits.map(&:ref)
60
+
61
+ first_commit = project.commits.first
62
+
63
+ first_commit.checkout!
64
+
65
+ assert_equal first_commit.short_sha, project.current_branch_or_sha
66
+
67
+ # Test restore_branch_on_return
68
+ project.restore_branch_on_return(quiet: true) do
69
+ project.commits.last.checkout!
70
+
71
+ assert_equal project.commits.last.short_sha, project.current_branch_or_sha
72
+ end
73
+
74
+ assert_equal project.commits.first.short_sha, project.current_branch_or_sha
75
+
76
+ exception = assert_raise {
77
+ DerailedBenchmarks::Git::SwitchProject.new(path: dir, ref_array: ["6e642963acec0ff64af51bd6fba8db3c4176ed6e", "mybranch"])
78
+ }
79
+
80
+ assert_includes(exception.message, 'Duplicate SHA resolved "6e64296"')
81
+ end
82
+ end
83
+ end
@@ -9,7 +9,7 @@ class RequireTree < ActiveSupport::TestCase
9
9
  end
10
10
 
11
11
  def teardown
12
- DerailedBenchmarks::RequireTree.const_set("REQUIRED_BY", {})
12
+ DerailedBenchmarks::RequireTree.reset!
13
13
  end
14
14
 
15
15
  test "default_cost" do
@@ -3,6 +3,19 @@
3
3
  require 'test_helper'
4
4
 
5
5
  class StatsFromDirTest < ActiveSupport::TestCase
6
+ test "empty files" do
7
+ Dir.mktmpdir do |dir|
8
+ dir = Pathname.new(dir)
9
+ branch_info = {}
10
+ branch_info["loser"] = { desc: "Old commit", time: Time.now, file: dir.join("loser"), name: "loser" }
11
+ branch_info["winner"] = { desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner"), name: "winner" }
12
+ stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
13
+ io = StringIO.new
14
+ stats.call.banner(io: io) # Doesn't error
15
+ assert_equal "", io.read
16
+ end
17
+ end
18
+
6
19
  test "that it works" do
7
20
  dir = fixtures_dir("stats/significant")
8
21
  branch_info = {}
@@ -29,6 +42,23 @@ class StatsFromDirTest < ActiveSupport::TestCase
29
42
  assert_equal "11.3844", format % newest.median
30
43
  end
31
44
 
45
+ test "histogram output" do
46
+ dir = fixtures_dir("stats/significant")
47
+ branch_info = {}
48
+ branch_info["loser"] = { desc: "Old commit", time: Time.now, file: dir.join("loser.bench.txt"), short_sha: "5594a2d" }
49
+ branch_info["winner"] = { desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner.bench.txt"), short_sha: "f1ab117" }
50
+ stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
51
+
52
+ io = StringIO.new
53
+ stats.call.banner(io)
54
+
55
+ puts io.string
56
+
57
+ assert_match(/11\.2 , 11\.28/, io.string)
58
+ assert_match(/11\.8 , 11\.88/, io.string)
59
+ end
60
+
61
+
32
62
  test "alignment" do
33
63
  dir = fixtures_dir("stats/significant")
34
64
  branch_info = {}
@@ -48,10 +78,13 @@ class StatsFromDirTest < ActiveSupport::TestCase
48
78
 
49
79
  test "banner faster" do
50
80
  dir = fixtures_dir("stats/significant")
51
- branch_info = {}
52
- branch_info["loser"] = { desc: "Old commit", time: Time.now, file: dir.join("loser.bench.txt"), name: "loser" }
53
- branch_info["winner"] = { desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner.bench.txt"), name: "winner" }
54
- stats = DerailedBenchmarks::StatsFromDir.new(branch_info).call
81
+ Branch_info = {}
82
+
83
+ require 'ostruct'
84
+ commits = []
85
+ commits << OpenStruct.new({ desc: "Old commit", time: Time.now, file: dir.join("loser.bench.txt"), ref: "loser", short_sha: "aaaaa" })
86
+ commits << OpenStruct.new({ desc: "I am the new commit", time: Time.now + 1, file: dir.join("winner.bench.txt"), ref: "winner", short_sha: "bbbbb" })
87
+ stats = DerailedBenchmarks::StatsFromDir.new(commits).call
55
88
  newest = stats.newest
56
89
  oldest = stats.oldest
57
90
 
@@ -72,12 +105,12 @@ class StatsFromDirTest < ActiveSupport::TestCase
72
105
  11.0
73
106
  end
74
107
 
75
- expected = <<~EOM
76
- [winner] "I am the new commit" - (10.5 seconds)
108
+ expected = <<-EOM
109
+ [bbbbb] (10.5000 seconds) "I am the new commit" ref: "winner"
77
110
  FASTER 🚀🚀🚀 by:
78
111
  1.0476x [older/newer]
79
112
  4.5455% [(older - newer) / older * 100]
80
- [loser] "Old commit" - (11.0 seconds)
113
+ [aaaaa] (11.0000 seconds) "Old commit" ref: "loser"
81
114
  EOM
82
115
 
83
116
  actual = StringIO.new
@@ -103,12 +136,12 @@ EOM
103
136
  11.0
104
137
  end
105
138
 
106
- expected = <<~EOM
107
- [loser] "I am the new commit" - (11.0 seconds)
139
+ expected = <<-EOM
140
+ [loser] (11.0000 seconds) "I am the new commit" ref: "loser"
108
141
  SLOWER 🐢🐢🐢 by:
109
142
  0.9545x [older/newer]
110
143
  -4.7619% [(older - newer) / older * 100]
111
- [winner] "Old commit" - (10.5 seconds)
144
+ [winner] (10.5000 seconds) "Old commit" ref: "winner"
112
145
  EOM
113
146
 
114
147
  actual = StringIO.new
@@ -0,0 +1,5 @@
1
+ @retained = String.new("")
2
+ 1_000_000.times.map { @retained << "A" }
3
+
4
+ module AutoLoadChild
5
+ end
@@ -0,0 +1,8 @@
1
+ @retained = String.new("")
2
+ 1_000_000.times.map { @retained << "A" }
3
+
4
+ autoload :AutoLoadChild, File.join(__dir__, 'autoload_child.rb')
5
+
6
+ if AutoLoadChild
7
+ # yay
8
+ end
@@ -1,4 +1,4 @@
1
1
  class ChildOne
2
- @retained = +""
2
+ @retained = String.new("")
3
3
  50_000.times.map { @retained << "A" }
4
4
  end
@@ -1,5 +1,5 @@
1
1
  class ChildTwo
2
- @retained = +""
2
+ @retained = String.new("")
3
3
  200_000.times.map { @retained << "A" }
4
4
  end
5
5
 
@@ -0,0 +1,3 @@
1
+ @retained = String.new("")
2
+ 1_000_000.times.map { @retained << "A" }
3
+
@@ -0,0 +1,5 @@
1
+ @retained = String.new("")
2
+ 1_000_000.times.map { @retained << "A" }
3
+
4
+ load File.join(__dir__, "load_child.rb")
5
+
@@ -1,5 +1,5 @@
1
1
  class ParentOne
2
- @retained = +""
2
+ @retained = String.new("")
3
3
  1_000_000.times.map { @retained << "A" }
4
4
  end
5
5
  require File.expand_path('../child_one.rb', __FILE__)
@@ -26,21 +26,47 @@ class TasksTest < ActiveSupport::TestCase
26
26
  env_string = env.map {|key, value| "#{key.shellescape}=#{value.to_s.shellescape}" }.join(" ")
27
27
  cmd = "env #{env_string} bundle exec rake -f perf.rake #{cmd} --trace"
28
28
  puts "Running: #{cmd}"
29
- result = `cd '#{rails_app_path}' && #{cmd}`
30
- if assert_success
31
- assert $?.success?, "Expected '#{cmd}' to return a success status.\nOutput: #{result}"
29
+ result = Bundler.with_original_env { `cd '#{rails_app_path}' && #{cmd} 2>&1` }
30
+ if assert_success && !$?.success?
31
+ puts result
32
+ raise "Expected '#{cmd}' to return a success status.\nOutput: #{result}"
32
33
  end
33
34
 
34
35
  result
35
36
  end
36
37
 
37
- test 'library_branches' do
38
+ test 'non-rails library with branch specified' do
39
+ skip unless ENV['USING_RAILS_WICKED_BRANCH']
40
+
41
+ gem_path = run!("bundle info wicked --path")
42
+ env = { "TEST_COUNT" => 10, "DERAILED_SCRIPT_COUNT" => 2, "DERAILED_PATH_TO_LIBRARY" => gem_path}
43
+ puts rake "perf:library", { env: env }
44
+ end
45
+
46
+ test 'rails perf:library from git' do
47
+ # BUNDLE_GEMFILE="$(pwd)/gemfiles/rails_git.gemfile" bundle exec m test/integration/tasks_test.rb:<linenumber>
48
+
38
49
  skip unless ENV['USING_RAILS_GIT']
39
50
 
40
- env = { "TEST_COUNT" => 10, "DERAILED_SCRIPT_COUNT" => 2, "SHAS_TO_TEST" => "3054e1d584e7eca110c69a1f8423f2e0866abbf9,80f989aecece1a2b1830e9c953e5887421b52d3c"}
51
+ env = { "TEST_COUNT" => 2, "DERAILED_SCRIPT_COUNT" => 2,
52
+ "SHAS_TO_TEST" => "acb6631cd99cdfe7db356773ef74cad7cbb570ed,12bb9d32f56883914abcd98fd72e3c68c444808d"}
41
53
  puts rake "perf:library", { env: env }
42
54
  end
43
55
 
56
+ test "rails perf:library with bad script" do
57
+ # BUNDLE_GEMFILE="$(pwd)/gemfiles/rails_git.gemfile" bundle exec m test/integration/tasks_test.rb:<linenumber>
58
+
59
+ skip unless ENV['USING_RAILS_GIT']
60
+
61
+ error = assert_raises {
62
+ env = { "DERAILED_SCRIPT" => "nopenopenop", "TEST_COUNT" => 2, "DERAILED_SCRIPT_COUNT" => 2,
63
+ "SHAS_TO_TEST" => "acb6631cd99cdfe7db356773ef74cad7cbb570ed,12bb9d32f56883914abcd98fd72e3c68c444808d"}
64
+ puts rake "perf:library", { env: env }
65
+ }
66
+
67
+ assert error.message =~ /nopenopenop:( command)? not found/, "Expected #{error.message} to include /nopenopenop: (command)? not found/ but it did not"
68
+ end
69
+
44
70
  test 'hitting authenticated devise apps' do
45
71
  env = { "PATH_TO_HIT" => "authenticated", "USE_AUTH" => "true", "TEST_COUNT" => "2" }
46
72
  result = rake 'perf:test', env: env
@@ -13,6 +13,8 @@ require 'devise'
13
13
 
14
14
  module Dummy
15
15
  class Application < Rails::Application
16
+ config.load_defaults Rails.version.to_f
17
+
16
18
  config.action_mailer.default_url_options = { host: 'localhost:3000' }
17
19
 
18
20
  # Settings in config/environments/* take precedence over those specified here.
File without changes
data/test/test_helper.rb CHANGED
@@ -51,7 +51,6 @@ class ActiveSupport::IntegrationCase
51
51
  end
52
52
  end
53
53
 
54
-
55
54
  def fixtures_dir(name = "")
56
55
  root_path("test/fixtures").join(name)
57
56
  end
@@ -63,3 +62,9 @@ end
63
62
  def rails_app_path(name = "")
64
63
  root_path("test/rails_app").join(name)
65
64
  end
65
+
66
+ def run!(cmd)
67
+ output = `#{cmd}`
68
+ raise "Cmd #{cmd} failed:\n#{output}" unless $?.success?
69
+ output
70
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derailed_benchmarks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Schneeman
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2021-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: heapy
@@ -28,16 +28,22 @@ dependencies:
28
28
  name: memory_profiler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '2'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: '0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '2'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: get_process_mem
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +140,62 @@ dependencies:
134
140
  - - ">="
135
141
  - !ruby/object:Gem::Version
136
142
  version: '2.1'
143
+ - !ruby/object:Gem::Dependency
144
+ name: mini_histogram
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ">="
148
+ - !ruby/object:Gem::Version
149
+ version: 0.3.0
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: 0.3.0
157
+ - !ruby/object:Gem::Dependency
158
+ name: dead_end
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ type: :runtime
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ - !ruby/object:Gem::Dependency
172
+ name: rack-test
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ type: :runtime
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
185
+ - !ruby/object:Gem::Dependency
186
+ name: webrick
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
137
199
  - !ruby/object:Gem::Dependency
138
200
  name: capybara
139
201
  requirement: !ruby/object:Gem::Requirement
@@ -202,20 +264,6 @@ dependencies:
202
264
  - - "<"
203
265
  - !ruby/object:Gem::Version
204
266
  version: '6'
205
- - !ruby/object:Gem::Dependency
206
- name: appraisal
207
- requirement: !ruby/object:Gem::Requirement
208
- requirements:
209
- - - '='
210
- - !ruby/object:Gem::Version
211
- version: 2.2.0
212
- type: :development
213
- prerelease: false
214
- version_requirements: !ruby/object:Gem::Requirement
215
- requirements:
216
- - - '='
217
- - !ruby/object:Gem::Version
218
- version: 2.2.0
219
267
  description: " Go faster, off the Rails "
220
268
  email:
221
269
  - richard.schneeman+rubygems@gmail.com
@@ -224,10 +272,9 @@ executables:
224
272
  extensions: []
225
273
  extra_rdoc_files: []
226
274
  files:
275
+ - ".circleci/config.yml"
227
276
  - ".github/workflows/check_changelog.yml"
228
277
  - ".gitignore"
229
- - ".travis.yml"
230
- - Appraisals
231
278
  - CHANGELOG.md
232
279
  - Gemfile
233
280
  - README.md
@@ -238,23 +285,33 @@ files:
238
285
  - gemfiles/rails_5_1.gemfile
239
286
  - gemfiles/rails_5_2.gemfile
240
287
  - gemfiles/rails_6_0.gemfile
288
+ - gemfiles/rails_6_1.gemfile
241
289
  - gemfiles/rails_git.gemfile
242
290
  - lib/derailed_benchmarks.rb
243
291
  - lib/derailed_benchmarks/auth_helper.rb
244
292
  - lib/derailed_benchmarks/auth_helpers/devise.rb
245
293
  - lib/derailed_benchmarks/core_ext/kernel_require.rb
294
+ - lib/derailed_benchmarks/git/commit.rb
295
+ - lib/derailed_benchmarks/git/in_path.rb
296
+ - lib/derailed_benchmarks/git/switch_project.rb
297
+ - lib/derailed_benchmarks/git_switch_project.rb
246
298
  - lib/derailed_benchmarks/load_tasks.rb
247
299
  - lib/derailed_benchmarks/require_tree.rb
300
+ - lib/derailed_benchmarks/stats_for_file.rb
248
301
  - lib/derailed_benchmarks/stats_from_dir.rb
249
- - lib/derailed_benchmarks/stats_in_file.rb
250
302
  - lib/derailed_benchmarks/tasks.rb
251
303
  - lib/derailed_benchmarks/version.rb
252
304
  - test/derailed_benchmarks/core_ext/kernel_require_test.rb
305
+ - test/derailed_benchmarks/git_switch_project_test.rb
253
306
  - test/derailed_benchmarks/require_tree_test.rb
254
307
  - test/derailed_benchmarks/stats_from_dir_test.rb
255
308
  - test/derailed_test.rb
309
+ - test/fixtures/require/autoload_child.rb
310
+ - test/fixtures/require/autoload_parent.rb
256
311
  - test/fixtures/require/child_one.rb
257
312
  - test/fixtures/require/child_two.rb
313
+ - test/fixtures/require/load_child.rb
314
+ - test/fixtures/require/load_parent.rb
258
315
  - test/fixtures/require/parent_one.rb
259
316
  - test/fixtures/require/raise_child.rb
260
317
  - test/fixtures/require/relative_child.rb
@@ -293,6 +350,7 @@ files:
293
350
  - test/rails_app/config/locales/en.yml
294
351
  - test/rails_app/config/locales/es.yml
295
352
  - test/rails_app/config/routes.rb
353
+ - test/rails_app/config/storage.yml
296
354
  - test/rails_app/db/migrate/20141210070547_devise_create_users.rb
297
355
  - test/rails_app/db/schema.rb
298
356
  - test/rails_app/perf.rake
@@ -314,7 +372,7 @@ homepage: https://github.com/schneems/derailed_benchmarks
314
372
  licenses:
315
373
  - MIT
316
374
  metadata: {}
317
- post_install_message:
375
+ post_install_message:
318
376
  rdoc_options: []
319
377
  require_paths:
320
378
  - lib
@@ -322,24 +380,29 @@ required_ruby_version: !ruby/object:Gem::Requirement
322
380
  requirements:
323
381
  - - ">="
324
382
  - !ruby/object:Gem::Version
325
- version: 2.1.0
383
+ version: 2.5.0
326
384
  required_rubygems_version: !ruby/object:Gem::Requirement
327
385
  requirements:
328
386
  - - ">="
329
387
  - !ruby/object:Gem::Version
330
388
  version: '0'
331
389
  requirements: []
332
- rubygems_version: 3.1.2
333
- signing_key:
390
+ rubygems_version: 3.2.3
391
+ signing_key:
334
392
  specification_version: 4
335
393
  summary: Benchmarks designed to performance test your ENTIRE site
336
394
  test_files:
337
395
  - test/derailed_benchmarks/core_ext/kernel_require_test.rb
396
+ - test/derailed_benchmarks/git_switch_project_test.rb
338
397
  - test/derailed_benchmarks/require_tree_test.rb
339
398
  - test/derailed_benchmarks/stats_from_dir_test.rb
340
399
  - test/derailed_test.rb
400
+ - test/fixtures/require/autoload_child.rb
401
+ - test/fixtures/require/autoload_parent.rb
341
402
  - test/fixtures/require/child_one.rb
342
403
  - test/fixtures/require/child_two.rb
404
+ - test/fixtures/require/load_child.rb
405
+ - test/fixtures/require/load_parent.rb
343
406
  - test/fixtures/require/parent_one.rb
344
407
  - test/fixtures/require/raise_child.rb
345
408
  - test/fixtures/require/relative_child.rb
@@ -378,6 +441,7 @@ test_files:
378
441
  - test/rails_app/config/locales/en.yml
379
442
  - test/rails_app/config/locales/es.yml
380
443
  - test/rails_app/config/routes.rb
444
+ - test/rails_app/config/storage.yml
381
445
  - test/rails_app/db/migrate/20141210070547_devise_create_users.rb
382
446
  - test/rails_app/db/schema.rb
383
447
  - test/rails_app/perf.rake