move subscribe to its own controller, add authorization, test subscribe/unsubscribe

This commit is contained in:
Stella 2014-10-31 22:45:15 +02:00 committed by Stella Rouzi
parent 97bf86454e
commit 3be200abcc
7 changed files with 92 additions and 43 deletions

View file

@ -5,42 +5,6 @@ class ConferenceController < ApplicationController
@keynote_speakers = @conference.keynote_speakers
end
def subscribe
conference = Conference.find_by_short_title(params[:id])
if current_user.subscriptions.where(conference: conference).blank?
subscription = Subscription.new(user_id: current_user.id, conference_id: conference.id)
begin
subscription.save!
flash[:success] = 'You have been subscribed to receive Email Notifications from this Conference.'
redirect_to root_path
rescue ActiveRecord::RecordInvalid
flash[:error] = subscription.errors.full_messages.to_sentence
redirect_to root_path
end
else
flash[:notice] = 'Already Subscribed'
redirect_to root_path
end
end
def unsubscribe
conference = Conference.find_by_short_title(params[:id])
subscription = current_user.subscriptions.where(conference_id: conference.id).first
if subscription.blank?
flash[:notice] = 'Already Unsubscribed'
redirect_to root_path
else
begin
subscription.destroy!
flash[:notice] = "You have been unsubscribed and now you won't be receiving any Email Notifications."
redirect_to root_path
rescue ActiveRecord::RecordInvalid
flash[:error] = subscription.errors.full_messages.to_sentence
redirect_to root_path
end
end
end
def gallery_photos
@photos = @conference.photos
render 'photos', formats: [:js]

View file

@ -0,0 +1,27 @@
class SubscriptionsController < ApplicationController
before_filter :verify_user
load_and_authorize_resource :conference, find_by: :short_title
load_and_authorize_resource only: [:create, :destroy], through: :conference
def create
@subscription = current_user.subscriptions.build(conference_id: @conference.id)
if @subscription.save!
flash[:notice] = "You have been subscribed to receive email notifications for #{@conference.short_title}."
redirect_to root_path
else
flash[:error] = subscription.errors.full_messages.to_sentence
redirect_to root_path
end
end
def destroy
@subscription = current_user.subscriptions.find_by(conference_id: @conference.id)
if @subscription.destroy
flash[:notice] = "You have been unsubscribed and now you will not be receiving email notifications for #{@conference.short_title}."
redirect_to root_path
else
flash[:error] = @subscription.errors.full_messages.to_sentence
redirect_to root_path
end
end
end

View file

@ -129,6 +129,9 @@ class Ability
def signed_in(user)
guest # Inherits abilities of guest
# Can subscribe, unsubscribe to a conference
can [:create, :destroy], Subscription, user_id: user.id
# Conference Registration
can :manage, Registration, user_id: user.id

View file

@ -55,6 +55,10 @@ class User < ActiveRecord::Base
},
presence: true
def subscribed? conference
self.subscriptions.find_by(conference_id: conference.id).present?
end
# Returns the ticket purchased ticket
# ====Returns
# * +TicketUser::ActiveRecord_Relation+ -> user

View file

@ -20,11 +20,10 @@
= simple_format(conference.venue.description, class: 'lead')
.col-md-2
.btn-group-vertical
- unless current_user.blank?
- if Conference.joins(:subscriptions).merge(current_user.subscriptions).include? conference
= link_to "Unsubscribe", subscription_conference_path(conference.short_title), method: "DELETE", class: "btn btn-danger btn-group-vertical"
-else
= link_to "Subscribe", subscription_conference_path(conference.short_title), method: "PATCH", class: "btn btn-info btn-group-vertical"
- if current_user.nil? || !current_user.subscribed?(conference)
= link_to 'Subscribe', conference_subscriptions_path(conference.short_title), method: :post, class: 'btn btn-info btn-group-vertical'
- else
= link_to 'Unsubscribe', conference_subscriptions_path(conference.short_title), method: :delete, class: 'btn btn-danger btn-group-vertical'
- if !@conference || @conference != conference
- if conference.splashpage && conference.splashpage.public