Skip to content

Commit

Permalink
Added sluggable_finder gem for user permalinks; Members paths
Browse files Browse the repository at this point in the history
  • Loading branch information
jaimeiniesta committed Jun 11, 2009
1 parent 51df0b7 commit 62e3f77
Show file tree
Hide file tree
Showing 14 changed files with 120 additions and 19 deletions.
3 changes: 3 additions & 0 deletions app/models/user.rb
Expand Up @@ -13,6 +13,8 @@ class User < ActiveRecord::Base
validates_uniqueness_of :email, :allow_blank => true
validates_uniqueness_of :blog_url, :twitter_user, :github_user, :allow_blank => true

sluggable_finder :name

# Returns the full github URL for this user if has a github user, or nil if not
def github_url
github_user.blank? ? nil : "#{GITHUB_URL}#{github_user}"
Expand All @@ -22,4 +24,5 @@ def github_url
def twitter_url
twitter_user.blank? ? nil : "#{TWITTER_URL}#{twitter_user}"
end

end
4 changes: 2 additions & 2 deletions app/views/entries/_entry.html.erb
@@ -1,6 +1,6 @@
<p>
<strong><%= link_to h(entry.title), entry.url %></strong> published<%= " #{time_ago_in_words entry.published} ago" if entry.published %> by <%= link_to h(entry.feed.user.name), entry.feed.user %>
<%= link_to image_tag(url_for_gravatar(entry.feed.user.email), :alt => h(entry.feed.user.name), :title => h(entry.feed.user.name), :align => 'absmiddle', :hspace => 10), entry.feed.user if PLANETOID_CONF[:layout][:entries][:show_avatar] %>
<strong><%= link_to h(entry.title), entry.url %></strong> published<%= " #{time_ago_in_words entry.published} ago" if entry.published %> by <%= link_to h(entry.feed.user.name), member_path(entry.feed.user) %>
<%= link_to image_tag(url_for_gravatar(entry.feed.user.email), :alt => h(entry.feed.user.name), :title => h(entry.feed.user.name), :align => 'absmiddle', :hspace => 10), member_path(entry.feed.user) if PLANETOID_CONF[:layout][:entries][:show_avatar] %>
</p>

<% if PLANETOID_CONF[:layout][:entries][:show_summary] && entry.summary %>
Expand Down
4 changes: 0 additions & 4 deletions app/views/feeds/edit.html.erb
Expand Up @@ -20,8 +20,4 @@
<%= f.submit 'Update' %>
</p>
<% end %>
<%= link_to 'Show', @feed %> |
<%= link_to 'Back', feeds_path %>

</div>
2 changes: 1 addition & 1 deletion app/views/feeds/index.html.erb
Expand Up @@ -14,7 +14,7 @@

<% @feeds.each do |feed| %>
<tr>
<td><%=link_to h(feed.user.name), feed.user %></td>
<td><%=link_to h(feed.user.name), member_path(feed.user) %></td>
<td><%= auto_link feed.feed_url %></td>
<% if admin? %>
<td><%= link_to 'Edit', edit_feed_path(feed) %></td>
Expand Down
1 change: 0 additions & 1 deletion app/views/feeds/new.html.erb
Expand Up @@ -21,5 +21,4 @@
</p>
<% end %>

<%= link_to 'Back', feeds_path %>
</div>
2 changes: 1 addition & 1 deletion app/views/projects/_project.html.erb
@@ -1,5 +1,5 @@
<div class="span-12 last">
<h3><strong><%= h project.name %></strong> <small>by <%= project.users.map {|u| "#{link_to(h(u.name), u)}"}.join(", ") %></small></h3>
<h3><strong><%= h project.name %></strong> <small>by <%= project.users.map {|u| "#{link_to(h(u.name), member_path(u))}"}.join(", ") %></small></h3>
<p><%= link_to h(project.url.gsub("http://", "")), h(project.url) %></p>
<blockquote><%= simple_format(project.description) %></blockquote>

