From a0163068af99b0a4f73607ded10046d37fa9296e Mon Sep 17 00:00:00 2001 From: Stefan Schlott Date: Sat, 24 Aug 2013 11:04:18 +0200 Subject: [PATCH] Path names for articles --- Rules | 18 ++++++++++++++++++ lib/articlehelpers.rb | 20 ++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 lib/articlehelpers.rb diff --git a/Rules b/Rules index 38c52c2d..4bc80dd8 100644 --- a/Rules +++ b/Rules @@ -67,6 +67,24 @@ route "/htaccess" do "/.htaccess" end +route '/articles/*' do + # Find corresponding article (for getting metadata) + articleitem = article_base_item(item) + if articleitem + # Create directory basename + url = '/' + pathname_of_article(articleitem) + # Main article goes to index.html, don't touch other filenames + if item.equal? articleitem then + url + '/index.html' + else + idparts = item.identifier.split('/') + url + "/#{idparts.last}.#{item[:extension]}" + end + else + nil + end +end + route '*' do if item.binary? item.identifier.chop + '.' + item[:extension] diff --git a/lib/articlehelpers.rb b/lib/articlehelpers.rb new file mode 100644 index 00000000..1b855e4a --- /dev/null +++ b/lib/articlehelpers.rb @@ -0,0 +1,20 @@ +def article_base_item(item) + idparts = item.identifier.split('/') + articleid = "/#{idparts[1]}/#{idparts[2]}/" + if idparts.length>3 then + result = @items[articleid] + if (!result) + raise Nanoc::Errors::GenericTrivial.new("Base article #{articleid} for item #{item.identifier} not found!") + end + result + else + item + end +end + +def pathname_of_article(item) + idparts = item.identifier.split('/') + time = item[:created_at] + slug = idparts[2].sub( %r{^[0-9]*-}, "" ) + time.strftime('%Y-%m-%d') + '-' + slug +end