class FeedController < ApplicationController
-
- skip_before_filter :verify_authenticity_token
-
+
def index
- @feeds = FeedItem.find(:all, :select => 'DISTINCT feed_name')
+ @feeds = FeedItem.select(:feed_name).distinct
respond_to do |format|
format.html
format.rss { render :layout => false }
end
end
-
+
def show
- @feed_items = FeedItem.find_all_by_feed_name(params[:feed_name])
- redirect_to index_url if @feed_items == []
- respond_to do |format|
- format.html
- format.rss { render :layout => false }
+ if FeedItem::valid_feed_name?(params[:feed_name])
+ @feed_name = params[:feed_name]
+ @feed_items = FeedItem.in_feed(@feed_name)
+ respond_to do |format|
+ if @feed_items.empty?
+ flash[:notice] = "No items in feed #{@feed_name}"
+ format.html { redirect_to index_path }
+ format.rss { render :layout => false }
+ else
+ format.html
+ format.rss { render :layout => false }
+ end
+ end
+ else
+ respond_to do |format|
+ flash[:notice] = "Invalid feed name"
+ format.html { redirect_to index_path }
+ format.rss { head :not_found}
+ end
end
end
def update
- item = FeedItem.find_by_feed_name_and_title(params[:feed_name], params[:title])
- if item
- if params[:description] == ''
- item.destroy
+ if FeedItem::valid_feed_name?(params[:feed_name])
+ item = FeedItem.in_feed(params[:feed_name]).entitled(params[:title]).take
+ if item
+ if params[:description].empty?
+ destroy_item(item)
+ else
+ update_item(item)
+ end
else
- item.update_attribute(:description, params[:description])
+ create_item
end
else
- FeedItem.create(:feed_name => params[:feed_name],
- :title => params[:title],
- :description => params[:description])
+ respond_to do |format|
+ flash[:notice] = "Invalid feed name"
+ format.html { redirect_to index_path }
+ format.rss { head :not_found }
+ end
+ end
+ end
+
+
+ # private
+
+ private def create_item
+ item = FeedItem.new(:feed_name => params[:feed_name],
+ :title => params[:title],
+ :description => params[:description])
+ item.save!
+ flash[:notice] = "Element #{params[:title]} created"
+ respond_to do |format|
+ format.html { redirect_to feed_path(params[:feed_name]) }
+ format.rss { head :ok }
+ end
+ rescue ActiveRecord::RecordInvalid => error
+ flash[:notice] = "Element #{params[:title]} could not be created"
+ respond_to do |format|
+ format.html { redirect_to feed_path(params[:feed_name]) }
+ format.rss { head :unprocessable_entity }
+ end
+ end
+
+ private def update_item(item)
+ if item.update_attribute(:description, params[:description])
+ flash[:notice] = "Element #{params[:title]} updated"
+ respond_to do |format|
+ format.html { redirect_to feed_path(params[:feed_name]) }
+ format.rss { head :ok }
+ end
+ else
+ flash[:notice] = "Element #{params[:title]} could not be updated"
+ respond_to do |format|
+ format.html { redirect_to feed_path(params[:feed_name]) }
+ format.rss { head :unprocessable_entity }
+ end
+ end
+ end
+
+ private def destroy_item(item)
+ if item.destroy
+ flash[:notice] = "Element #{params[:title]} deleted"
+ respond_to do |format|
+ format.html { redirect_to feed_path(params[:feed_name]) }
+ format.rss { head :ok }
+ end
+ else
+ flash[:notice] = "Element #{params[:title]} could not be deleted"
+ respond_to do |format|
+ format.html { redirect_to feed_path(params[:feed_name]) }
+ format.rss { head :unprocessable_entity }
+ end
end
- redirect_to feed_url(params[:feed_name])
end
end