X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=app%2Fcontrollers%2Ffeed_controller.rb;h=f7b8c3e9c7a8b65ba40e39e1aeff9fbc7cddf52c;hb=449f88a595af707cec02270dd752773a18dacfc2;hp=2eddc8ca05f06eb2ea34ec6d76ead08e3c448703;hpb=73ebfcfd8bdc389269ab4522a8cfc2486c32978e;p=feedcatcher.git diff --git a/app/controllers/feed_controller.rb b/app/controllers/feed_controller.rb index 2eddc8c..f7b8c3e 100644 --- a/app/controllers/feed_controller.rb +++ b/app/controllers/feed_controller.rb @@ -1,33 +1,108 @@ class FeedController < ApplicationController + 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_item][:feed_name], params[:feed_item][:title]) - if item - if params[:feed_item][: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[:feed_item][:description]) + create_item end else - FeedItem.create(params[:feed_item]) + 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_item][:feed_name]) end end