Replaced delayed_job with resque. See README_DEVEL

This commit is contained in:
benni 2012-12-23 17:38:04 +01:00
parent 344abf5a26
commit 2c0fe08be6
18 changed files with 82 additions and 74 deletions

View file

@ -5,7 +5,7 @@ class FeedbackController < ApplicationController
def create
if params[:message].present?
Mailer.feedback(FoodsoftConfig.scope, current_user, params[:message]).deliver
Mailer.feedback(current_user, params[:message]).deliver
redirect_to root_url, :notice => "Das Feedback wurde erfolgreich verschickt. Vielen Dank!"
else
render :action => 'new'

View file

@ -10,7 +10,7 @@ class InvitesController < ApplicationController
def create
@invite = Invite.new(params[:invite])
if @invite.save
Mailer.delay.invite(FoodsoftConfig.scope, @invite.id)
Mailer.invite(@invite)
respond_to do |format|
format.html do

View file

@ -14,7 +14,7 @@ class LoginController < ApplicationController
user.reset_password_token = user.new_random_password(16)
user.reset_password_expires = Time.now.advance(:days => 2)
if user.save
Mailer.delay.reset_password(FoodsoftConfig.scope, user.id)
Mailer.reset_password(user)
logger.debug("Sent password reset email to #{user.email}.")
end
end

View file

@ -2,7 +2,7 @@ class MessagesController < ApplicationController
# Renders the "inbox" action.
def index
@messages = Message.public.page(params[:page]).per(@per_page).order('created_at DESC')
@messages = Message.public.page(params[:page]).per(@per_page).order('created_at DESC').includes(:sender)
end
# Creates a new message object.
@ -14,7 +14,7 @@ class MessagesController < ApplicationController
def create
@message = @current_user.send_messages.new(params[:message])
if @message.save
Message.delay.deliver(@message.id)
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'message_deliver', @message.id)
redirect_to messages_url, :notice => "Nachricht ist gespeichert und wird versendet."
else
render :action => 'new'

View file

@ -10,6 +10,7 @@ class Mailer < ActionMailer::Base
# Sends an email copy of the given internal foodsoft message.
def foodsoft_message(message, recipient)
set_foodcoop_scope
@message = message
mail subject: "[#{FoodsoftConfig[:name]}] " + message.subject,
@ -19,9 +20,9 @@ class Mailer < ActionMailer::Base
# Sends an email with instructions on how to reset the password.
# Assumes user.setResetPasswordToken has been successfully called already.
def reset_password(foodcoop, user_id)
set_foodcoop_scope(foodcoop)
@user = User.find(user_id)
def reset_password(user)
set_foodcoop_scope
@user = user
@link = new_password_url(id: @user.id, token: @user.reset_password_token)
mail :to => @user.email,
@ -29,9 +30,9 @@ class Mailer < ActionMailer::Base
end
# Sends an invite email.
def invite(foodcoop, invite_id)
set_foodcoop_scope(foodcoop)
@invite = Invite.find(invite_id)
def invite(invite)
set_foodcoop_scope
@invite = invite
@link = accept_invitation_url(token: @invite.token)
mail :to => @invite.email,
@ -40,6 +41,7 @@ class Mailer < ActionMailer::Base
# Notify user of upcoming task.
def upcoming_tasks(user, task)
set_foodcoop_scope
@user = user
@task = task
@ -49,6 +51,7 @@ class Mailer < ActionMailer::Base
# Sends order result for specific Ordergroup
def order_result(user, group_order)
set_foodcoop_scope
@order = group_order.order
@group_order = group_order
@ -58,6 +61,7 @@ class Mailer < ActionMailer::Base
# Notify user if account balance is less than zero
def negative_balance(user,transaction)
set_foodcoop_scope
@group = user.ordergroup
@transaction = transaction
@ -65,8 +69,8 @@ class Mailer < ActionMailer::Base
:subject => "[#{FoodsoftConfig[:name]}] Gruppenkonto im Minus"
end
def feedback(foodcoop, user, feedback)
set_foodcoop_scope(foodcoop)
def feedback(user, feedback)
set_foodcoop_scope
@user = user
@feedback = feedback
@ -78,6 +82,7 @@ class Mailer < ActionMailer::Base
end
def not_enough_users_assigned(task, user)
set_foodcoop_scope
@task = task
@user = user
@ -87,7 +92,7 @@ class Mailer < ActionMailer::Base
private
def set_foodcoop_scope(foodcoop)
def set_foodcoop_scope(foodcoop = FoodsoftConfig.scope)
ActionMailer::Base.default_url_options[:foodcoop] = foodcoop
end

View file

@ -170,7 +170,7 @@ class Order < ActiveRecord::Base
ordergroups.each(&:update_stats!)
# Notifications
UserNotifier.delay.finished_order(self.id)
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'finished_order', self.id)
end
end
end

View file

@ -53,7 +53,7 @@ class Ordergroup < Group
save!
# Notify only when order group had a positive balance before the last transaction:
if t.amount < 0 && self.account_balance < 0 && self.account_balance - t.amount >= 0
UserNotifier.delay.negative_balance(self.id, t.id)
Resque.enqueue(UserNotifier, FoodsoftConfig.scope, 'negative_balance', self.id, t.id)
end
end
end

View file

@ -5,8 +5,7 @@ die Bestellung für "#{@order.name}" wurde am #{I18n.l @order.ends} von #{@order
Für Euch wurden die folgenden Artikel bestellt:
- for group_order_article in @group_order.group_order_articles.ordered.all(:include => :order_article)
- article = group_order_article.order_article.article
= article.name
\: #{group_order_article.result} x #{article.unit} = #{group_order_article.result * article.fc_price}
#{article.name}: #{group_order_article.result} x #{article.unit} = #{group_order_article.result * article.fc_price}
Gesamtpreis: #{@group_order.price}
Bestellung online einsehen: #{group_order_url(@group_order)}

View file

@ -46,5 +46,5 @@
= f.input :subject, input_html: {class: 'input-xxlarge'}
= f.input :body, input_html: {class: 'input-xxlarge'}
.form-actions
= f.submit
= f.submit class: 'btn btn-primary'
= link_to 'oder abbrechen', :back

View file

@ -1,7 +1,20 @@
# This plain ruby class should handle all user notifications, called by various models
class UserNotifier
@queue = :foodsoft_notifier
def self.finished_order(order_id)
# Resque style method to perform every class method defined here
def self.perform(foodcoop, method_name, *args)
FoodsoftConfig.select_foodcoop(foodcoop)
self.send method_name, args
end
def self.message_deliver(args)
message_id = args.first
Message.find(message_id).deliver
end
def self.finished_order(args)
order_id = args.first
Order.find(order_id).group_orders.each do |group_order|
group_order.ordergroup.users.each do |user|
begin
@ -15,7 +28,8 @@ class UserNotifier
# If this order group's account balance is made negative by the given/last transaction,
# a message is sent to all users who have enabled notification.
def self.negative_balance(ordergroup_id, transaction_id)
def self.negative_balance(args)
ordergroup_id, transaction_id = args
transaction = FinancialTransaction.find transaction_id
Ordergroup.find(ordergroup_id).users.each do |user|