Class: Jekyll::BlogTaxonomyGenerator

Inherits:
Generator
  • Object
show all
Defined in:
lib/generators/blog-taxonomy.rb

Instance Method Summary collapse

Instance Method Details

#generate(site) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/generators/blog-taxonomy.rb', line 70

def generate(site)
  # Collect unique categories and tags from posts
  categories = {}
  tags = {}

  site.posts.docs.each do |post|
    # Get categories from post.categories (nested under 'post' frontmatter)
    post_data = post.data['post']
    next unless post_data

    # Process categories
    if post_data['categories'].is_a?(Array)
      post_data['categories'].each do |category|
        next if category.nil? || category.to_s.strip.empty?
        category_name = titleize(category.to_s.strip)
        category_slug = slugify(category.to_s.strip)
        categories[category_slug] = category_name
      end
    end

    # Process tags
    if post_data['tags'].is_a?(Array)
      post_data['tags'].each do |tag|
        next if tag.nil? || tag.to_s.strip.empty?
        tag_name = titleize(tag.to_s.strip)
        tag_slug = slugify(tag.to_s.strip)
        tags[tag_slug] = tag_name
      end
    end
  end

  # Generate category pages
  categories.each do |slug, name|
    site.pages << CategoryPage.new(site, site.source, name, slug)
  end

  # Generate tag pages
  tags.each do |slug, name|
    site.pages << TagPage.new(site, site.source, name, slug)
  end

  # Log generation info
  Jekyll.logger.info "BlogTaxonomy:", "Generated #{categories.size} category pages and #{tags.size} tag pages"
end