NOTE¶ ↑
This gem is deprecated in favor of the new Rewritten gem. It’s better to make use of the new gem because being Rack based it decouples URLs from your App: no need alter routing, models, controllers and views as with the SpeakingURL gem here.
Speaking URL¶ ↑
The Speaking URL Gem provides an extension for the routes.rb
file of your Rails-App to allow for arbitrary URL being used for resources. The Gem is mainly SEO-motivated; it facilitates:
-
Usage of so called “static” or “nice-looking” URLs,
-
Implementation of a SEO friendly URL strategy,
-
Usage of different style URLs for resources of the same type
-
And (from a SEO-point maybe most importantly) Modification of URL strategies with proper HTTP (301) redirects.
This Gem does not:
-
generate URLs
-
manage all of your App’s URLs
These points have to by managed by yourself.
Installation¶ ↑
Add the gem to your Rails-App by including it in your Gemfile:
gem "speaking_url"
Usage¶ ↑
A quick list of steps that have to be done in order to get started with using this Gem follows.
Usage in your models¶ ↑
The Speaking Url must be setup within the models (resources) that you want to assign a Speaking URL to.
class Person include Mongoid::Document include SpeakingUrl::MongoResource end
This adds an array field urls
to the Person resource, where the current url and the url history are stored.
To add a new route to a some resource, use the add_mapping
method instead of modifying the field directly.
@person.add_mapping('/some/new/mapping')
Core Extensions¶ ↑
The gem comes with some helpful inflection methods for the String class.
-
urlify
: replaces all white space and special characters with dashes -
unumlaut
: converts German Umlauts to their ASCII counterparts
Additionally, the methods upcase
and downcase
are made Umlaut aware.
Configuring routes¶ ↑
To actually deploy the new routes, the Gem ships with the speaking_url_resource
method. You simply provide the resources as symbols:
speaking_url_resource :person, :product
As a a result both - the person and product resource - are made accessible by their speaking url(s). The controller is inferred from the model name, but can be customized:
speaking_url_resource :person, :controller => 'vip/persons' speaking_url_resource :product, :controller => 'my_products'
NOTE: You probably want to include the lines as one of your last statements in your route.rb
file to:
-
give standard routes higher priority
-
and achieve better performance (due to DB calls in the routing process)
Usage in Controllers ¶ ↑
In the appropriate controllers actions a specific resource is no longer fetches by it’s databse ID, but by the request.path:
@search = Person.find_by_url(request.path)
You can be sure there that a resource is found because otherwise the the controller wouldn’t have been called by the routing mapper.
Usage in views ¶ ↑
Instead of using the default rails route helpers in your views, you want to use the speaking url helpers:
<%= link_to "A nice person", @person.current_url %>
Outlook and Todo¶ ↑
So far the Gem is pretty limited. What could be developed for following version is:
-
more configuration options
-
support for other persistent storage mappers
-
go to a single table/collection implementation for performance and more flexibility (i.e. index and create actions/routes)
-
make this a rack application
License¶ ↑
GPLv3. Copyright 2011 Kai Rubarth.