derailed_benchmarks 1.6.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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