class Jekyll::Tags::PostComparer

Constants

MATCHER

Attributes

date[R]
name[R]
path[R]
slug[R]

Public Class Methods

new(name) click to toggle source
# File lib/jekyll/tags/post_url.rb, line 10
def initialize(name)
  @name = name

  all, @path, @date, @slug = *name.sub(%r!^/!, "").match(MATCHER)
  unless all
    raise Jekyll::Errors::InvalidPostNameError,
          "'#{name}' does not contain valid date and/or title."
  end

  basename_pattern = "#{date}-#{Regexp.escape(slug)}\\.[^.]+"
  @name_regex = %r!^_posts/#{path}#{basename_pattern}|^#{path}_posts/?#{basename_pattern}!
end

Public Instance Methods

==(other) click to toggle source
# File lib/jekyll/tags/post_url.rb, line 30
def ==(other)
  other.relative_path.match(@name_regex)
end
deprecated_equality(other) click to toggle source
# File lib/jekyll/tags/post_url.rb, line 34
def deprecated_equality(other)
  slug == post_slug(other) &&
    post_date.year  == other.date.year &&
    post_date.month == other.date.month &&
    post_date.day   == other.date.day
end
post_date() click to toggle source
# File lib/jekyll/tags/post_url.rb, line 23
def post_date
  @post_date ||= Utils.parse_date(
    date,
    "'#{date}' does not contain valid date and/or title."
  )
end

Private Instance Methods

post_slug(other) click to toggle source

Construct the directory-aware post slug for a Jekyll::Post

other - the Jekyll::Post

Returns the post slug with the subdirectory (relative to _posts)

# File lib/jekyll/tags/post_url.rb, line 48
def post_slug(other)
  path = other.basename.split("/")[0...-1].join("/")
  if path.nil? || path == ""
    other.data["slug"]
  else
    "#{path}/#{other.data["slug"]}"
  end
end