{"action":"created","issue":{"url":"https://api.github.com/repos/skanev/evans/issues/163","labels_url":"https://api.github.com/repos/skanev/evans/issues/163/labels{/name}","comments_url":"https://api.github.com/repos/skanev/evans/issues/163/comments","events_url":"https://api.github.com/repos/skanev/evans/issues/163/events","html_url":"https://github.com/skanev/evans/pull/163","id":80269441,"number":163,"title":"Notifications system for Evans","user":{"login":"skovachev","id":1137946,"avatar_url":"https://avatars.githubusercontent.com/u/1137946?v=3","gravatar_id":"","url":"https://api.github.com/users/skovachev","html_url":"https://github.com/skovachev","followers_url":"https://api.github.com/users/skovachev/followers","following_url":"https://api.github.com/users/skovachev/following{/other_user}","gists_url":"https://api.github.com/users/skovachev/gists{/gist_id}","starred_url":"https://api.github.com/users/skovachev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/skovachev/subscriptions","organizations_url":"https://api.github.com/users/skovachev/orgs","repos_url":"https://api.github.com/users/skovachev/repos","events_url":"https://api.github.com/users/skovachev/events{/privacy}","received_events_url":"https://api.github.com/users/skovachev/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":31,"created_at":"2015-05-24T20:58:08Z","updated_at":"2015-05-29T14:49:47Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/skanev/evans/pulls/163","html_url":"https://github.com/skanev/evans/pull/163","diff_url":"https://github.com/skanev/evans/pull/163.diff","patch_url":"https://github.com/skanev/evans/pull/163.patch"},"body":"Adds support for simple notifications. This feature is implemented as part of the HackBulgaria Ruby on Rails course. In summary this pull request adds:\r\n\r\n* a notifications view page for all users, containing a list of all unread notifications\r\n* a notifications menu item that shows an unread counter\r\n* new notifications are posted when a new task or challenge is created, or when new reply is posted on a topic to which a user has contributed\r\n* users can view notifications from the list which takes them to the notification source and marks the notification as read\r\n\r\nFull task description can be found here: [Week 8, Evans task description](https://github.com/HackBulgaria/Ruby-on-Rails-1/tree/master/week8/evans)"},"comment":{"url":"https://api.github.com/repos/skanev/evans/issues/comments/106835609","html_url":"https://github.com/skanev/evans/pull/163#issuecomment-106835609","issue_url":"https://api.github.com/repos/skanev/evans/issues/163","id":106835609,"user":{"login":"gsamokovarov","id":604618,"avatar_url":"https://avatars.githubusercontent.com/u/604618?v=3","gravatar_id":"","url":"https://api.github.com/users/gsamokovarov","html_url":"https://github.com/gsamokovarov","followers_url":"https://api.github.com/users/gsamokovarov/followers","following_url":"https://api.github.com/users/gsamokovarov/following{/other_user}","gists_url":"https://api.github.com/users/gsamokovarov/gists{/gist_id}","starred_url":"https://api.github.com/users/gsamokovarov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gsamokovarov/subscriptions","organizations_url":"https://api.github.com/users/gsamokovarov/orgs","repos_url":"https://api.github.com/users/gsamokovarov/repos","events_url":"https://api.github.com/users/gsamokovarov/events{/privacy}","received_events_url":"https://api.github.com/users/gsamokovarov/received_events","type":"User","site_admin":false},"created_at":"2015-05-29T14:49:47Z","updated_at":"2015-05-29T14:49:47Z","body":"> Нека да завършим на нетехническа нотка:\r\n\r\nОкей, това може да се проточи. Нека спрем със глупостите и да караме технически. Аз се издразних и скочих и да съм те обидил, не е била това целта, нали. Спирам да бутам за времето, дай да го направим така, че всички да сме щастливи накрая. :v:\r\n\r\n> Именно това поражда въпроси като \"Ако направя ReplyCreator, трябва ли да направя ReplyEditor\"?\r\n\r\nС това съм съгласен и е кофти ситуация, да. Имайки предвид, че кода е показен, може да се подлъжем и вкараме гаден тренд.\r\n\r\n> Сега, малко коментари от моя страна по твоята имплементация на слоя.\r\n\r\nСега, това е скеч имплементация. `#call` връща `Reply`, точно за да не нося creator-а. Дали е рошав, дали да го преименоваме, дали да кръщаваме сервизите като глаголи са се решение, все  предочитания. Не държа на \"мойто\", стига да е консистенто навсякъде. Вкрайна сметка това са technicalities и може да ги изгладим.\r\n\r\nДруг минус с рейса, за мене е търсенето е имплицитността на subscriber-а. Когато тригърна нещо, на колко места трябва да погледна за да знам какво ще пусна? Да кажем, че това не е особен проблем за evans, тъй като не е мн. голям и ако търсим записали се само в EventBusSubscriber-и аз съм окей.\r\n\r\n---\r\n\r\n@skanev Как го виждаш това API малко по-специфично?\r\n\r\n`EventBusSubscriber`\r\n\r\n* `def self.on(even_name)` - приема име на събитие и блок с произволен брой аргументи? Блока има достъп до instance методи?\r\n\r\n*  `def self.subclass` - Тук ли се случва закачването към централният сторидж на събития? Класова променлива в `EventBusSubscriber` ли е сториджа (защото наследниците я споделят)? Такива неща.\r\n\r\nДруг интерфейс има ли? Къде да оставим имплементацията и къде да живеят subscriber-ите? `lib/event_bus{_,/}subscriber.rb`, `app/subscribers`? Вариант ли е ползването на `ActiveSupport::Notifications` за разхвърлято на събития или си го правим изцяло ние?\r\n\r\n`EventBus`\r\n\r\n* `def self.trigger(event_name, *args)`. Това само възбужда събития? Грешките ги оставяме да гърмят, което според мен е разумно, или мислим стратегия за подтискане на грешки и се надяваме да изкараме всичко, което ще оживее? Искаме ли всичко или нищо e.g. транзакция, ако кажем че главно AR-неща ще минават през нас – един listener успява, др. фейлва; оставаме ли нещата така или чистим. Бърка ли ни АR като цяло?\r\n\r\nДруг интерфейс има ли?"}}