-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add email notifications for tasks and challenges #148
base: master
Are you sure you want to change the base?
Conversation
60a5d1b
to
20a284f
Compare
app/mailers/challenge_mailer.rb
Outdated
@user_name = user.first_name | ||
@challenge_name = challenge.name | ||
@challenge_url = challenge_url(challenge) | ||
@challenge_end_date = challenge.closes_at.strftime('%d.%m.%Y %H:%M') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тоя формат не може ли да отиде в рейлската конфигурация? Отделно, нямаме ли някъде остандартен формат на дати?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не намерих глобален формат. Което не значи, че няма...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Друг проект е било. Играта ти е нещо в config/initializers
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Има вградени формати на дати в Рейлс. Не помя точните имена, но имаше
:short, :long и подобни, ако не се лъжа. И май се подаваха като аргумент на
:to_s
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mitio Like, read the link, bro.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@mitio не ми харесаха форматите, затова реших да си го форматирам ръчно :)
EDIT: Имало е default формат в locales
Много яко, но има повторение.
Отделно: Не мога да напипам кога пращаш mail-и. Правиш някаква хакерия с
Щях да ти предложа да пазиш състояние във всяко такова дали студентите са били известени, но вместо това ти предлагам да сложиш един бутон "Изпрати известие за ново предизвикателство" за админите и да разкараш тези observer-и. |
Благодаря за коментарите. :) За повторението доста се чудих какво да направя, понеже не съм особено запознат с Rails и не ми е много ясно кое къде е добре да се сложи. Общ mailer, който да се използва за повече от един модел ОК ли е? Повечето повторения идват от факта, че самите модели challenge и task са доста подобни. Това с бутона е добро, ще го преработя утре. |
Общ мейлър е ОК. Търсиш някакъв протокол (интерфейс) на който Мога да ти помогна с дизайна, но няма да е тази седмица. Евентуално следващата. Отвъд това, напълно ОК съм да ревюирам каквото изпратиш :) |
Created EmailNotificationsController#new_challenge and #new_task
In views/challenges/show and views/tasks/show
Преработих нещата:
Не съм напълно убеден, че общ mailer е много добра идея в конкретния случай. Кодът не е много, а с изключение на challenge и task няма да може работи в този вид за друг модел. Освен това, ако трябва да се параметризира или да се изнесат на друго място специфичните неща, няма ли да се обезсмисли идеята на mailer-ите? |
|
||
def new_challenge | ||
challenge = Challenge.find params[:id] | ||
ChallengeMailer.new_challenge challenge unless challenge.hidden |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
challenges.hidden
е булева колонка, което означава, че можеш да я достъпваш и като предикат през модела, което аз бих предпочел в този случай: ... unless challenge.hidden?
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice. :)
The shared examples in their previous form could not be used for any other mailer, even though there may be other mailers that send emails to multiple users. Also, the parametrization of the shared examples makes it harder to follow the expectations of the tests. Now, only the examples for the `#new_challenge` and `#new_task` methods are shared. This will make the shared test usable for other mailers. The other option is to make another mailer whose job is to retrieve all users from the database and call another mailer, but the method itself is small and making it more generic will be almost like recreating the functionality of `User.where.each`. The expectations in the separate mailer spec files are similar, but for other similar mailers they may be different. For example an announcement mailer would not contain the title of the announcement in the body text (only in the subject) and would not use `announcement_url(announcement)` to generate its URL.
Направих някои промени по тестовете - изкарах тези за Имейлите за новини мисля да ги базирам на този бранч. Да пусна ли друг PR за тях или да изчакам да ревюирате този, и тогава? ПП. Не бързам, просто се чудех дали не е добре да изчакам с другия PR. :) |
app/mailers/challenge_mailer.rb
Outdated
@challenge_end_date = challenge.closes_at | ||
|
||
mail to: user.email, | ||
subject: "Ново предизвикателство - #{challenge.name}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Това мисля, че ще се събере на един ред. Мисля, че беше коментирано, че тази подредба не се тачи в този codebase :)
app/views/challenges/show.html.haml
Outdated
@@ -9,6 +9,13 @@ | |||
= admin_only do | |||
- unless ChallengeCheckWorker.queued? @challenge.id | |||
= link_to 'Пусни тестовете', challenge_check_path(@challenge), method: :create, class: :action | |||
= admin_only do | |||
- unless @challenge.hidden |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@challenge.hidden?
(т.е. сложи въпросителна на hidden
).
@stormbreakerbg, относно последния ти коментар, мисля, че това е добър пример за спекулативен дизайн – правиш си дизайна така, че да адресира евентуално бъдещо разширение (announcements mailer). Но това, колкото и сигурно да изглежда, е все още в неясен бъдещ момент. В коментара на commit-съобщението, за който споменаваш, се говори за разлики в announcements mailer-а – че няма да съдържат заглавието на новината в body-текста (защо?) и че няма да ползват Та, ето я реалността. Промените, които си направил, са на база на спекулация за евентуални бъдещи необходимости, които вече не съществуват. Относно повтарянето на нещата – наистина са доста близки. Не мислиш ли, че ще е по-добре да обединим повторенията в "homework" и да кръстим нещата |
@mitio, честно казано, ако се бях сетил за И все пак, обединението в На мейлърите гледам като на конфигурация. Да, ще се случи два да имат подобен формат или да работят по подобен начин - например и двете да пращат до всички потребители, които са се абонирали, или в даден момент ще изглеждат по подобен начин. Но обединението на Наистина, ако го нямаше този общ знаменател (homework), според мен не би било оправдано да се опитваме "насила" да премахнем малко дублиране, което е само на ниво код. Да, методите За новините - смятам, че няма нужда да съдържат заглавието и в body-то, защото така се доближаваме по-добре до семантиката на имейлите. Лично аз бих предпочел по-скоро да нагодим кода към имейла, отколкото обратното. Да обобщя - харесва ми идеята за Донякъде съм съгласен със забележката за спекулативния дизайн. Може би в случая не се получи добре, но целта ми беше и да махна големия |
Макар че ми е трудно да го рационализирам, в този конкретен случай аз бих обединил функционалността за известие на задачи и предизвикателства под знаменател "homework", бих параметризирал само типовете и превода на нещото (а преводът даже може да се извлича автоматично от locale файла на база на типа). Това за новините бих го оставил отделно. Иначе съм съгласен, че е малко на границата на насилствения DRY. В крайна сметка, нямам силни възражения да остане и така. Бих оставил на теб да прецениш. Като горигираш нещата, остави един коментар да погледна пак и да го merge-нем :) |
Да, със сигурност тези двете ще ги обединя. homework е добър общ знаменател за задача и предизвикателство. За насилствения DRY говорех за новините и малко "по принцип" (ако не беше измислил homework), не конкретно за homework. :) Ще ги коригирам. Няма да е днес, обаче. |
@mitio оправих част от нещата. При обединяването на мейлърите възникна следният проблем, който не знам как най-добре да реша - не е достатъчно просто да сменим думата "задача" с "предизвикателство", защото са в различен род:
Дали двете да ги сложа в locale файла или само заглавието на имейла, а за другото да са отделни view-тата за съдържанието на имейла? |
Как стоят нещата тук? |
Все още го искаме, но не е прегледан. Би трябвало да не е много трудно да се merge-не. |
PR към #140
Очаквам коментари :)