From c742fb77014242c59db86dc3ea561df699f9e9e7 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Sat, 22 Nov 2008 12:36:32 -0800 Subject: [PATCH] implement a real related posts feature. up to 0.1.2 --- History.txt | 4 +++- Rakefile | 2 +- bin/jekyll | 1 + jekyll.gemspec | 5 ++++- lib/jekyll.rb | 3 ++- lib/jekyll/convertible.rb | 5 +++++ lib/jekyll/post.rb | 13 ++++++++++++- 7 files changed, 28 insertions(+), 5 deletions(-) diff --git a/History.txt b/History.txt index 9e94db7d..89818b6d 100644 --- a/History.txt +++ b/History.txt @@ -1,4 +1,6 @@ -== 0.1.2 / +== 0.1.2 / 2008-11-22 + * Major Features + * Add a real "related posts" implementation using Classifier * Command Line Changes * Allow cli to be called with 0, 1, or 2 args intuiting dir paths if they are omitted diff --git a/Rakefile b/Rakefile index 3853e02c..4b2d4790 100644 --- a/Rakefile +++ b/Rakefile @@ -6,7 +6,7 @@ Hoe.new('jekyll', Jekyll::VERSION) do |p| # p.rubyforge_name = 'jekyllx' # if different than lowercase project name p.developer('Tom Preston-Werner', 'tom@mojombo.com') p.summary = "Jekyll is a simple, blog aware, static site generator." - p.extra_deps = ['RedCloth', 'liquid'] + p.extra_deps = ['RedCloth', 'liquid', 'classifier'] end desc "Open an irb session preloaded with this library" diff --git a/bin/jekyll b/bin/jekyll index 986c1715..a8471a22 100755 --- a/bin/jekyll +++ b/bin/jekyll @@ -7,6 +7,7 @@ require 'jekyll' case ARGV.size when 0 dest = File.join('.', '_site') + FileUtils.rm_rf(dest) FileUtils.mkdir_p(dest) Jekyll.process('.', dest) when 1 diff --git a/jekyll.gemspec b/jekyll.gemspec index f18a3d85..fcd41027 100644 --- a/jekyll.gemspec +++ b/jekyll.gemspec @@ -1,6 +1,6 @@ Gem::Specification.new do |s| s.name = %q{jekyll} - s.version = "0.1.1" + s.version = "0.1.2" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["Tom Preston-Werner"] @@ -25,15 +25,18 @@ Gem::Specification.new do |s| if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then s.add_runtime_dependency(%q, [">= 0"]) s.add_runtime_dependency(%q, [">= 0"]) + s.add_runtime_dependency(%q, [">= 0"]) s.add_development_dependency(%q, [">= 1.8.0"]) else s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, [">= 1.8.0"]) end else s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, [">= 0"]) + s.add_dependency(%q, [">= 0"]) s.add_dependency(%q, [">= 1.8.0"]) end end diff --git a/lib/jekyll.rb b/lib/jekyll.rb index 4a598911..925e1165 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -12,6 +12,7 @@ require 'time' # 3rd party require 'liquid' require 'redcloth' +require 'classifier' # internal requires require 'jekyll/site' @@ -22,7 +23,7 @@ require 'jekyll/post' require 'jekyll/filters' module Jekyll - VERSION = '0.1.1' + VERSION = '0.1.2' def self.process(source, dest) Jekyll::Site.new(source, dest).process diff --git a/lib/jekyll/convertible.rb b/lib/jekyll/convertible.rb index d98853d1..62317bab 100644 --- a/lib/jekyll/convertible.rb +++ b/lib/jekyll/convertible.rb @@ -1,5 +1,10 @@ module Jekyll module Convertible + # Return the contents as a string + def to_s + self.content || '' + end + # Read the YAML frontmatter # +base+ is the String path to the dir containing the file # +name+ is the String filename of the file diff --git a/lib/jekyll/post.rb b/lib/jekyll/post.rb index 3fa989dd..0d8eb716 100644 --- a/lib/jekyll/post.rb +++ b/lib/jekyll/post.rb @@ -4,6 +4,10 @@ module Jekyll include Comparable include Convertible + class << self + attr_accessor :lsi + end + MATCHER = /^(\d+-\d+-\d+)-(.*)(\.[^.]+)$/ # Post name validator. Post filenames must be like: @@ -77,7 +81,14 @@ module Jekyll # # Returns [] def related_posts(posts) - related = posts - [self] + self.class.lsi ||= begin + lsi = Classifier::LSI.new + posts.each { |x| lsi.add_item(x) } + lsi + end + + related = self.class.lsi.find_related(self.content, 11) + related - [self] end # Add any necessary layouts to this post