https://github.com/jekyll/jekyll
Raw File
Tip revision: 6e208e89e68285e1f208e1bf54bd6dd9a15f7d02 authored by Parker Moore on 18 April 2016, 21:28:21 UTC
Release :gem: 3.1.3
Tip revision: 6e208e8
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