https://github.com/jekyll/jekyll
Raw File
Tip revision: 053acd31ac69f915d2e5035dac8a6c6e71ad413c authored by olivia on 25 January 2018, 18:34:49 UTC
Release :gem: 3.7.2
Tip revision: 053acd3
file-dir-ensure-trailing-slash
#!/usr/bin/env ruby
require 'benchmark/ips'

# For this pull request, which changes Page#dir
# https://github.com/jekyll/jekyll/pull/4403

FORWARD_SLASH = '/'.freeze

def pre_pr(url)
  url[-1, 1] == FORWARD_SLASH ? url : File.dirname(url)
end

def pr(url)
  if url.end_with?(FORWARD_SLASH)
    url
  else
    url_dir = File.dirname(url)
    url_dir.end_with?(FORWARD_SLASH) ? url_dir : "#{url_dir}/"
  end
end

def envygeeks(url)
  return url if url.end_with?(FORWARD_SLASH) || url == FORWARD_SLASH

  url = File.dirname(url)
  url == FORWARD_SLASH ? url : "#{url}/"
end

# Just a slash
Benchmark.ips do |x|
  path = '/'
  x.report("pre_pr:#{path}")    { pre_pr(path) }
  x.report("pr:#{path}")        { pr(path) }
  x.report("envygeeks:#{path}") { pr(path) }
  x.compare!
end

# No trailing slash
Benchmark.ips do |x|
  path = '/some/very/very/long/path/to/a/file/i/like'
  x.report("pre_pr:#{path}")    { pre_pr(path) }
  x.report("pr:#{path}")        { pr(path) }
  x.report("envygeeks:#{path}") { pr(path) }
  x.compare!
end

# No trailing slash
Benchmark.ips do |x|
  path = '/some/very/very/long/path/to/a/file/i/like/'
  x.report("pre_pr:#{path}")    { pre_pr(path) }
  x.report("pr:#{path}")        { pr(path) }
  x.report("envygeeks:#{path}") { pr(path) }
  x.compare!
end
back to top