74 lines
1.8 KiB
Ruby
74 lines
1.8 KiB
Ruby
# ~*~ encoding: utf-8 ~*~
|
|
require 'gemojione'
|
|
|
|
module Precious
|
|
module Helpers
|
|
|
|
EMOJI_PATHNAME = Pathname.new(Gemojione.images_path).freeze
|
|
|
|
def join_page_name(name, ext)
|
|
"#{name}#{ext}"
|
|
end
|
|
|
|
# Extract the path string that Gollum::Wiki expects
|
|
def extract_path(file_path)
|
|
return nil if file_path.nil?
|
|
last_slash = file_path.rindex("/")
|
|
if last_slash
|
|
file_path[0, last_slash]
|
|
end
|
|
end
|
|
|
|
# Extract the 'page' name from the file_path
|
|
def extract_name(file_path)
|
|
if file_path[-1, 1] == "/"
|
|
return nil
|
|
end
|
|
|
|
# File.basename is too eager to please and will return the last
|
|
# component of the path even if it ends with a directory separator.
|
|
ext = ::File.extname(file_path)
|
|
return ::File.basename(file_path, ext), ext
|
|
end
|
|
|
|
def sanitize_empty_params(param)
|
|
[nil, ''].include?(param) ? nil : CGI.unescape(param)
|
|
end
|
|
|
|
# Ensure path begins with a single leading slash
|
|
def clean_path(path)
|
|
if path
|
|
(path[0] != '/' ? path.insert(0, '/') : path).gsub(/\/{2,}/, '/')
|
|
end
|
|
end
|
|
|
|
# Remove all slashes from the start of string.
|
|
# Remove all double slashes
|
|
def clean_url url
|
|
return url if url.nil?
|
|
url.gsub('%2F', '/').gsub(/^\/+/, '').gsub('//', '/')
|
|
end
|
|
|
|
def forbid(msg = "Forbidden. This wiki is set to no-edit mode.")
|
|
@message = msg
|
|
status 403
|
|
halt mustache :error
|
|
end
|
|
|
|
def not_found(msg = nil)
|
|
@message = msg || "The requested page does not exist."
|
|
status 404
|
|
return mustache :error
|
|
end
|
|
|
|
def emoji(name)
|
|
if emoji = Gemojione.index.find_by_name(name)
|
|
IO.read(EMOJI_PATHNAME.join("#{emoji['unicode']}.png"))
|
|
else
|
|
fail ArgumentError, "emoji `#{name}' not found"
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|