Expand Down
2 changes: 1 addition & 1 deletion app/views/users/_user.html.erb
@@ -1,5 +1,5 @@
<div class="span-3">
<%= link_to image_tag(url_for_gravatar(user.email), :alt => h(user.name), :title => h(user.name)), user if PLANETOID_CONF[:layout][:users][:show_avatar] %>
<%= link_to image_tag(url_for_gravatar(user.email), :alt => h(user.name), :title => h(user.name)), member_path(user) if PLANETOID_CONF[:layout][:users][:show_avatar] %>
</div>
<div class="span-12 last">
<h3><strong><%= h user.name %></strong></h3>
Expand Down
1 change: 1 addition & 0 deletions config/environment.rb
Expand Up @@ -20,6 +20,7 @@
# config.gem "sqlite3-ruby", :lib => "sqlite3"
# config.gem "aws-s3", :lib => "aws/s3"
config.gem 'pauldix-feedzirra', :version => '~> 0.0.12', :lib => 'feedzirra', :source => 'http://gems.github.com'
config.gem "ismasan-sluggable_finder", :source => "http://gems.github.com", :lib => 'sluggable_finder'

# Only load the plugins named here, in the order given (default is alphabetical).
# :all can be used as a placeholder for all plugins not explicitly named
Expand Down
3 changes: 3 additions & 0 deletions config/routes.rb
Expand Up @@ -8,6 +8,9 @@
map.resources :entries
map.resources :feeds
map.resources :users

map.members '/members', :controller => 'users', :action => 'index'
map.member '/members/:id', :controller => 'users', :action => 'show'

# The priority is based upon order of creation: first created -> highest priority.

Expand Down
77 changes: 69 additions & 8 deletions db/development_structure.sql
@@ -1,14 +1,75 @@
CREATE TABLE "entries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "feed_id" integer, "title" varchar(255), "url" varchar(255), "author" varchar(255), "summary" text, "content" text, "published" datetime, "categories" varchar(255), "created_at" datetime, "updated_at" datetime);
CREATE TABLE "feeds" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "title" varchar(255), "url" varchar(255), "feed_url" varchar(255), "etag" varchar(255), "last_modified" datetime, "created_at" datetime, "updated_at" datetime);
CREATE TABLE "projects" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "description" text, "url" varchar(255), "created_at" datetime, "updated_at" datetime);
CREATE TABLE "projects_users" ("project_id" integer, "user_id" integer);
CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255), "blog_url" varchar(255), "twitter_url" varchar(255), "github_url" varchar(255), "created_at" datetime, "updated_at" datetime);
CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
CREATE TABLE `entries` (
`id` int(11) NOT NULL auto_increment,
`feed_id` int(11) default NULL,
`title` varchar(255) default NULL,
`url` varchar(255) default NULL,
`author` varchar(255) default NULL,
`summary` text,
`content` text,
`published` datetime default NULL,
`categories` varchar(255) default NULL,
`created_at` datetime default NULL,
`updated_at` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `feeds` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) default NULL,
`title` varchar(255) default NULL,
`url` varchar(255) default NULL,
`feed_url` varchar(255) default NULL,
`etag` varchar(255) default NULL,
`last_modified` datetime default NULL,
`created_at` datetime default NULL,
`updated_at` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `projects` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`description` text,
`url` varchar(255) default NULL,
`created_at` datetime default NULL,
`updated_at` datetime default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

