diff --git a/lib/ext/ext.rb b/lib/ext/ext.rb index c3b2cdd..4f18707 100644 --- a/lib/ext/ext.rb +++ b/lib/ext/ext.rb @@ -1,3 +1,5 @@ +require 'iconv' + class Object def meta_def name, &blk (class << self; self; end).instance_eval do @@ -7,8 +9,15 @@ def meta_def name, &blk end class String - def slugize - self.downcase.gsub(/&/, 'and').gsub(/\s+/, '-').gsub(/[^a-z0-9-]/, '') + # http://websideattractions.com/2008/11/06/squish-the-slug-the-rails-way + def slugize(slug='-') + slugged = Iconv.iconv('ascii//TRANSLIT//IGNORE', 'utf-8', self).to_s + slugged.gsub!(/&/, 'and') + slugged.gsub!(/[^\w_\-#{Regexp.escape(slug)}]+/i, slug) + slugged.gsub!(/#{slug}{2,}/i, slug) + slugged.gsub!(/^#{slug}|#{slug}$/i, '') + slugged.downcase! + URI.escape(slugged, /[^\w_+-]/i) end def humanize diff --git a/lib/toto.rb b/lib/toto.rb index d74b920..43e269c 100644 --- a/lib/toto.rb +++ b/lib/toto.rb @@ -90,7 +90,10 @@ def archives filter = "" end def article route - Article.new("#{Paths[:articles]}/#{route.join('-')}.#{self[:ext]}", @config).load + path = self.articles.select do |article| + File.basename(article, ".#{self[:ext]}").slugize.eql? route.join('-') + end.last || File.join(Paths[:articles], "#{route.join('-')}.#{self[:ext]}") + Article.new(path, @config).load end def /