diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 49e627f..8a994fb 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -1,5 +1,7 @@ class AccountController < ApplicationController before_filter :login_required, :except => [:login, :logout] + + cache_sweeper :user_sweeper, :only => [:details,:profile] def profile @user = self.current_user if logged_in? diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb index 76b8471..8a9a796 100644 --- a/app/controllers/admin_controller.rb +++ b/app/controllers/admin_controller.rb @@ -3,6 +3,8 @@ class AdminController < ApplicationController before_filter :signup_first_user, :except => [:signup] before_filter :no_more_than_one_signup, :only => [:signup] + cache_sweeper :post_sweeper, :only => [:new_post] + def signup @admin = Admin.new diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index d67cebd..492663c 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,6 +1,8 @@ class CommentsController < ApplicationController before_filter :login_required + cache_sweeper :comment_sweeper, :only => [:create] + def create @comment = Comment.new(params[:comment]) @comment.talk_id = params[:id] diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index c3fefc8..2d0f607 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -1,18 +1,27 @@ class EventsController < ApplicationController + caches_page :feed def index - @users = User.find :all, :order => "id DESC", :limit => 10 - @user_count = User.count - @talks = Talk.find :all, :order => "id DESC", :limit => 5 - @talk_count = Talk.count - @posts = Post.find :all, :order => "id DESC" + unless fragment_exist?("home_users") + @users = User.find :all, :order => "id DESC", :limit => 10 + @user_count = User.count + end + + unless fragment_exist?("home_talks") + @talks = Talk.find :all, :order => "id DESC", :limit => 5 + @talk_count = Talk.count + end + + unless fragment_exist?("home_intro") + @posts = Post.find :all, :order => "id DESC" + end end def feed it = [] it << Post.find(:all, :limit => 20) it << Talk.find(:all, :limit => 20) - it << Comment.find(:all, :limit => 20) + it << Comment.find(:all, :limit => 20, :include => [:talk]) it.flatten! it.sort!{|a,b| a.created_at <=> b.created_at} diff --git a/app/controllers/talks_controller.rb b/app/controllers/talks_controller.rb index 77a2e32..f3f29b9 100644 --- a/app/controllers/talks_controller.rb +++ b/app/controllers/talks_controller.rb @@ -1,5 +1,7 @@ class TalksController < ApplicationController before_filter :login_required, :except => [:show, :index] + + cache_sweeper :talk_sweeper, :only => [:create] def create @talk = Talk.new(params[:talk]) @@ -11,6 +13,7 @@ def create @talk.save! flash[:message] = "Talk adicionada :)" + redirect_to root_path rescue ActiveRecord::RecordInvalid @@ -33,12 +36,4 @@ def show def new render :layout => "textile_help" end - - def destroy - @talk = Talk.find_by_id_and_user_id(params[:id],current_user.id) - @talk.destroy - - flash[:message] = "Talk apagada :)" - redirect_to root_path - end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 98ff8cb..b70e70a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,6 +1,8 @@ class UsersController < ApplicationController before_filter :login_required, :only => [:show] + cache_sweeper :user_sweeper, :only => [:create] + # shows the signup form def new end @@ -10,7 +12,10 @@ def show end def index - @users = User.find :all, :order => "id DESC" + unless fragment_exist?("users_page") + @users = User.find :all, :order => "id DESC" + @openid_count = User.count :conditions => "identity_url is not null" + end end # receives the new user form post diff --git a/app/sweepers/comment_sweeper.rb b/app/sweepers/comment_sweeper.rb new file mode 100644 index 0000000..bd1b8c4 --- /dev/null +++ b/app/sweepers/comment_sweeper.rb @@ -0,0 +1,15 @@ +class CommentSweeper < ActionController::Caching::Sweeper + observe Comment + + def after_create(comment) + expire_page("/feed.xml") + end + + def after_destroy(comment) + expire_page("/feed.xml") + end + + def after_update(comment) + #expire_page("/feed.xml") + end +end \ No newline at end of file diff --git a/app/sweepers/post_sweeper.rb b/app/sweepers/post_sweeper.rb new file mode 100644 index 0000000..f865703 --- /dev/null +++ b/app/sweepers/post_sweeper.rb @@ -0,0 +1,18 @@ +class PostSweeper < ActionController::Caching::Sweeper + observe Post + + def after_create(post) + expire_page("/feed.xml") + expire_fragment("home_intro") + end + + def after_destroy(post) + expire_page("/feed.xml") + expire_fragment("home_intro") + end + + def after_update(post) + expire_page("/feed.xml") + expire_fragment("home_intro") + end +end \ No newline at end of file diff --git a/app/sweepers/talk_sweeper.rb b/app/sweepers/talk_sweeper.rb new file mode 100644 index 0000000..559d6d1 --- /dev/null +++ b/app/sweepers/talk_sweeper.rb @@ -0,0 +1,18 @@ +class TalkSweeper < ActionController::Caching::Sweeper + observe Talk + + def after_create(talk) + expire_page("/feed.xml") + expire_fragment("home_talks") + end + + def after_destroy(talk) + expire_page("/feed.xml") + expire_fragment("home_talks") + end + + def after_update(talk) + expire_page("/feed.xml") + expire_fragment("home_talks") + end +end \ No newline at end of file diff --git a/app/sweepers/user_sweeper.rb b/app/sweepers/user_sweeper.rb new file mode 100644 index 0000000..022ba10 --- /dev/null +++ b/app/sweepers/user_sweeper.rb @@ -0,0 +1,20 @@ +class UserSweeper < ActionController::Caching::Sweeper + observe User + + def after_create(user) + #expire_page("/index.xml") + expire_fragment("home_users") + expire_fragment("users_page") + end + + def after_destroy(user) + #expire_page("/index.xml") + expire_fragment("home_users") + expire_fragment("users_page") + end + + def after_update(talk) + #expire_page("/index.xml") + expire_fragment("home_users") + end +end \ No newline at end of file diff --git a/app/views/events/feed.xml.builder b/app/views/events/feed.xml.builder index 2c3c85b..aea7bc2 100644 --- a/app/views/events/feed.xml.builder +++ b/app/views/events/feed.xml.builder @@ -12,18 +12,18 @@ xml.rss "version" => "2.0" do when "Comment" xml.title "Comentário à sessão '#{item.talk.title}'" xml.link "http://barcamp.webreakstuff.com/talks/#{item.talk_id}" - xml.description item.body + xml.description item.body_html xml.guid "#{item.class.to_s.downcase}-#{item.id}-#{item.created_at.strftime("%d%m%Y%H%M%S")}" when "Talk" xml.title "Nova sessão proposta '#{item.title}'" xml.link "http://barcamp.webreakstuff.com/talks/#{item.id}" - xml.description item.description + xml.description item.description_html xml.guid "#{item.class.to_s.downcase}-#{item.id}-#{item.created_at.strftime("%d%m%Y%H%M%S")}" when "Post" xml.title "Novidades! - #{item.title}" xml.link "http://barcamp.webreakstuff.com/" - xml.description item.body - xml.guid "#{item.class.to_s.downcase}-#{item.id}-#{item.updated_at.strftime("%d%m%Y%H%M%S")}" + xml.description item.body_html + xml.guid "#{item.class.to_s.downcase}-#{item.id}-#{item.created_at.strftime("%d%m%Y%H%M%S")}" end xml.pubDate(item.updated_at) end diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb index 36bbdad..5f79e70 100644 --- a/app/views/events/index.html.erb +++ b/app/views/events/index.html.erb @@ -1,41 +1,47 @@ <% content_for :intro do %> -
-