CREATE TABLE `projects_users` (
`project_id` int(11) default NULL,
`user_id` int(11) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `schema_migrations` (
`version` varchar(255) NOT NULL,
UNIQUE KEY `unique_schema_migrations` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`email` varchar(255) default NULL,
`blog_url` varchar(255) default NULL,
`twitter_user` varchar(255) default NULL,
`github_user` varchar(255) default NULL,
`created_at` datetime default NULL,
`updated_at` datetime default NULL,
`slug` varchar(255) default NULL,
PRIMARY KEY (`id`),
KEY `index_users_on_slug` (`slug`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO schema_migrations (version) VALUES ('20090520134455');

INSERT INTO schema_migrations (version) VALUES ('20090520145728');

INSERT INTO schema_migrations (version) VALUES ('20090520155946');

INSERT INTO schema_migrations (version) VALUES ('20090528214708');
INSERT INTO schema_migrations (version) VALUES ('20090528214049');

INSERT INTO schema_migrations (version) VALUES ('20090528214708');

INSERT INTO schema_migrations (version) VALUES ('20090609085237');

INSERT INTO schema_migrations (version) VALUES ('20090611075753');
17 changes: 17 additions & 0 deletions db/migrate/20090611075753_add_slug_to_users.rb
@@ -0,0 +1,17 @@
class AddSlugToUsers < ActiveRecord::Migration
def self.up
add_column :users, :slug, :string
add_index :users, :slug

# Generate slugs for existing users
User.all.each do |user|
user.save
end
end

def self.down
remove_index :users, :slug
remove_column :users, :slug
end
end

5 changes: 4 additions & 1 deletion db/schema.rb
Expand Up @@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 20090528214708) do
ActiveRecord::Schema.define(:version => 20090611075753) do

create_table "entries", :force => true do |t|
t.integer "feed_id"
Expand Down Expand Up @@ -56,6 +56,9 @@
t.string "github_user"
t.datetime "created_at"
t.datetime "updated_at"
t.string "slug"
end

add_index "users", ["slug"], :name => "index_users_on_slug"

end
8 changes: 8 additions & 0 deletions test/fixtures/users.yml
@@ -1,6 +1,7 @@
jaime:
id: 1
name: Jaime Iniesta
slug: jaime-iniesta
email: jaimeiniesta@example.com
blog_url: http://jaimeiniesta.com
twitter_user: jaimeiniesta
Expand All @@ -9,6 +10,7 @@ jaime:
rai:
id: 2
name: Raimond Garcia
slug: raimond-garcia
email: raimondgarcia@example.com
blog_url: http://raimondgarcia.com
twitter_user: voodoorai2000
Expand All @@ -17,6 +19,7 @@ rai:
raul:
id: 3
name: Raul Murciano
slug: raul-murciano
email: raulmurciano@example.com
blog_url: http://raul.murciano.net
twitter_user: happywebcoder
Expand All @@ -25,6 +28,7 @@ raul:
javier:
id: 4
name: Javier Ramirez
slug: javier-ramirez
email: javierramirez@example.com
blog_url: http://formatinternet.com
twitter_user: supercoco9
Expand All @@ -33,6 +37,7 @@ javier:
emili:
id: 5
name: Emili Parreno
slug: emili-parreno
email: emiliparreno@example.com
blog_url: http://eparreno.com
twitter_user: eparreno
Expand All @@ -41,6 +46,7 @@ emili:
felipe:
id: 6
name: Felipe Talavera
slug: felipe-talavera
email: felipetalavera@example.com
blog_url: http://iamfelipe.com
twitter_user: flype
Expand All @@ -49,6 +55,7 @@ felipe:
juan:
id: 7
name: Juan Gallego
slug: juan-gallego
email: juangallego@example.com
blog_url: http://juan.gg
twitter_user: nickel83
Expand All @@ -57,5 +64,6 @@ juan:
notdeveloper:
id: 8
name: Not Developer
slug: not-developer
email: notdeveloper@example.com
blog_url: http://notdeveloper.example.com
10 changes: 10 additions & 0 deletions test/unit/user_test.rb
Expand Up @@ -135,6 +135,16 @@ def test_should_get_github_url
assert_nil users(:notdeveloper).github_url
end

def test_should_create_slug
user = create_user
assert_equal user.slug, 'pepe-planeta'
end

def test_should_not_repeat_slug
user = create_user(:name => 'Jaime Iniesta')
assert_equal user.slug, 'jaime-iniesta-2'
end

private

def create_user(options = {})
Expand Down

0 comments on commit 62e3f77

Please sign in to comment.