Class: Jekyll::ArchivesV2::Archive

Inherits:
Page
  • Object
show all
Defined in:
lib/jekyll-archives-v2/archive.rb

Constant Summary collapse

ATTRIBUTES_FOR_LIQUID =

Attributes for Liquid templates

%w(
  collection_name
  documents
  type
  title
  date
  name
  path
  url
  permalink
).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(site, title, type, collection_name, documents) ⇒ Archive

Initialize a new Archive page

site - The Site object. title - The name of the tag/category or a Hash of the year/month/day in case of date. e.g. { :year => 2014, :month => 08 } or "my-category" or "my-tag". type - The type of archive. Can be one of "year", "month", "day", "category", or "tag" collection_name - The name of the collection. documents - The array of documents that belong in this archive.



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/jekyll-archives-v2/archive.rb', line 31

def initialize(site, title, type, collection_name, documents)
  @site = site
  @documents = documents
  @type   = type
  @title  = title
  @collection_name = collection_name
  @config = site.config["jekyll-archives"][collection_name]
  @slug   = slugify_string_title

  # Use ".html" for file extension and url for path
  @ext  = File.extname(relative_path)
  @path = relative_path
  @name = File.basename(relative_path, @ext)

  @data = {
    "layout" => layout,
  }
  @content = ""
end

Instance Attribute Details

#collection_nameObject

Returns the value of attribute collection_name.



8
9
10
# File 'lib/jekyll-archives-v2/archive.rb', line 8

def collection_name
  @collection_name
end

#documentsObject

Returns the value of attribute documents.



8
9
10
# File 'lib/jekyll-archives-v2/archive.rb', line 8

def documents
  @documents
end

#slugObject

Returns the value of attribute slug.



8
9
10
# File 'lib/jekyll-archives-v2/archive.rb', line 8

def slug
  @slug
end

#typeObject

Returns the value of attribute type.



8
9
10
# File 'lib/jekyll-archives-v2/archive.rb', line 8

def type
  @type
end

Instance Method Details

#dateObject

Produce a date object if a date-based archive

Returns a Date.



103
104
105
106
107
108
109
110
# File 'lib/jekyll-archives-v2/archive.rb', line 103

def date
  return unless @title.is_a?(Hash)

  @date ||= begin
    args = @title.values.map(&:to_i)
    Date.new(*args)
  end
end

#inspectObject

Returns the object as a debug String.



124
125
126
# File 'lib/jekyll-archives-v2/archive.rb', line 124

def inspect
  "#<Jekyll:Archive @type=#{@type} @title=#{@title} @data=#{@data.inspect}>"
end

#layoutObject

The layout to use for rendering

Returns the layout as a String



61
62
63
# File 'lib/jekyll-archives-v2/archive.rb', line 61

def layout
  @config.dig("layouts", type) || @config["layout"]
end


88
89
90
# File 'lib/jekyll-archives-v2/archive.rb', line 88

def permalink
  data.is_a?(Hash) && data["permalink"]
end

#relative_pathObject

Obtain the write path relative to the destination directory

Returns the destination relative path String.



115
116
117
118
119
120
121
# File 'lib/jekyll-archives-v2/archive.rb', line 115

def relative_path
  @relative_path ||= begin
    path = URL.unescape_path(url).gsub(%r!^/!, "")
    path = File.join(path, "index.html") if url.end_with?("/")
    path
  end
end

#templateObject

The template of the permalink.

Returns the template String as defined in config, else returns default template.



54
55
56
# File 'lib/jekyll-archives-v2/archive.rb', line 54

def template
  @config.dig("permalinks", type) || "/:collection/:type/:name/"
end

#titleObject

Produce a title object suitable for Liquid based on type of archive.

Returns a String (for tag and category archives) and nil for date-based archives.



96
97
98
# File 'lib/jekyll-archives-v2/archive.rb', line 96

def title
  @title if @title.is_a?(String)
end

#to_liquidObject

The Liquid representation of this page.



129
130
131
# File 'lib/jekyll-archives-v2/archive.rb', line 129

def to_liquid
  @to_liquid ||= Jekyll::ArchivesV2::PageDrop.new(self)
end

#urlObject

The generated relative url of this page. e.g. /about.html.

Returns the String url.



78
79
80
81
82
83
84
85
86
# File 'lib/jekyll-archives-v2/archive.rb', line 78

def url
  @url ||= URL.new(
    :template     => template,
    :placeholders => url_placeholders,
    :permalink    => nil
  ).to_s
rescue ArgumentError
  raise ArgumentError, "Template #{template.inspect} provided is invalid."
end

#url_placeholdersObject

Returns a hash of URL placeholder names (as symbols) mapping to the desired placeholder replacements. For details see "url.rb".



67
68
69
70
71
72
73
# File 'lib/jekyll-archives-v2/archive.rb', line 67

def url_placeholders
  if @title.is_a? Hash
    @title.merge(:collection => @collection_name, :type => @type.singularize)
  else
    { :collection => @collection_name, :name => @slug, :type => @type.singularize }
  end
end