O que é o Barcamp Portugal?

-

O Barcamp Portugal nasceu em 2006 e pretende ser um ponto de encontro de gente que se junta para falar nos mais variados temas que, normalmente, gravitam em torno de Inovação, Empreendorismo e Web.

-

Este ano, optámos por usar este site em vez da tradicional wiki por permitir uma gestão mais rigorosa dos inscritos (no evento e nas refeições, mais tarde) e esperemos que facilite a comunicação entre as pessoas.

- -

Novidades

- - <% for post in @posts %> -
-

<%= post.title %>, <%= post.created_at.strftime("%d/%m/%Y - %H:%M")%>

-

<%= white_list post.body_html %>

+ <% cache "home_intro" do %> +

+

O que é o Barcamp Portugal?

+

O Barcamp Portugal nasceu em 2006 e pretende ser um ponto de encontro de gente que se junta para falar nos mais variados temas que, normalmente, gravitam em torno de Inovação, Empreendorismo e Web.

+

Este ano, optámos por usar este site em vez da tradicional wiki por permitir uma gestão mais rigorosa dos inscritos (no evento e nas refeições, mais tarde) e esperemos que facilite a comunicação entre as pessoas.

+ +

Novidades

+ + <% for post in @posts %> +
+

<%= post.title %>, <%= post.created_at.strftime("%d/%m/%Y - %H:%M")%>

