diff options
Diffstat (limited to '_plugins/related_posts.rb')
-rw-r--r-- | _plugins/related_posts.rb | 54 |
1 files changed, 24 insertions, 30 deletions
diff --git a/_plugins/related_posts.rb b/_plugins/related_posts.rb index 7e07c66..449cb73 100644 --- a/_plugins/related_posts.rb +++ b/_plugins/related_posts.rb @@ -1,42 +1,40 @@ require 'jekyll/post' -module RelatedPosts - - # Used to remove #related_posts so that it can be overridden - def self.included(klass) - klass.class_eval do - remove_method :related_posts +module Jekyll + module RelatedPostsByCategory + # Used to remove #related_posts so that it can be overridden + def self.included(klass) + klass.class_eval do + remove_method :related_posts + end end - end - # Calculate related posts. - # - # Returns [<Post>] - def related_posts(posts) - return [] unless posts.size > 1 - highest_freq = Jekyll::Post.tag_freq(posts).values.max - related_scores = Hash.new(0) - posts.each do |post| - post.tags.each do |tag| - if self.tags.include?(tag) && post != self - cat_freq = Jekyll::Post.tag_freq(posts)[tag] - related_scores[post] += (1+highest_freq-cat_freq) + # Calculate related posts. + # Returns [<Post>] + def related_posts(posts) + return [] unless posts.size > 1 + highest_freq = tag_freq(posts).values.max + related_scores = Hash.new(0) + + posts.each do |post| + post.categories.each do |tag| + if self.categories.include?(tag) && post != self + cat_freq = tag_freq(posts)[tag] + related_scores[post] += (1+highest_freq-cat_freq) + end end end - end - Jekyll::Post.sort_related_posts(related_scores) - end + sort_related_posts(related_scores) + end - module ClassMethods # Calculate the frequency of each tag. - # # Returns {tag => freq, tag => freq, ...} def tag_freq(posts) return @tag_freq if @tag_freq @tag_freq = Hash.new(0) posts.each do |post| - post.tags.each {|tag| @tag_freq[tag] += 1} + post.categories.each {|tag| @tag_freq[tag] += 1} end @tag_freq end @@ -56,11 +54,7 @@ module RelatedPosts end end -end - -module Jekyll class Post - include RelatedPosts - extend RelatedPosts::ClassMethods + include RelatedPostsByCategory end end |