You are viewing a plain text version of this content. The canonical link for it is here.
Posted to olio-dev@incubator.apache.org by Shanti Subramanyam <Sh...@Sun.COM> on 2009/06/05 16:48:19 UTC

Re: svn commit: r781829 [1/5] - in /incubator/olio/webapp/rails/trunk: app/controllers/ app/helpers/ app/sweepers/ app/views/comments/ app/views/events/ app/views/layouts/ config/ config/environments/ lib/ public/ public/javascripts/ script/

Thanks Amanda. A couple more items to finish this off properly :
a) Delete the caching branch. We don't want people to get confused by 
it's existence.
b) Update the JIRA's and mark them resolved.
c) We need some kind of documentation to tell how to use the caching 
options. File a new JIRA and would appreciate it if you could update the 
docs too.

Now that the trunk has been updated, I can finally get down to fixing a 
couple of other minor issues.

Shanti

tekgrrl@apache.org wrote:
> Author: tekgrrl
> Date: Thu Jun  4 19:03:57 2009
> New Revision: 781829
>
> URL: http://svn.apache.org/viewvc?rev=781829&view=rev
> Log:
> OLIO-59 and OLIO-99 resolved. Merged caching branch and updated to Rails 2.3.2
>
> Added:
>     incubator/olio/webapp/rails/trunk/app/controllers/application_controller.rb
>     incubator/olio/webapp/rails/trunk/app/sweepers/
>     incubator/olio/webapp/rails/trunk/app/sweepers/event_sweeper.rb
>     incubator/olio/webapp/rails/trunk/config/environments/development_file_cached.rb
>     incubator/olio/webapp/rails/trunk/config/environments/development_mem_cached.rb
>     incubator/olio/webapp/rails/trunk/config/environments/development_nocache.rb
>     incubator/olio/webapp/rails/trunk/lib/lazy.rb
>     incubator/olio/webapp/rails/trunk/script/dbconsole   (with props)
> Modified:
>     incubator/olio/webapp/rails/trunk/app/controllers/application.rb
>     incubator/olio/webapp/rails/trunk/app/controllers/comments_controller.rb
>     incubator/olio/webapp/rails/trunk/app/controllers/events_controller.rb
>     incubator/olio/webapp/rails/trunk/app/controllers/friends_controller.rb
>     incubator/olio/webapp/rails/trunk/app/controllers/users_controller.rb
>     incubator/olio/webapp/rails/trunk/app/helpers/application_helper.rb
>     incubator/olio/webapp/rails/trunk/app/helpers/events_helper.rb
>     incubator/olio/webapp/rails/trunk/app/views/comments/_list.html.erb
>     incubator/olio/webapp/rails/trunk/app/views/events/_calendar.html.erb
>     incubator/olio/webapp/rails/trunk/app/views/events/_event_list.html.erb
>     incubator/olio/webapp/rails/trunk/app/views/events/_filtered_events.html.erb
>     incubator/olio/webapp/rails/trunk/app/views/events/_map.html.erb
>     incubator/olio/webapp/rails/trunk/app/views/events/show.html.erb
>     incubator/olio/webapp/rails/trunk/app/views/layouts/site.rhtml
>     incubator/olio/webapp/rails/trunk/config/boot.rb
>     incubator/olio/webapp/rails/trunk/config/environment.rb
>     incubator/olio/webapp/rails/trunk/config/environments/development.rb
>     incubator/olio/webapp/rails/trunk/config/environments/production.rb
>     incubator/olio/webapp/rails/trunk/config/routes.rb
>     incubator/olio/webapp/rails/trunk/public/dispatch.fcgi
>     incubator/olio/webapp/rails/trunk/public/javascripts/controls.js
>     incubator/olio/webapp/rails/trunk/public/javascripts/dragdrop.js
>     incubator/olio/webapp/rails/trunk/public/javascripts/effects.js
>     incubator/olio/webapp/rails/trunk/public/javascripts/prototype.js
>
> Modified: incubator/olio/webapp/rails/trunk/app/controllers/application.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/controllers/application.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/controllers/application.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/controllers/application.rb Thu Jun  4 19:03:57 2009
> @@ -19,8 +19,6 @@
>  # Likewise, all the methods added will be available for all controllers.
>  
>  class ApplicationController < ActionController::Base
> -  # Pick a unique cookie name to distinguish our session data from others'
> -  session :session_key => '_perf_session_id'
>    
>    def authorize
>      begin
>
> Added: incubator/olio/webapp/rails/trunk/app/controllers/application_controller.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/controllers/application_controller.rb?rev=781829&view=auto
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/controllers/application_controller.rb (added)
> +++ incubator/olio/webapp/rails/trunk/app/controllers/application_controller.rb Thu Jun  4 19:03:57 2009
> @@ -0,0 +1,69 @@
> +#
> +#  Licensed to the Apache Software Foundation (ASF) under one
> +# or more contributor license agreements.  See the NOTICE file
> +# distributed with this work for additional information
> +# regarding copyright ownership.  The ASF licenses this file
> +# to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance
> +# with the License.  You may obtain a copy of the License at
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +#
> +# Filters added to this controller apply to all controllers in the application.
> +# Likewise, all the methods added will be available for all controllers.
> +
> +class ApplicationController < ActionController::Base
> +  
> +  def authorize
> +    begin
> +      @user = User.find(session[:user_id])
> +    rescue
> +      @user = nil
> +    end
> +    
> +    unless @user
> +      session[:original_uri] = request.request_uri
> +      flash[:error] = "You must log in before accessing that page."      
> +      redirect_to(root_path)
> +    end
> +  end
> +  
> +  def logged_in_as(user = nil)
> +    logged_in_as_user_id = false
> +    if !user.nil?
> +      if user.id == session[:user_id]
> +        logged_in_as_user_id = true
> +      end
> +    end
> +    user = nil
> +    logged_in_as_user_id
> +  end
> +  
> +  def generate_friend_cloud(all_friends)
> +    friends = all_friends.clone
> +    @friendcloud = []
> +    6.times do
> +      random_friend = rand(friends.size)
> +      @friendcloud << friends[random_friend] unless friends.empty?
> +      friends.delete_at(random_friend)
> +    end    
> +  end
> +    
> +  def validate_event
> +    begin
> +      @event = Event.find(params[:event_id])
> +    rescue ActiveRecord::RecordNotFound
> +      respond_to do |format|
> +        flash[:error] = "Event does not exist."
> +        format.html { redirect_to root_path }
> +      end
> +    end
> +  end
> +  
> +end
>
> Modified: incubator/olio/webapp/rails/trunk/app/controllers/comments_controller.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/controllers/comments_controller.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/controllers/comments_controller.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/controllers/comments_controller.rb Thu Jun  4 19:03:57 2009
> @@ -21,6 +21,8 @@
>    before_filter :validate_event
>    layout "site"
>    
> +  after_filter :expire_comment, :only => [:create, :destroy, :update]
> +
>    # GET /events/1/comments
>    def index
>      @comments = Comment.find_all_by_event_id(params[:event_id])
> @@ -168,4 +170,8 @@
>      end
>    end
>    
> +  def expire_comment
> +    expire_fragment(:controller => "events", :action => "show", :id => @comment.event_id, :part => "event_comments")
> +  end
> +
>  end
>
> Modified: incubator/olio/webapp/rails/trunk/app/controllers/events_controller.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/controllers/events_controller.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/controllers/events_controller.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/controllers/events_controller.rb Thu Jun  4 19:03:57 2009
> @@ -26,49 +26,51 @@
>  
>    MAX_ATTENDEES = 20
>    
> -  # caches_page :index
> +  if CACHED
> +    after_filter :expire_home, :only => :index
> +    after_filter :expire_calendar, :only => :update_calendar
> +    after_filter :expire_tag, :only => :tag
> +
> +    # caches_page :index, {:expire => 2.minutes.to_i}
> +    cache_sweeper :event_sweeper, :only => [:create, :destroy, :update]
> +  end
>      
>    ### CRUD Actions ######################################################## 
>    
>    # GET /events
>    # GET /events.xml
> -  def index
> -    unless params[:month].nil? and params[:day].nil? and params[:year].nil?
> -      date = Date.parse("#{params[:month]}/#{params[:day]}/#{params[:year]}")
> -    end
> -    @zipcode = params[:zipcode] ? params[:zipcode] : session[:zipcode] # Update zipcode filter if changed by the user
> -    session[:zipcode] = @zipcode # Store the new zipcode filter in the user's session
> -    
> -    @date = Date.parse(date.to_s) unless date.nil?  
> -    session[:date] = @date
> -    
> -    conditions = @date ? "event_date = '#{@date}'" : "event_date >= '#{Date.today}'"
> -
> -    session[:order] = params[:order] || session[:order] || 'event_date'
> -      
> -    @events = Event.paginate :page => params[:page], :conditions => conditions, :order => session[:order], :per_page => 10
> -    if @zipcode and !@zipcode.empty?
> -      @events.delete_if { |e| e.address.zip != @zipcode }
> -    end
> -      
> -    @tags = Event.top_n_tags(50)
> -
> -    respond_to do |format|
> -      format.html # index.html.erb
> -      format.js # index.js.rjs
> -      format.xml  { render :xml => @events }
> +  def home
> +    if CACHED and !session[:user_id].nil?
> +      do_index_page
> +      respond_to do |format|
> +        format.html { render :template => "events/index.html.erb" } # index.html.erb
> +        format.js { render :template => "events/index.js.rjs", :layout => false } # index.js.rjs
> +        format.xml  { render :xml => @events }
> +      end
> +    else
> +      redirect_to(root_path)
>      end
>    end
>    
> +  # "home" = root page for those not logged in
> +  def index
> +    if !CACHED or session[:user_id].nil?
> +      do_index_page
> +      respond_to do |format|
> +        format.html # index.html.erb
> +        format.js  # index.js.rjs
> +        format.xml { render :xml => @events }
> +      end
> +    else
> +      redirect_to(home_path)
> +    end
> +  end
> +
>    # GET /events/1
>    # GET /events/1.xml  
>    def show
> -    @event = Event.find(params[:id], :include => [:image, :document, {:comments => :user }, :address])
> -    @address = @event.address
> -    @attendees = attendee_list(@event, MAX_ATTENDEES)
> -    @image = @event.image
> -    @document = @event.document
> -    @comments = @event.comments
> +    @event = lazy { Event.find(params[:id], :include => [:image, :document, {:comments => :user }, :address]) }
> +    @attendees = lazy { attendee_list(@event, MAX_ATTENDEES) }
>      @comment = Comment.new
>      @comment.rating = 0
>      respond_to do |format|
> @@ -154,14 +156,13 @@
>          @event.attributes = params[:event]
>          @event.set_date
>          @address.attributes = params[:address]
> -        @geolocation = Geolocation.new(@address.street1, @address.city, @address.state, @address.zip)
> -        @address.longitude = @geolocation.longitude
> -        @address.latitude = @geolocation.latitude
>          @address.save!
>          
>          @event.image = Image.make_from_upload(params[:event_image], @event.id) if new_image?
>          @event.document = Document.make_from_upload(params[:event_document], @event.id) if new_document?
> -        
> +        @geolocation = Geolocation.new(@address.street1, @address.city, @address.state, @address.zip)
> +        @address.longitude = @geolocation.longitude
> +        @address.latitude = @geolocation.latitude
>          @event.save! # must come after all other updates
>          
>          set_tags(@event)
> @@ -178,7 +179,6 @@
>          format.xml  { render :xml => @event.errors, :status => :unprocessable_entity }
>        end
>      end
> -    
>    end
>    
>    # DELETE /events/1
> @@ -250,6 +250,7 @@
>            flash[:error] = "You are already attending #{@event.title}"
>          else
>            @event.new_attendee(user)
> +          expire_attendees
>            flash[:notice] = "You are attending #{@event.title}"
>          end
>          session[:upcoming] = user.upcoming_events.map { |e| e.id }
> @@ -272,6 +273,7 @@
>            flash[:error] = "You are not attending #{@event.title}"
>          else
>            @event.remove_attendee(user) 
> +          expire_attendees
>            flash[:notice] = "You are no longer attending #{@event.title}"
>          end
>          session[:upcoming] = user.upcoming_events.map { |e| e.id }
> @@ -304,6 +306,7 @@
>    
>    # GET /events/update_calendar (AJAX)
>    def update_calendar
> +    expire_fragment(:controller => "events", :part => "default_calendar")
>      respond_to do |format|
>        format.html { redirect_to(root_path) } 
>        format.js
> @@ -313,6 +316,29 @@
>    
>    private #################################################################################### 
>    
> +  def do_index_page
> +    unless params[:month].nil? and params[:day].nil? and params[:year].nil?
> +      date = Date.parse("#{params[:month]}/#{params[:day]}/#{params[:year]}")
> +    end
> +
> +    @zipcode = params[:zipcode] ? params[:zipcode] : session[:zipcode] # Update zipcode filter if changed by the user
> +    session[:zipcode] = @zipcode # Store the new zipcode filter in the user's session
> +  
> +    @date = Date.parse(date.to_s) unless date.nil?
> +    session[:date] = @date
> +  
> +    conditions = @date ? "event_date = '#{@date}'" : "event_date >= '#{Date.today}'"
> +
> +    session[:order] = params[:order] || session[:order] || 'event_date'
> +
> +    @events = lazy { Event.paginate :page => params[:page], :conditions => conditions, :order => session[:order], :per_page => 10,  :include => [:address, :image] }
> +    if @zipcode and !@zipcode.empty?
> +      @events.delete_if { |e| e.address.zip != @zipcode }
> +    end
> +
> +    @tags = lazy { Event.top_n_tags(50) }
> +  end
> +
>    def check_creator(event_user_id, action)
>      if event_user_id != session[:user_id]
>        flash[:error] = "You can only #{action} events you created"
> @@ -345,4 +371,26 @@
>      users
>    end
>    
> +  # CACHING - methods to expire fragments
> +
> +  def expire_home
> +    expire_page(root_path)
> +  end
> +
> +  def expire_calendar
> +    expire_fragment(:controller => "events", :part => "default_calendar")
> +  end
> +
> +  def expire_tag
> +    unless session.nil?
> +      expire_fragment(:controller => 'events', :action => 'index', :part => 'tag_cloud')
> +    end
> +    expire_page(root_path)
> +  end
> +
> +  def expire_attendees
> +    expire_fragment(:controller => "events", :action => "show", :id => @event.id, :part => "event_attendees")
> +    expire_fragment(:controller => "events", :action => "show", :id => @event.id, :part => "event_attendees", :login => true)
> +  end
> +
>  end
>
> Modified: incubator/olio/webapp/rails/trunk/app/controllers/friends_controller.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/controllers/friends_controller.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/controllers/friends_controller.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/controllers/friends_controller.rb Thu Jun  4 19:03:57 2009
> @@ -49,6 +49,7 @@
>      respond_to do |format|
>        if flash[:error].blank?
>          flash[:notice] = "Friendship requested"
> +        expire_fragment ("events/friend_requests/#{@target.id}")
>          format.html { redirect_to(search_users_path) }
>          format.js { render :layout => false }
>        else
> @@ -72,6 +73,7 @@
>          decrement_friendship_requests
>          generate_friend_cloud @user.friends
>          flash[:notice] = 'Friendship approved.'
> +        expire_fragment ("events/friend_requests/#{@target.id}")
>        else
>          flash[:error] = 'Friendship could not be approved.'
>        end
> @@ -118,6 +120,7 @@
>        
>        if @user.unfriend(@target)
>          flash[:notice] = confirmation_msg
> +        expire_fragment ("events/friend_requests/#{@target.id}")
>          decrement_friendship_requests if @friend_action =~ /^reject/i
>          generate_friend_cloud @user.friends if @friend_action =~ /^remove/i
>        else
>
> Modified: incubator/olio/webapp/rails/trunk/app/controllers/users_controller.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/controllers/users_controller.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/controllers/users_controller.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/controllers/users_controller.rb Thu Jun  4 19:03:57 2009
> @@ -19,7 +19,7 @@
>    
>    before_filter :authorize, :except => [ :new, :create, :login, :check_name, :show ]
>    layout "site"
> -    
> +
>    # GET /users
>    # GET /users.xml
>    def index
> @@ -176,7 +176,11 @@
>          session[:original_uri] = nil
>          
>          flash[:notice] = "Successfully logged in!"
> -        redirect_to(uri || events_path)
> +        if CACHED
> +          redirect_to(uri || home_path)
> +        else
> +          redirect_to(uri || events_path)
> +        end
>        else
>          user = nil
>          params[:email] = nil
>
> Modified: incubator/olio/webapp/rails/trunk/app/helpers/application_helper.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/helpers/application_helper.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/helpers/application_helper.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/helpers/application_helper.rb Thu Jun  4 19:03:57 2009
> @@ -82,7 +82,7 @@
>    #depends on calling controller having a tagged action, defaults to events_controller
>    def tag_cloud_items(tags, target_controller = 'events')
>      links = []
> -    tag_cloud_font_sizes tags do |name, font_size|
> +    tag_cloud_font_sizes(tags) do |name, font_size|
>        link = link_to name, {:controller => target_controller, :action => 'tagged', :tag => name}, {:style => font_size}
>        links << link
>      end
>
> Modified: incubator/olio/webapp/rails/trunk/app/helpers/events_helper.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/helpers/events_helper.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/helpers/events_helper.rb (original)
> +++ incubator/olio/webapp/rails/trunk/app/helpers/events_helper.rb Thu Jun  4 19:03:57 2009
> @@ -22,11 +22,11 @@
>      if logged_in?
>        attending = @attendees.find { |u| u.id == session[:user_id] }
>        if attending
> -        links += form_remote_tag :url => unattend_event_path(event), :method => :post, :html => {:method => :post}
> +        links += form_remote_tag :url => unattend_event_path(event.id), :method => :post, :html => {:method => :post}
>          links += submit_tag "Unattend"
>          links += "</form>"
>        else
> -        links += form_remote_tag :url => attend_event_path(event), :method => :post, :html => {:method => :post}
> +        links += form_remote_tag :url => attend_event_path(event.id), :method => :post, :html => {:method => :post}
>          links += submit_tag "Attend"
>          links += "</form>"
>        end
> @@ -65,4 +65,13 @@
>      text_field_tag 'zipcode', "#{zip}"
>    end
>    
> +  def my_event?(event_id)
> +    event = Event.find_by_id(event_id)
> +    if !session[:user_id].nil? && event.user_id == session[:user_id]
> +      return true;
> +    else
> +      return false;
> +    end
> +  end
> +
>  end
>
> Added: incubator/olio/webapp/rails/trunk/app/sweepers/event_sweeper.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/sweepers/event_sweeper.rb?rev=781829&view=auto
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/sweepers/event_sweeper.rb (added)
> +++ incubator/olio/webapp/rails/trunk/app/sweepers/event_sweeper.rb Thu Jun  4 19:03:57 2009
> @@ -0,0 +1,33 @@
> +class EventSweeper < ActionController::Caching::Sweeper
> +
> +  observe Event, Comment
> +  
> +  def after_create(record)
> +    expire_record(record)
> +  end
> +
> +  def after_save(record)
> +    expire_record(record)
> +  end
> +
> +  def after_destroy(record)
> +    expire_record(record)
> +  end
> +  
> +  private ############################################
> +
> +  def expire_record(record)
> +    unless session.nil?
> +      expire_fragment(:controller => 'events', :action => 'index', :part => 'tag_cloud')
> +    end
> +    
> +    expire_fragment(:controller => "events", :action => "show", :id => record.id, :part => "event_description")
> +    
> +    expire_fragment(:controller => "events", :action => "show", :id => record.id, :part => "main_event_details")
> +    expire_fragment(:controller => "events", :action => "show", :id => record.id, :part => "main_event_details", :creator => true)
> +    
> +    expire_page(root_path)
> +  end
> +
> +end
> +
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/comments/_list.html.erb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/comments/_list.html.erb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/comments/_list.html.erb (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/comments/_list.html.erb Thu Jun  4 19:03:57 2009
> @@ -18,6 +18,8 @@
>  -->
>  <h2 class="event_detail_heading">Comments</h2>
>  
> +<% cache({:controller => "events", :action => "show", :id => params[:id], :part => "event_comments"}, {:expire => 30.seconds.to_i}) do -%>
> +
>  <% if @comments.nil? or @comments.empty? -%>
>    <span class="subliminal">There are no comments for this event.</span>
>  <% else -%>
> @@ -25,3 +27,5 @@
>      <%= render :partial => 'comments/comment', :collection => @comments %>
>    </ol>
>  <% end -%>
> +
> +<% end -%>
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/events/_calendar.html.erb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/events/_calendar.html.erb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/events/_calendar.html.erb (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/events/_calendar.html.erb Thu Jun  4 19:03:57 2009
> @@ -16,18 +16,20 @@
>   * limitations under the License.
>   * 
>  -->
> -<div id="calendar">
> -  <%
> -    year = (params[:year]) ? params[:year].to_i : Time.now.year
> -    month = (params[:month]) ? params[:month].to_i : Time.now.month
> -  -%>
> -  <%= 
> -    calendar(:year => year, :month => month, :abbrev => (0..0)) do |d| 
> -      link_to_remote d.mday, { 
> -          :url => events_path, :method => :get, 
> -          :with => "'month=#{d.mon}&day=#{d.mday}&year=#{d.year}'"
> -        }, 
> -        :href => events_path(:month => d.mon, :day => d.mday, :year => d.year)
> -    end
> -  %>
> -</div>
> +<% cache(:controller => "events", :part => "default_calendar") do -%>
> +  <div id="calendar">
> +    <%
> +      year = (params[:year]) ? params[:year].to_i : Time.now.year
> +      month = (params[:month]) ? params[:month].to_i : Time.now.month
> +    -%>
> +    <%= 
> +      calendar(:year => year, :month => month, :abbrev => (0..0)) do |d| 
> +        link_to_remote d.mday, { 
> +            :url => events_path, :method => :get, 
> +            :with => "'month=#{d.mon}&day=#{d.mday}&year=#{d.year}'"
> +          }, 
> +          :href => events_path(:month => d.mon, :day => d.mday, :year => d.year)
> +      end
> +    %>
> +  </div>
> +<% end -%>
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/events/_event_list.html.erb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/events/_event_list.html.erb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/events/_event_list.html.erb (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/events/_event_list.html.erb Thu Jun  4 19:03:57 2009
> @@ -33,15 +33,13 @@
>          <%= zipcode_filter(@zipcode) %>
>          <br />
>          
> -        <% unless @events.empty? -%>
>            <% unless @date -%>
>  						Sort: 
> -           	<%= created_at_radio_button %>
> -            Created Date
> +         	<%= created_at_radio_button %>
> +          Created Date
>              
> -            <%= event_date_radio_button %>
> -            Event Date
> -          <% end -%>
> +          <%= event_date_radio_button %>
> +          Event Date
>          <% end -%>
>          <% if @date -%>
>            <input type="hidden" name="month" value="<%= month %>" />
> @@ -75,8 +73,10 @@
>  <div id="tag_cloud">
>    <h2 class="tight_heading">Tag Cloud</h2>
>    <div>
> +  <% cache(:action => 'index', :part => 'tag_cloud') do -%>
>      <% tag_cloud_items(@tags).each do |link| -%>
>      	<%= link %>
>      <% end -%>
> +  <% end -%>
>    </div>
>  </div>
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/events/_filtered_events.html.erb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/events/_filtered_events.html.erb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/events/_filtered_events.html.erb (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/events/_filtered_events.html.erb Thu Jun  4 19:03:57 2009
> @@ -16,35 +16,37 @@
>   * limitations under the License.
>   * 
>  -->
> -<div id="event_table">
> -  <% if @events.empty? -%>
> -    No events.
> -  <% else -%>
> -    <ol id="event_list" style="list-style-type: none;">
> -    <% @events.each do |event| -%>
> -      <% which_class = cycle('even_event', 'odd_event') -%>
> -      <li id="event_<%= event.id %>_details" class="event_item <%= which_class %>" style="padding: 7px;" onmouseover="Element.findChildren(this, 'extra_details', true, 'div').first().show();" onmouseout="Element.findChildren(this, 'extra_details', true, 'div').first().hide();">
> -        <div class="thumbnail_for_list">
> -          <%= thumbnail(get_image(event), event_path(event), :small) %>
> -        </div>
> -        <div class="event_details_for_list">
> -          <h2 class="tight_heading"><%= link_to h(event.title), event %></h2>
> -          <%= simple_date(event.event_timestamp) %>
> +<% cache({:controller => "events", :action => "index", :part => "index_event_list"}, {:expire => 30.seconds.to_i}) do -%>
> +  <div id="event_table">
> +    <% if @events.empty? -%>
> +      No events.
> +    <% else -%>
> +      <ol id="event_list" style="list-style-type: none;">
> +      <% @events.each do |event| -%>
> +        <% which_class = cycle('even_event', 'odd_event') -%>
> +        <li id="event_<%= event.id %>_details" class="event_item <%= which_class %>" style="padding: 7px;" onmouseover="Element.findChildren(this, 'extra_details', true, 'div').first().show();" onmouseout="Element.findChildren(this, 'extra_details', true, 'div').first().hide();">
> +          <div class="thumbnail_for_list">
> +            <%= thumbnail(get_image(event), event_path(event), :small) %>
> +          </div>
> +          <div class="event_details_for_list">
> +            <h2 class="tight_heading"><%= link_to h(event.title), event %></h2>
> +            <%= simple_date(event.event_timestamp) %>
>            
> -          <div class="extra_details" style="display: none;">
> -            <%= edit_delete_links(event) if logged_in? %>
> -            <br />
> -            Created: <%= output_date(event.created_at) %> <br/><br/>
> -            <%=white_list event.summary %>
> +            <div class="extra_details" style="display: none;">
> +              <%= edit_delete_links(event) if logged_in? %>
> +              <br />
> +              Created: <%= output_date(event.created_at) %> <br/><br/>
> +              <%=white_list event.summary %>
> +            </div>
>            </div>
> -        </div>
> -        <div class="clr"></div>
> -      </li>
> -      <% if which_class == 'odd_event' -%>
> -        <li class="clr"></li>
> +          <div class="clr"></div>
> +        </li>
> +        <% if which_class == 'odd_event' -%>
> +          <li class="clr"></li>
> +        <% end -%>
>        <% end -%>
> +      </ol>
>      <% end -%>
> -    </ol>
> -  <% end -%>
> -  <%= will_paginate @events if @events.respond_to? :page_count %>  
> -</div>
> +    <%= will_paginate @events if @events.respond_to? :page_count %>  
> +  </div>
> +<% end -%>
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/events/_map.html.erb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/events/_map.html.erb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/events/_map.html.erb (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/events/_map.html.erb Thu Jun  4 19:03:57 2009
> @@ -30,7 +30,7 @@
>  	// Set map type to either of: YAHOO_MAP_SAT, YAHOO_MAP_HYB, YAHOO_MAP_REG
>  	map.setMapType(YAHOO_MAP_REG);
>  	// Display the map centered on a geocoded location
> -	map.drawZoomAndCenter("<%= "#{@address.street1} #{@address.street2} #{@address.city} #{@address.state} #{@address.zip} #{@address.country}" %>", 4);
> +	map.drawZoomAndCenter("<%= "#{@event.address.street1} #{@event.address.street2} #{@event.address.city} #{@event.address.state} #{@event.address.zip} #{@event.address.country}" %>", 4);
>  </script>
>  <script type="text/javascript">
>  	map.addOverlay(new YMarker(map.getCenterLatLon()));
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/events/show.html.erb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/events/show.html.erb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/events/show.html.erb (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/events/show.html.erb Thu Jun  4 19:03:57 2009
> @@ -17,38 +17,43 @@
>   * 
>  -->
>  <div id="event_header">
> -  <div id="event_thumbnail"><%= thumbnail(@image) %></div>
> -
> -  <div id="main_event_details">
> -    <h1 class="inline"><%=h @event.title %></h1> <%= edit_delete_links(@event) %>
> -    <hr />
> -    <%= output_date(@event.event_timestamp) %><br />
> -    <br />
> -  	<% unless @document.nil? -%>
> -  		<%= link_to 'Event Literature', @document.public_filename %>
> -  	<% end -%>
> +  <% cache({:controller => "events", :action => "show", :id => params[:id], :part => "main_event_details", :creator => (session[:user_id])}, {:expire => 30.seconds.to_i}) do -%>
> +  end
> +    <div id="event_thumbnail"><%= thumbnail(@event.image) %></div>
> +    <div id="main_event_details">
> +      <h1 class="inline"><%=h @event.title %></h1> <%= edit_delete_links(@event) %>
> +      <hr />
> +      <%= output_date(@event.event_timestamp) %><br />
> +      <br />
> +    	<% unless @event.document.nil? -%>
> +  		<%= link_to 'Event Literature', @event.document.public_filename %>
> +    	<% end -%>
>  	
>    	<br />
> -    <div id="event_address">
> -      <%=h @address.street1 %><br />
> -      <% unless @address.street2.nil? or @address.street2.empty? -%>
> -        <%=h @address.street2 %><br />
> -      <% end -%>
> -      <%=h @address.city %>, <%=h @address.state %> <%=h @address.zip %><br />
> -      <%=h @address.country %>
> +      <div id="event_address">
> +        <%=h @event.address.street1 %><br />
> +        <% unless @event.address.street2.nil? or @event.address.street2.empty? -%>
> +          <%=h @event.address.street2 %><br />
> +        <% end -%>
> +        <%=h @event.address.city %>, <%=h @event.address.state %> <%=h @event.address.zip %><br />
> +        <%=h @event.address.country %>
> +      </div>
> +      Contact: <span id="event_contact"><%=h @event.telephone %></span><br />
>      </div>
> -    Contact: <span id="event_contact"><%=h @event.telephone %></span><br />
> -  </div>
> +  <% end -%>
>    <div class="clr"></div>
>  </div>
>  
> -<div id="event_attendees">
> -  <%= render :partial => 'attendees' %>
> -</div>
> +<% cache({:controller => "events", :action => "show", :id => params[:id], :part => "event_attendees", :login => !session[:user_id].nil?}, {:expire => 30.seconds.to_i}) do -%>
> +  <div id="event_attendees">
> +    <%= render :partial => 'attendees' %>
> +  </div>
> +<% end -%>
>  
> +<% cache({:controller => "events", :action => "show", :id => params[:id], :part => "event_description"}, {:expire => 30.seconds.to_i}) do -%>
>  <div id="event_description">
> -	<p><strong>Summary</strong></p>
> -	<p><%= @event.summary %></p>
> +  	<p><strong>Summary</strong></p>
> +  	<p><%= @event.summary %></p>
>  	<p><strong>Description</strong></p>
>    <p><%= @event.description %></p>
>  </div>
> @@ -66,6 +71,7 @@
>    </div>
>    <div class="clr"></div>
>  </div>
> +<% end -%>
>  
>  <div id="event_comments">
>    <%= render :partial => 'comments/list' %>
>
> Modified: incubator/olio/webapp/rails/trunk/app/views/layouts/site.rhtml
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/app/views/layouts/site.rhtml?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/app/views/layouts/site.rhtml (original)
> +++ incubator/olio/webapp/rails/trunk/app/views/layouts/site.rhtml Thu Jun  4 19:03:57 2009
> @@ -41,12 +41,13 @@
>        <% end -%>
>      
>        <ul id="main_nav">
> -        <li><%= link_to 'Home', events_path %></li>
>        <% if logged_in? -%>
> +        <li><%= link_to 'Home', home_path %></li>
>          <li><%= link_to 'Add Event', new_event_path %></li>
>          <li><%= link_to 'Users', search_users_path %></li>
>          <li><%= link_to 'Edit Profile', edit_user_path(session[:user_id]) %></li>
>        <% else -%>
> +        <li><%= link_to 'Home', events_path %></li>
>          <li><%= link_to 'Register', new_user_path %></li>
>        <% end -%>
>        </ul>
>
> Modified: incubator/olio/webapp/rails/trunk/config/boot.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/boot.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/boot.rb (original)
> +++ incubator/olio/webapp/rails/trunk/config/boot.rb Thu Jun  4 19:03:57 2009
> @@ -41,9 +41,8 @@
>        File.exist?("#{RAILS_ROOT}/vendor/rails")
>      end
>  
> -    # FIXME : Ruby 1.9
>      def preinitialize
> -      load(preinitializer_path) if File.exists?(preinitializer_path)
> +      load(preinitializer_path) if File.exist?(preinitializer_path)
>      end
>  
>      def preinitializer_path
> @@ -61,6 +60,8 @@
>    class VendorBoot < Boot
>      def load_initializer
>        require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
> +      Rails::Initializer.run(:install_gem_spec_stubs)
> +      Rails::GemDependency.add_frozen_gem_path
>      end
>    end
>  
> @@ -84,7 +85,7 @@
>  
>      class << self
>        def rubygems_version
> -        Gem::RubyGemsVersion if defined? Gem::RubyGemsVersion
> +        Gem::RubyGemsVersion rescue nil
>        end
>  
>        def gem_version
> @@ -99,15 +100,14 @@
>  
>        def load_rubygems
>          require 'rubygems'
> -
> -        gem_ver = defined? Gem::RubyGemsVersion ? Gem::RubyGemsVersion : rubygems_version
> -        unless gem_ver >= '0.9.4'
> -          $stderr.puts %(Rails requires RubyGems >= 0.9.4 (you have #{rubygems_version}). Please `gem update --system` and try again.)
> +        min_version = '1.3.1'
> +        unless rubygems_version >= min_version
> +          $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
>            exit 1
>          end
>  
>        rescue LoadError
> -        $stderr.puts %(Rails requires RubyGems >= 0.9.4. Please install RubyGems and try again: http://rubygems.rubyforge.org)
> +        $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
>          exit 1
>        end
>  
>
> Modified: incubator/olio/webapp/rails/trunk/config/environment.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/environment.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/environment.rb (original)
> +++ incubator/olio/webapp/rails/trunk/config/environment.rb Thu Jun  4 19:03:57 2009
> @@ -22,12 +22,16 @@
>  ENV['RAILS_ENV'] ||= 'production'
>  
>  # Specifies gem version of Rails to use when vendor/rails is not present
> -# RAILS_GEM_VERSION = '2.1.2' unless defined? RAILS_GEM_VERSION
> +# RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION
>  
>  # Bootstrap the Rails environment, frameworks, and default configuration
>  require File.join(File.dirname(__FILE__), 'boot')
>  require 'hodel_3000_compliant_logger'
>  
> +CACHED = false
> +MEMCACHED = false
> +CACHE_SERVER = 'localhost'
> +
>  IMAGE_STORE_PATH = 'public/uploaded_files'
>  DOCUMENT_STORE_PATH = 'public/uploaded_files'
>  
> @@ -42,6 +46,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)
> @@ -87,8 +92,8 @@
>  # Include your application configuration below
>  require 'uploadable'
>  require 'will_paginate'
> +require 'lazy'
>  #require RAILS_ROOT + '/test/selenium_helper' if defined? SeleniumOnRails::FixtureLoader
>  
>  require 'geolocation'
>  Geolocation.url = 'http://localhost:8080/geocoder/geocode?appid=gsd5f'
> -
>
> Modified: incubator/olio/webapp/rails/trunk/config/environments/development.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/environments/development.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/environments/development.rb (original)
> +++ incubator/olio/webapp/rails/trunk/config/environments/development.rb Thu Jun  4 19:03:57 2009
> @@ -28,7 +28,6 @@
>  # Show full error reports and disable caching
>  config.action_controller.consider_all_requests_local = true
>  config.action_controller.perform_caching             = false
> -# config.action_view.cache_template_extensions         = false
>  config.action_view.debug_rjs                         = true
>  
>  # Don't care if the mailer can't send
>
> Added: incubator/olio/webapp/rails/trunk/config/environments/development_file_cached.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/environments/development_file_cached.rb?rev=781829&view=auto
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/environments/development_file_cached.rb (added)
> +++ incubator/olio/webapp/rails/trunk/config/environments/development_file_cached.rb Thu Jun  4 19:03:57 2009
> @@ -0,0 +1,36 @@
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one
> +# or more contributor license agreements.  See the NOTICE file
> +# distributed with this work for additional information
> +# regarding copyright ownership.  The ASF licenses this file
> +# to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance
> +# with the License.  You may obtain a copy of the License at
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +# 
> +# Settings specified here will take precedence over those in config/environment.rb
> +
> +# In the development environment your application's code is reloaded on
> +# every request.  This slows down response time but is perfect for development
> +# since you don't have to restart the webserver when you make code changes.
> +config.cache_classes = true
> +
> +# Log error messages when you accidentally call methods on nil.
> +config.whiny_nils = true
> +
> +# Show full error reports and disable caching
> +config.action_controller.consider_all_requests_local = true
> +config.action_controller.perform_caching             = true
> +config.action_view.debug_rjs                         = true
> +
> +# Don't care if the mailer can't send
> +config.action_mailer.raise_delivery_errors = false
> +
> +config.action_controller.cache_store = :file_store, RAILS_ROOT + '/tmp/cache/'
>
> Added: incubator/olio/webapp/rails/trunk/config/environments/development_mem_cached.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/environments/development_mem_cached.rb?rev=781829&view=auto
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/environments/development_mem_cached.rb (added)
> +++ incubator/olio/webapp/rails/trunk/config/environments/development_mem_cached.rb Thu Jun  4 19:03:57 2009
> @@ -0,0 +1,36 @@
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one
> +# or more contributor license agreements.  See the NOTICE file
> +# distributed with this work for additional information
> +# regarding copyright ownership.  The ASF licenses this file
> +# to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance
> +# with the License.  You may obtain a copy of the License at
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +# 
> +# Settings specified here will take precedence over those in config/environment.rb
> +
> +# In the development environment your application's code is reloaded on
> +# every request.  This slows down response time but is perfect for development
> +# since you don't have to restart the webserver when you make code changes.
> +config.cache_classes = false
> +
> +# Log error messages when you accidentally call methods on nil.
> +config.whiny_nils = true
> +
> +# Show full error reports and disable caching
> +config.action_controller.consider_all_requests_local = true
> +config.action_controller.perform_caching             = true
> +config.action_view.debug_rjs                         = true
> +
> +# Don't care if the mailer can't send
> +config.action_mailer.raise_delivery_errors = false
> +
> +config.action_controller.cache_store = :mem_cache_store
>
> Added: incubator/olio/webapp/rails/trunk/config/environments/development_nocache.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/environments/development_nocache.rb?rev=781829&view=auto
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/environments/development_nocache.rb (added)
> +++ incubator/olio/webapp/rails/trunk/config/environments/development_nocache.rb Thu Jun  4 19:03:57 2009
> @@ -0,0 +1,34 @@
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one
> +# or more contributor license agreements.  See the NOTICE file
> +# distributed with this work for additional information
> +# regarding copyright ownership.  The ASF licenses this file
> +# to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance
> +# with the License.  You may obtain a copy of the License at
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +# 
> +# Settings specified here will take precedence over those in config/environment.rb
> +
> +# In the development environment your application's code is reloaded on
> +# every request.  This slows down response time but is perfect for development
> +# since you don't have to restart the webserver when you make code changes.
> +config.cache_classes = false
> +
> +# Log error messages when you accidentally call methods on nil.
> +config.whiny_nils = true
> +
> +# Show full error reports and disable caching
> +config.action_controller.consider_all_requests_local = true
> +config.action_controller.perform_caching             = false
> +config.action_view.debug_rjs                         = true
> +
> +# Don't care if the mailer can't send
> +config.action_mailer.raise_delivery_errors = false
>
> Modified: incubator/olio/webapp/rails/trunk/config/environments/production.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/environments/production.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/environments/production.rb (original)
> +++ incubator/olio/webapp/rails/trunk/config/environments/production.rb Thu Jun  4 19:03:57 2009
> @@ -27,10 +27,22 @@
>  
>  # Full error reports are disabled and caching is turned on
>  config.action_controller.consider_all_requests_local = false
> -config.action_controller.perform_caching             = true
>  
>  # Enable serving of images, stylesheets, and javascripts from an asset server
>  # config.action_controller.asset_host                  = "http://assets.example.com"
>  
>  # Disable delivery errors, bad email addresses will be ignored
> -# config.action_mailer.raise_delivery_errors = false
> +if CACHED
> +
> +  config.action_controller.perform_caching             = true
> +
> +  if MEMCACHED
> +    config.action_controller.cache_store = :mem_cache_store, CACHE_SERVER
> +  else
> +    config.action_mailer.raise_delivery_errors = false
> +    config.action_controller.cache_store = :file_store, RAILS_ROOT + '/tmp/cache/'
> +  end
> +
> +else
> +    config.action_controller.perform_caching = false
> +end
>
> Modified: incubator/olio/webapp/rails/trunk/config/routes.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/config/routes.rb?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/config/routes.rb (original)
> +++ incubator/olio/webapp/rails/trunk/config/routes.rb Thu Jun  4 19:03:57 2009
> @@ -29,6 +29,7 @@
>        event.resources :comments, :member => { :delete => :get }
>    end
>    map.resources :events
> +  map.home "home", :controller => "events", :action => "home"
>    
>    map.resources(:users,:collection => {  :login => :any, 
>                                           :logout => :get,
> @@ -66,7 +67,7 @@
>    #   end
>    
>    # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
> -  map.root :controller => "events"
> +  map.root :controller => "events", :action => "index"
>    
>    # See how all your routes lay out with "rake routes"
>    
>
> Added: incubator/olio/webapp/rails/trunk/lib/lazy.rb
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/lib/lazy.rb?rev=781829&view=auto
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/lib/lazy.rb (added)
> +++ incubator/olio/webapp/rails/trunk/lib/lazy.rb Thu Jun  4 19:03:57 2009
> @@ -0,0 +1,48 @@
> +#
> +# Licensed to the Apache Software Foundation (ASF) under one
> +# or more contributor license agreements.  See the NOTICE file
> +# distributed with this work for additional information
> +# regarding copyright ownership.  The ASF licenses this file
> +# to you under the Apache License, Version 2.0 (the
> +# "License"); you may not use this file except in compliance
> +# with the License.  You may obtain a copy of the License at
> +#
> +#     http://www.apache.org/licenses/LICENSE-2.0
> +#
> +# Unless required by applicable law or agreed to in writing, software
> +# distributed under the License is distributed on an "AS IS" BASIS,
> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> +# See the License for the specific language governing permissions and
> +# limitations under the License.
> +# 
> +# Don't change this file!
> +# Configure your app in config/environment.rb and config/environments/*.rb
> +
> +class LazySunday
> +  %w{== === =~ class clone display dup eql? equal? extend freeze frozen? gem hash id inspect instance_eval instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? kind_of? method methods nil? object_id private_methods protected_methods public_methods require respond_to? send singleton_methods taint tainted? to_a to_s type untaint }.each do |m|
> +    module_eval <<-EOS
> +      def #{m}(*args, &block)
> +        self.resolve.__send__(:#{m}, *args, &block)
> +      end
> +    EOS
> +  end
> +  
> +  def initialize(&block)
> +    @block = block
> +  end
> +  
> +  def resolve
> +    # puts caller.join("\n") unless @obj
> +    @obj ||= @block.call
> +  end
> +    
> +  def method_missing(method, *args, &block)
> +    resolve.send(method, *args, &block)
> +  end
> +end
> +
> +module Kernel
> +  def lazy(&block)
> +    LazySunday.new(&block)
> +  end
> +end
>
> Modified: incubator/olio/webapp/rails/trunk/public/dispatch.fcgi
> URL: http://svn.apache.org/viewvc/incubator/olio/webapp/rails/trunk/public/dispatch.fcgi?rev=781829&r1=781828&r2=781829&view=diff
> ==============================================================================
> --- incubator/olio/webapp/rails/trunk/public/dispatch.fcgi (original)
> +++ incubator/olio/webapp/rails/trunk/public/dispatch.fcgi Thu Jun  4 19:03:57 2009
> @@ -1,4 +1,4 @@
> -#!/opt/local/bin/ruby
> +#!/usr/bin/ruby
>  #
>  # Licensed to the Apache Software Foundation (ASF) under one
>  # or more contributor license agreements.  See the NOTICE file
>
>
>