+

<%= white_list post.body_html %>

+

+ <% end %>
- <% end %> -
+ <% end %> <% end %> -
-

Users inscritos

- - <% if @user_count > 10 %> - Ver a lista completa - <% end %> -
-
-

Sessões propostas

-
+ <% end %> + <% cache "home_talks" do %> +
+

Sessões propostas

+ + <% if @talk_count > 4 %> + Ver a lista completa <% end %> - - <% if @talk_count > 4 %> - Ver a lista completa - <% end %> -
\ No newline at end of file +
+ <% end %> \ No newline at end of file diff --git a/app/views/includes/_textile_help.html.erb b/app/views/includes/_textile_help.html.erb index 596e9f7..15e24b0 100644 --- a/app/views/includes/_textile_help.html.erb +++ b/app/views/includes/_textile_help.html.erb @@ -10,6 +10,7 @@ A descrição permite o uso de Textile, uma linguagem de markup que pretende ser Texto +itálico+ → Text itálico Uma lista

* Um item
* Outro item → Uma lista "Link":http://google.com → Link + Código:
@<script>alert('test');</script>@ → Código:
<script>alert('test');</script>
Para uma referência mais exaustiva, <%= textile_link "clicar aqui" %>. \ No newline at end of file diff --git a/app/views/layouts/twocols.html.erb b/app/views/layouts/twocols.html.erb index cd05119..b890348 100644 --- a/app/views/layouts/twocols.html.erb +++ b/app/views/layouts/twocols.html.erb @@ -6,6 +6,7 @@ <%= stylesheet_link_tag "reset-fonts-grids", "base", "screen", :cache => true %> <%= javascript_include_tag :defaults, :cache => true %> +
diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 8c44f1f..742f7f2 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -1,7 +1,11 @@ -

Users inscritos

- \ No newline at end of file +<% cache "users_page" do %> + Até este momento, estão inscritas <%= @users.size %> pessoas, <%= @openid_count %> das quais usaram OpenID. + +

Users inscritos (<%= @users.size %>)

+ +<% end %> \ No newline at end of file diff --git a/config/environment.rb b/config/environment.rb index 05d0f82..b41b1b6 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -33,6 +33,7 @@ # Add additional load paths for your own custom dirs # config.load_paths += %W( #{RAILS_ROOT}/extras ) + config.load_paths += %W( #{RAILS_ROOT}/app/sweepers ) # Force all environments to use the same logger level # (by default production uses :info, the others :debug) @@ -63,5 +64,5 @@ # config.active_record.schema_format = :sql # Activate observers that should always be running - config.active_record.observers = :user_observer + config.active_record.observers = [:user_observer] end diff --git a/db/migrate/20080705213159_populate_body_html.rb b/db/migrate/20080705213159_populate_body_html.rb new file mode 100644 index 0000000..55d90f8 --- /dev/null +++ b/db/migrate/20080705213159_populate_body_html.rb @@ -0,0 +1,18 @@ +class PopulateBodyHtml < ActiveRecord::Migration + def self.up + for c in Comment.find(:all) + c.save! + end + + for p in Post.find(:all) + p.save! + end + + for t in Talk.find(:all) + t.save! + end + end + + def self.down + end +end diff --git a/db/schema.rb b/db/schema.rb index 455bf3b..a4edf7c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -9,7 +9,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20080705180543) do +ActiveRecord::Schema.define(:version => 20080705213159) do create_table "admins", :force => true do |t| t.string "username" diff --git a/test/unit/post_observer_test.rb b/test/unit/post_observer_test.rb new file mode 100644 index 0000000..fe0af7b --- /dev/null +++ b/test/unit/post_observer_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class PostObserverTest < Test::Unit::TestCase + # Replace this with your real tests. + def test_truth + assert true + end +end diff --git a/test/unit/talk_observer_test.rb b/test/unit/talk_observer_test.rb new file mode 100644 index 0000000..80607b9 --- /dev/null +++ b/test/unit/talk_observer_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class TalkObserverTest < Test::Unit::TestCase + # Replace this with your real tests. + def test_truth + assert true + end +end