<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: permalink code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 01:32:45 GMT</pubDate>
    <description>DZone Snippets: permalink code</description>
    <item>
      <title>Make your model play nice with SEO</title>
      <link>http://snippets.dzone.com/posts/show/4967</link>
      <description>&lt;code&gt;&lt;br /&gt;## config/initializers/string_extensions.rb&lt;br /&gt;&lt;br /&gt;require 'unicode'&lt;br /&gt;&lt;br /&gt;class String&lt;br /&gt;  def to_slug&lt;br /&gt;    str = Unicode.normalize_KD(self).gsub(/[^\x00-\x7F]/n,'')&lt;br /&gt;    str = str.gsub(/\W+/, '-').gsub(/^-+/,'').gsub(/-+$/,'').downcase&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def numeric?&lt;br /&gt;    if self =~ /^\d+$/&lt;br /&gt;      self.to_i&lt;br /&gt;    elsif self =~ /^\d+([,\.]\d+)?$/&lt;br /&gt;      self.tr(',','.').to_f&lt;br /&gt;    else&lt;br /&gt;      false&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;## app/models/article.rb&lt;br /&gt;&lt;br /&gt;# string :title&lt;br /&gt;# text   :body&lt;br /&gt;# string :permalink&lt;br /&gt;class Article &lt; ActiveRecord::Base&lt;br /&gt;  before_save :set_permalink&lt;br /&gt;&lt;br /&gt;  # article_path(@article)&lt;br /&gt;  # &gt;&gt; /article/5&lt;br /&gt;  # article_path(@article.permalink)&lt;br /&gt;  # /article/pink-ferret&lt;br /&gt;  def self.find(*args)&lt;br /&gt;    if args.first.is_a?(String) and !args.first.numeric?&lt;br /&gt;      find_by_permalink(args.shift,*args) or raise ActiveRecord::RecordNotFound&lt;br /&gt;    else&lt;br /&gt;      super&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # article_path(@article)&lt;br /&gt;  # &gt;&gt; /article/5-pink-ferret&lt;br /&gt;  def to_param&lt;br /&gt;    "#{id}-#{permalink}"&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  private&lt;br /&gt;  def set_permalink&lt;br /&gt;    self.permalink = title.to_slug&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 09 Jan 2008 15:13:08 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4967</guid>
      <author>jerome ()</author>
    </item>
    <item>
      <title>Permalink from post title</title>
      <link>http://snippets.dzone.com/posts/show/4457</link>
      <description>Method for permalink creation in ruby, based on drupal code&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def create_permalink(string, separator = '-', max_size = 127)&lt;br /&gt;&lt;br /&gt;    # words to ignore, usually the same words ignored by search engines&lt;br /&gt;    ignore_words = ['a', 'an', 'the']&lt;br /&gt;    ignore_re    = String.new&lt;br /&gt;    &lt;br /&gt;    # building ignore regexp&lt;br /&gt;    ignore_words.each{ |word|&lt;br /&gt;      ignore_re &lt;&lt; word + '\b|\b'&lt;br /&gt;    }&lt;br /&gt;    ignore_re = '\b' + ignore_re + '\b'&lt;br /&gt;    &lt;br /&gt;    # replace apostrophes with separator&lt;br /&gt;    permalink = string.gsub("'", separator)&lt;br /&gt;    &lt;br /&gt;    # delete ignore words&lt;br /&gt;    permalink.gsub!(ignore_re, '')&lt;br /&gt;&lt;br /&gt;    # all down&lt;br /&gt;    permalink.downcase!&lt;br /&gt;&lt;br /&gt;    # preserve alphanumerics, everything else becomes a separator&lt;br /&gt;    permalink.gsub!(/[^a-z0-9]+/, separator)&lt;br /&gt;    &lt;br /&gt;    # enforce the maximum component length and return it&lt;br /&gt;    permalink = permalink.to(max_size)&lt;br /&gt;    &lt;br /&gt;    # trim any leading or trailing separators&lt;br /&gt;    return permalink.gsub(/^\\#{separator}+|\\#{separator}+$/, '')&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 24 Aug 2007 11:04:26 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4457</guid>
      <author>carlo984 (Carlo)</author>
    </item>
    <item>
      <title>Nice post slug</title>
      <link>http://snippets.dzone.com/posts/show/2384</link>
      <description>This code replaces accents to normal chars(e.g "&#195;&#161;" =&gt; "a"), everything that isn&#194;&#180;t in "a-zA-Z0-9" to "", multiples spaces to one space, and one space to "-".&lt;br /&gt;&lt;br /&gt;This is useful to make URLs from titles, like Netscape.com does...&lt;br /&gt;&lt;br /&gt;"A new report recommends only work 4 -6 hrs a day" =&gt; "A-new-report-recommends-only-work-4-6-hrs-a-day"&lt;br /&gt;&lt;br /&gt;"Video: \"Popular Mechanics\" editor debunks 9/11 myths" =&gt; "Video-Popular-Mechanics-editor-debunks-911-myths"&lt;br /&gt;&lt;br /&gt;etc..&lt;br /&gt;The code is 95% based on http://textsnippets.com/posts/show/451&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def self.nice_slug(str)&lt;br /&gt;		&lt;br /&gt;		accents = { &lt;br /&gt;		  ['&#195;&#161;','&#195;&#160;','&#195;&#162;','&#195;&#164;','&#195;&#163;'] =&gt; 'a',&lt;br /&gt;		  ['&#195;&#402;','&#195;&#8222;','&#195;&#8218;','&#195;&#8364;','&#195;?'] =&gt; 'A',&lt;br /&gt;		  ['&#195;&#169;','&#195;&#168;','&#195;&#170;','&#195;&#171;'] =&gt; 'e',&lt;br /&gt;		  ['&#195;&#8249;','&#195;&#8240;','&#195;&#710;','&#195;&#352;'] =&gt; 'E',&lt;br /&gt;		  ['&#195;&#173;','&#195;&#172;','&#195;&#174;','&#195;&#175;'] =&gt; 'i',&lt;br /&gt;		  ['&#195;?','&#195;&#381;','&#195;&#338;','&#195;?'] =&gt; 'I',&lt;br /&gt;		  ['&#195;&#179;','&#195;&#178;','&#195;&#180;','&#195;&#182;','&#195;&#181;'] =&gt; 'o',&lt;br /&gt;		  ['&#195;&#8226;','&#195;&#8211;','&#195;&#8221;','&#195;&#8217;','&#195;&#8220;'] =&gt; 'O',&lt;br /&gt;		  ['&#195;&#186;','&#195;&#185;','&#195;&#187;','&#195;&#188;'] =&gt; 'u',&lt;br /&gt;		  ['&#195;&#353;','&#195;&#8250;','&#195;&#8482;','&#195;&#339;'] =&gt; 'U',&lt;br /&gt;		  ['&#195;&#167;'] =&gt; 'c', ['&#195;&#8225;'] =&gt; 'C',&lt;br /&gt;		  ['&#195;&#177;'] =&gt; 'n', ['&#195;&#8216;'] =&gt; 'N'&lt;br /&gt;		  }&lt;br /&gt;		accents.each do |ac,rep|&lt;br /&gt;		  ac.each do |s|&lt;br /&gt;			str = str.gsub(s, rep)&lt;br /&gt;		  end&lt;br /&gt;		end&lt;br /&gt;		str = str.gsub(/[^a-zA-Z0-9 ]/,"")&lt;br /&gt;		&lt;br /&gt;		str = str.gsub(/[ ]+/," ")&lt;br /&gt;		&lt;br /&gt;&lt;br /&gt;		str = str.gsub(/ /,"-")&lt;br /&gt;		&lt;br /&gt;		#str = str.downcase&lt;br /&gt;&lt;br /&gt;	end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 10 Aug 2006 00:09:27 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2384</guid>
      <author>sligowaths (Tiago Serafim)</author>
    </item>
  </channel>
</rss>
