class Silly::UrlSlug
Attributes
convertable_extensions[R]
Public Class Methods
add_extensions(ext)
click to toggle source
# File lib/silly/url_slug.rb, line 7 def add_extensions(ext) if ext.is_a?(Array) @convertable_extensions += ext else @convertable_extensions << ext end end
new(opts)
click to toggle source
# File lib/silly/url_slug.rb, line 16 def initialize(opts) @item = opts[:item] @scope = @item.id.split('/').first @data = opts[:data] @format = opts[:format] parts = @item.id.split('/') parts.shift @scoped_id = parts.join('/') end
Public Instance Methods
category()
click to toggle source
Category is only the first one if multiple categories exist.
# File lib/silly/url_slug.rb, line 106 def category string = Array(@data['categories'])[0] return '' if string.to_s.empty? string.split('/').map { |c| Silly::StringFormat.clean_slug_and_escape(c) }.join('/') end
data()
click to toggle source
# File lib/silly/url_slug.rb, line 66 def data result = @data result = result.merge(date_data) if uses_date? result.merge({ "filename" => filename, "path" => path, "relative_path" => relative_path, "categories" => category, }) end
date_data()
click to toggle source
# File lib/silly/url_slug.rb, line 78 def date_data date = Time.parse(@data['date'].to_s) { "year" => date.strftime("%Y"), "month" => date.strftime("%m"), "day" => date.strftime("%d"), "i_day" => date.strftime("%d").to_i.to_s, "i_month" => date.strftime("%m").to_i.to_s, } rescue ArgumentError, TypeError raise( "ArgumentError:" + " The file '#{ @item.realpath }' has a permalink '#{ @format }'" + " which is date dependant but the date '#{ @data['date'] }' could not be parsed." + " Ensure the date's format is: 'YYYY-MM-DD'" ) end
dynamic()
click to toggle source
@return the dynamic URL with token substitution.
# File lib/silly/url_slug.rb, line 42 def dynamic cache = data result = @format .gsub(/:[^\/\.]+/) { |a| cache[$&.gsub(':', '')] } .gsub('//', '/') .split('/') # this is ugly but I'm out of ideas. Help! last = result.pop if uses_extension? last = last .split('.') .map{ |a| Silly::StringFormat.clean_slug_and_escape(a) } .join('.') else last = Silly::StringFormat.clean_slug_and_escape(last) end result .map{ |a| Silly::StringFormat.clean_slug_and_escape(a) } .join('/') + "/#{ last }" end
ext()
click to toggle source
# File lib/silly/url_slug.rb, line 101 def ext @item.ext end
filename()
click to toggle source
# File lib/silly/url_slug.rb, line 97 def filename File.basename(@scoped_id, ext) end
generate()
click to toggle source
@return URL Slug based on the given data and format. The url should always have a preceeding slash “/some-url”
# File lib/silly/url_slug.rb, line 29 def generate url = @format.include?(':') ? dynamic : literal url = process_url_extension(url) url.to_s.start_with?('/') ? url : "/#{ url }" end
literal()
click to toggle source
@return the literal URL without token substitution.
# File lib/silly/url_slug.rb, line 37 def literal @format.gsub(/^\//, '').split('/').map {|p| CGI::escape(p) }.join('/') end
path()
click to toggle source
# File lib/silly/url_slug.rb, line 120 def path File.join(@scope, relative_path) end
relative_path()
click to toggle source
# File lib/silly/url_slug.rb, line 115 def relative_path string = File.dirname(@scoped_id) (string == ".") ? "" : string end
Private Instance Methods
process_url_extension(url)
click to toggle source
The url extension depends on multiple factors: user-config : preserve any extension set by the user in the format. converters : Automatically change convertable extensions to .html
Non-convertable file-extensions should 'pass-through'
# File lib/silly/url_slug.rb, line 149 def process_url_extension(url) return url if uses_extension? url += self.class.convertable_extensions.include?(ext) ? '.html' : ext url.gsub(/index|index.html$/, '').gsub(/\.html$/, '') end
uses_date?()
click to toggle source
# File lib/silly/url_slug.rb, line 126 def uses_date? result = false %w{ :year :month :day :i_day :i_month }.each do |token| if @format.include?(token) result = true break end end result end
uses_extension?()
click to toggle source
Is an extension explicitly defined?
# File lib/silly/url_slug.rb, line 139 def uses_extension? @format =~ /\.[^\.]+$/ end