notify_on 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +439 -3
- data/lib/notify_on/notify_on.rb +1 -1
- data/lib/notify_on/receives_notifications.rb +1 -1
- data/lib/notify_on/version.rb +1 -1
- data/spec/dummy/app/models/message.rb +1 -1
- data/spec/dummy/app/models/post.rb +1 -1
- metadata +74 -74
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21468ef5fcb1a7687544f3b74fa2d2cdd8b28069
|
4
|
+
data.tar.gz: 8e7d964ffdcaf8394462b74044da7f77fc96a6b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9341d2644ae7bf29d11d74bfc73d5adeca49d6b5f37b562d0fe9193ac5dc1ce0b122122bf33f0a327c6c96d380b3904ef16ba105383a8398484c2633d4e8fec7
|
7
|
+
data.tar.gz: 9ecfff3c374c78be66d495ea36cc83fc6f1256ce490559684e785326d6affbdb5782d6fecab99455ae251b4605a61fdfd5f6bc743a81c575fcb50c74c09e2fd4
|
data/README.md
CHANGED
@@ -5,12 +5,11 @@ NotifyOn
|
|
5
5
|
|
6
6
|
NotifyOn generates automatic notifications as a result of state changes on a
|
7
7
|
particular model in a Rails application. It supports email messages, along with
|
8
|
-
third-party real-time delivery, while also storing each notification in your
|
8
|
+
third-party real-time delivery (via [Pusher](https://pusher.com)), while also storing each notification in your
|
9
9
|
database so you can use, adjust, and display as you'd wish.
|
10
10
|
|
11
11
|
Documentation can be found in [the wiki
|
12
|
-
library](https://github.com/digerata/NotifyOn/wiki). A good place to start is
|
13
|
-
[this article](https://github.com/BrilliantChemistry/NotifyOn/wiki/Getting-Started).
|
12
|
+
library](https://github.com/digerata/NotifyOn/wiki). A good place to start is further down this page.
|
14
13
|
|
15
14
|
If you have questions, comments, ideas, or bug reports, please [create an
|
16
15
|
issue](https://github.com/BrilliantChemistry/NotifyOn/issues/new).
|
@@ -27,3 +26,440 @@ License
|
|
27
26
|
----------
|
28
27
|
|
29
28
|
See [MIT-LICENSE](https://github.com/BrilliantChemistry/NotifyOn/blob/master/MIT-LICENSE)
|
29
|
+
|
30
|
+
|
31
|
+
## Install Notify:
|
32
|
+
|
33
|
+
To install NotifyOn, add it to your Gemfile:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
gem 'notify_on'
|
37
|
+
```
|
38
|
+
|
39
|
+
Then run the bundle command to install it.
|
40
|
+
|
41
|
+
```text
|
42
|
+
$ bundle exec rails g notify_on:install
|
43
|
+
```
|
44
|
+
|
45
|
+
This adds the following to your project:
|
46
|
+
|
47
|
+
- Migration to create the `notify_on_notifications` table
|
48
|
+
- Default NotifyOn config
|
49
|
+
- Bulk notification settings
|
50
|
+
|
51
|
+
Migrate your database and then you're ready to go.
|
52
|
+
|
53
|
+
There are two ways in which you can configure a notification:
|
54
|
+
|
55
|
+
1. [Within A Model](https://github.com/BrilliantChemistry/NotifyOn/wiki/notify_on)
|
56
|
+
2. [Bulk Configuration](https://github.com/BrilliantChemistry/NotifyOn/wiki/Bulk-Configuration)
|
57
|
+
|
58
|
+
Option 1 is the way to go when starting out. If you find that your configuration gets complicated within the model, you can move it out to option 2.
|
59
|
+
|
60
|
+
Check out the pages above to learn more about each method. Note that it is recommended you read through the model config first, as it outlines the options for a notification that may be used in bulk.
|
61
|
+
|
62
|
+
*We'll go through an example implementation below...*
|
63
|
+
|
64
|
+
## Configure Model
|
65
|
+
|
66
|
+
Set what model is receiving notifications (E.g., the user...)
|
67
|
+
|
68
|
+
`user.rb`
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
class User < ApplicationRecord
|
72
|
+
|
73
|
+
receives_notifications
|
74
|
+
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
Add to your model the `notify_on` config:
|
79
|
+
|
80
|
+
`chat.rb`
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
notify_on :create, { to: :other_users, message: ‘{sender.first_name} sent you a message.’, email: { template: 'new_message’ } }
|
84
|
+
|
85
|
+
def other_users
|
86
|
+
chat.other_users(author)
|
87
|
+
end
|
88
|
+
```
|
89
|
+
|
90
|
+
See docs on [notify_on](https://github.com/BrilliantChemistry/NotifyOn/wiki/notify_on) for further details.
|
91
|
+
|
92
|
+
## Provide better email messages
|
93
|
+
|
94
|
+
Add your corresponding mailer view:
|
95
|
+
(See: https://github.com/BrilliantChemistry/NotifyOn/wiki/Override-Default-Email-Message)
|
96
|
+
|
97
|
+
`app/views/notifications/new_message.html.erb`
|
98
|
+
|
99
|
+
(Notice the partials for a shared header and footer. The model object that triggered the notification is passed in as @trigger.)
|
100
|
+
```erb
|
101
|
+
<% @message = @trigger %>
|
102
|
+
<%= render partial: "shared/mail/header" %>
|
103
|
+
|
104
|
+
<span class="preheader">
|
105
|
+
<%= truncate(@message.content.gsub(/[\n]+/, " "), length: 200) %>
|
106
|
+
</span>
|
107
|
+
<div style="color: #999;">-- Write ABOVE THIS LINE to post a reply or
|
108
|
+
<%= link_to “view this on [Your Site].”, chats_url(@message.chat) %> --
|
109
|
+
</div>
|
110
|
+
<div style="margin:0; padding:0; width:100%; line-height: 100% !important; background-color: #fff; margin-top: 15px;">
|
111
|
+
|
112
|
+
<p style="font-size: 14px">
|
113
|
+
<%= render partial: "shared/avatar", locals: {user: @sender, :size => :small} %>
|
114
|
+
<% if @message.chat.messages.count > 1 %>
|
115
|
+
<%= @sender.first_name %>
|
116
|
+
has replied:
|
117
|
+
<% else %>
|
118
|
+
<%= @sender.full_name %>
|
119
|
+
has sent you a message:
|
120
|
+
<% end %>
|
121
|
+
</p>
|
122
|
+
<p></p>
|
123
|
+
<%= markdown @message.filtered_content %>
|
124
|
+
<hr>
|
125
|
+
|
126
|
+
<p style="font-size: 12px; color: #999">
|
127
|
+
There may be more messages sent since this one. Log in to [Your Site] with your account, '<%= @recipient.email %>'
|
128
|
+
to view them all. <%= link_to "Go there now.", chats_url(@message.chat) %>
|
129
|
+
</p>
|
130
|
+
|
131
|
+
<%= render partial: "shared/mail/footer" %>
|
132
|
+
```
|
133
|
+
|
134
|
+
## Configuring In App Notifications
|
135
|
+
|
136
|
+
Lastly, configure pusher.io so that if a user is logged in, they'll get a push notification in the browser instead of an email.
|
137
|
+
|
138
|
+
Verify settings in `config/intializers/notify_on.rb`:
|
139
|
+
|
140
|
+
```ruby
|
141
|
+
# Pusher enables you to send notifications in real-time. Learn more about
|
142
|
+
# Pusher at https://pusher.com. If you are going to use Pusher, you need to
|
143
|
+
# include the following values:
|
144
|
+
#
|
145
|
+
# config.pusher_app_id = 'my_app_id'
|
146
|
+
# config.pusher_key = 'my_key'
|
147
|
+
# config.pusher_secret = 'my_secret'
|
148
|
+
#
|
149
|
+
# Note: You may want to use environment-dependent values, not tracked by git,
|
150
|
+
# so your secrets are not exposed. You may choose to use Rails' secrets for
|
151
|
+
# this. For example:
|
152
|
+
#
|
153
|
+
config.pusher_app_id = Rails.application.secrets.pusher_app_id
|
154
|
+
config.pusher_key = Rails.application.secrets.pusher_key
|
155
|
+
config.pusher_secret = Rails.application.secrets.pusher_secret
|
156
|
+
#
|
157
|
+
# While you can configure your Pusher event in each "notify_on" call, you can
|
158
|
+
# also set your default configuration so you don't have to restate it for
|
159
|
+
# every notification.
|
160
|
+
#
|
161
|
+
config.default_pusher_channel = 'presence-{:env}-notification-{:recipient_id}'
|
162
|
+
config.default_pusher_event = 'new_notification'
|
163
|
+
#
|
164
|
+
# You can use Pusher by default (which requires the channel and event be set
|
165
|
+
# above). Uncomment the following setting to do so.
|
166
|
+
#
|
167
|
+
config.use_pusher_by_default = true
|
168
|
+
```
|
169
|
+
|
170
|
+
## Setup Your UI (Notification List)
|
171
|
+
|
172
|
+
This part is very application specific.
|
173
|
+
|
174
|
+
BC has a menu icon that displays the number of unread notifications. Clicking or tapping on that shows a dropdown of the past X notifications, both read and unread.
|
175
|
+
|
176
|
+

|
177
|
+
|
178
|
+
Again this is very UI specific, but here is code and instructions to help.
|
179
|
+
|
180
|
+
1. Communicate to the UI what channel to listen to for notifications.
|
181
|
+
|
182
|
+
```erb
|
183
|
+
<body data-notifications="<%= "presence-#{Rails.env.to_s.downcase}-notification-#{current_user.id}" if user_signed_in? %>"
|
184
|
+
```
|
185
|
+
|
186
|
+
2. Setup notifications if we are logged in:
|
187
|
+
|
188
|
+
```erb
|
189
|
+
<% if user_signed_in? %>
|
190
|
+
<script>
|
191
|
+
$(document).on('ready', function(){
|
192
|
+
if(window.usePusher == true) {
|
193
|
+
initRealTimeNotifications();
|
194
|
+
}
|
195
|
+
});
|
196
|
+
</script>
|
197
|
+
<% end %>
|
198
|
+
```
|
199
|
+
|
200
|
+
3. Setup your Notification UI
|
201
|
+
|
202
|
+
This code will listen for new notifications (of type `new_notification` ;) ) from pusher. When it receives one, it will go back to the server
|
203
|
+
for the new dropdown menu list. It will also update the number of notifications shown in the red circle. (And display it if there were 0 unread before)
|
204
|
+
|
205
|
+
`notifications.js.erb`
|
206
|
+
|
207
|
+
```javascript
|
208
|
+
function initRealTimeNotifications() {
|
209
|
+
if(notifications.pusher == null) {
|
210
|
+
notifications.pusher = new Pusher('<%= Rails.application.secrets.pusher_key %>', {
|
211
|
+
encrypted: true
|
212
|
+
});
|
213
|
+
|
214
|
+
notifications.channelName = $('body').data('notifications');
|
215
|
+
|
216
|
+
notifications.channel = notifications.pusher.subscribe(notifications.channelName);
|
217
|
+
notifications.channel.bind('new_notification', function(data) {
|
218
|
+
|
219
|
+
// In case we've logged out since binding this event
|
220
|
+
if($('body').data('notifications') == notifications.channelName) {
|
221
|
+
|
222
|
+
// Update the reference to the list
|
223
|
+
// (This is the contents of the dropdown and you must provide an endpoint to render this.)
|
224
|
+
$.get('/notifications', function(notifications){
|
225
|
+
$('#notifications-list-ref').html(notifications);
|
226
|
+
|
227
|
+
var focusedOnChat = false;
|
228
|
+
|
229
|
+
// If we are currently on
|
230
|
+
if (window.location.pathname == data.link) {
|
231
|
+
focusedOnChat = true;
|
232
|
+
} else if ($('#chat-window').length > 0) {
|
233
|
+
var urlSegments = data.link.split('/'),
|
234
|
+
id = parseInt(urlSegments[urlSegments.length - 1]),
|
235
|
+
currentId = parseInt($('#chat-window').attr('data-chat'));
|
236
|
+
focusedOnChat = (currentId == id);
|
237
|
+
}
|
238
|
+
|
239
|
+
// If user is already on the right page, we're not going to animate the
|
240
|
+
// notification.
|
241
|
+
if(focusedOnChat && data.is_chat) {
|
242
|
+
// Hit the notification's link so it can be marked as read.
|
243
|
+
$.get(data.link);
|
244
|
+
// Remove the unread icon.
|
245
|
+
$('.notification-list li > a > span.unread').first().remove();
|
246
|
+
} else {
|
247
|
+
// Update our unread notifications count
|
248
|
+
if($('#alert-icon').find('.notifications-flag').length == 0) {
|
249
|
+
$('#alert-icon').prepend('<span class="notifications-flag"></span>');
|
250
|
+
}
|
251
|
+
var unread = $('#notifications-list').attr('data-unread')
|
252
|
+
$('#alert-icon').find('.notifications-flag').text(unread);
|
253
|
+
|
254
|
+
// Play the notification sound unless user is connected to a chat
|
255
|
+
// channel
|
256
|
+
if(chat.subscribedToChannel == null || data.data.is_chat != true) {
|
257
|
+
$('#notification-sound')[0].play(); // make sure this is present in the view
|
258
|
+
}
|
259
|
+
}
|
260
|
+
});
|
261
|
+
}
|
262
|
+
});
|
263
|
+
}
|
264
|
+
}
|
265
|
+
```
|
266
|
+
|
267
|
+
Add a sound file to your view.
|
268
|
+
|
269
|
+
`application.html.erb`
|
270
|
+
```
|
271
|
+
<audio id="notification-sound" src="<%= audio_path('new-notification.mp3') %>" style="display:none;"></audio>
|
272
|
+
```
|
273
|
+
|
274
|
+
4. Setup a Notification Controller
|
275
|
+
|
276
|
+
This handles three things (three routes):
|
277
|
+
|
278
|
+
1. Rendering the dropdown menu of notifications.
|
279
|
+
2. Handle redirecting someone who views a notification. At the same time, marking the notification as read when viewing it.
|
280
|
+
3. Marking all notifications as unread.
|
281
|
+
|
282
|
+
```ruby
|
283
|
+
class NotificationsController < ApplicationController
|
284
|
+
|
285
|
+
def index
|
286
|
+
if request.xhr?
|
287
|
+
render :layout => false
|
288
|
+
else
|
289
|
+
redirect_to dashboard_path
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
def show
|
294
|
+
if current_user.notifications.find_by_id(params[:id]).nil?
|
295
|
+
not_found
|
296
|
+
else
|
297
|
+
@notification = current_user.notifications.find_by_id(params[:id])
|
298
|
+
@notification.read!
|
299
|
+
if @notification.trigger.nil?
|
300
|
+
@notification.destroy
|
301
|
+
redirect_to root_path, :alert => 'Could not locate notification link.'
|
302
|
+
else
|
303
|
+
redirect_to @notification.link, :only_path => true
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
def markread
|
309
|
+
current_user.notifications.unread.each { |notification| notification.read! }
|
310
|
+
redirect_to request.referrer || root_path
|
311
|
+
end
|
312
|
+
|
313
|
+
end
|
314
|
+
```
|
315
|
+
|
316
|
+
Set your routes:
|
317
|
+
|
318
|
+
```ruby
|
319
|
+
get 'notifications/markread', :as => 'markread_notifications'
|
320
|
+
get '/notifications' => "notifications#index", :as => :notifications
|
321
|
+
get '/notifications/:id' => "notifications#show", :as => :notification
|
322
|
+
|
323
|
+
```
|
324
|
+
|
325
|
+
View for rendering list of notifications in menu:
|
326
|
+
|
327
|
+
`views/notifications/index.html`
|
328
|
+
|
329
|
+
```erb
|
330
|
+
<div id="notifications-list" data-unread="<%= current_user.notifications.unread.count %>">
|
331
|
+
<%= render 'list' %>
|
332
|
+
</div>
|
333
|
+
```
|
334
|
+
|
335
|
+
`views/notifications/_list.html`
|
336
|
+
```erb
|
337
|
+
<ul class='notification-list'>
|
338
|
+
<% if current_user %>
|
339
|
+
<%= content_tag(:li, 'No Notifications') unless has_notifications? %>
|
340
|
+
|
341
|
+
<% recent_notifications.each do |n| %>
|
342
|
+
<li class="<%= 'unread' if n.unread? %>">
|
343
|
+
<%= link_to(notification_path(n)) do %>
|
344
|
+
<%= content_tag(:span, '', :class => 'icon unread') if n.unread? %>
|
345
|
+
<% if n.sender.present? && n.sender.avatar.present? %>
|
346
|
+
<%= render partial: "shared/avatar",
|
347
|
+
locals: { user: n.sender, size: "small" } %>
|
348
|
+
<% end %>
|
349
|
+
|
350
|
+
<span class='description'><%= n.description %></span>
|
351
|
+
|
352
|
+
<span class='when'><%= time_ago_in_words n.created_at %> ago.</span>
|
353
|
+
<% end %>
|
354
|
+
</li>
|
355
|
+
<% end %>
|
356
|
+
|
357
|
+
<% if unread_notifications.present? %>
|
358
|
+
<li class='mark-as-read-button'>
|
359
|
+
<a href='<%= markread_notifications_path %>' method='post'>
|
360
|
+
Mark all as read!
|
361
|
+
</a>
|
362
|
+
</li>
|
363
|
+
<% end %>
|
364
|
+
|
365
|
+
<% end %>
|
366
|
+
</ul>
|
367
|
+
```
|
368
|
+
|
369
|
+
(There is an assumption here about having an `avatar` property for the user's image.)
|
370
|
+
|
371
|
+
## Setup Your UI (Single Red Dot)
|
372
|
+
|
373
|
+
This part is very application specific.
|
374
|
+
|
375
|
+
If you are not displaying a list of past notifications, but maybe focusing just on one type of notification, say chat. You can place a red span with the number of unread chats inside of it.
|
376
|
+
|
377
|
+
Again this is very UI specific, but here is code and instructions to help.
|
378
|
+
|
379
|
+
1. Communicate to the UI what channel to listen to for notifications.
|
380
|
+
|
381
|
+
```erb
|
382
|
+
<body data-notifications="<%= "presence-#{Rails.env.to_s.downcase}-notification-#{current_user.id}" if user_signed_in? %>"
|
383
|
+
```
|
384
|
+
|
385
|
+
2. Setup notifications if we are logged in:
|
386
|
+
|
387
|
+
```erb
|
388
|
+
<% if user_signed_in? %>
|
389
|
+
<script>
|
390
|
+
$(document).on('ready', function(){
|
391
|
+
if(window.usePusher == true) {
|
392
|
+
initRealTimeNotifications();
|
393
|
+
}
|
394
|
+
});
|
395
|
+
</script>
|
396
|
+
<% end %>
|
397
|
+
```
|
398
|
+
|
399
|
+
3. Setup your Notification UI
|
400
|
+
|
401
|
+
This code will listen for new notifications (of type `new_notification` ;) ) from pusher. When it receives one, it will go back to the server
|
402
|
+
for the new dropdown menu list. It will also update the number of notifications shown in the red circle. (And display it if there were 0 unread before)
|
403
|
+
|
404
|
+
`notifications.js.erb`
|
405
|
+
|
406
|
+
```javascript
|
407
|
+
function initRealTimeNotifications() {
|
408
|
+
if(notifications.pusher == null) {
|
409
|
+
notifications.pusher = new Pusher('<%= Rails.application.secrets.pusher_key %>', {
|
410
|
+
encrypted: true
|
411
|
+
});
|
412
|
+
|
413
|
+
notifications.channelName = $('body').data('notifications');
|
414
|
+
|
415
|
+
notifications.channel = notifications.pusher.subscribe(notifications.channelName);
|
416
|
+
notifications.channel.bind('new_notification', function(data) {
|
417
|
+
|
418
|
+
// In case we've logged out since binding this event
|
419
|
+
if($('body').data('notifications') == notifications.channelName) {
|
420
|
+
|
421
|
+
var focusedAlready = false;
|
422
|
+
|
423
|
+
// If we are currently on the notification's object's page, don't show the UI
|
424
|
+
if (window.location.pathname == data.link) {
|
425
|
+
focusedAlready = true;
|
426
|
+
} else if ($('#chat-window').length > 0) {
|
427
|
+
var urlSegments = data.link.split('/'),
|
428
|
+
id = parseInt(urlSegments[urlSegments.length - 1]),
|
429
|
+
currentId = parseInt($('#chat-window').attr('data-chat'));
|
430
|
+
focusedAlready = (currentId == id);
|
431
|
+
}
|
432
|
+
|
433
|
+
// If user is already on the right page, we're not going to display the
|
434
|
+
// notification.
|
435
|
+
if(focusedAlready && data.is_chat) {
|
436
|
+
|
437
|
+
} else {
|
438
|
+
// Update our unread notifications count
|
439
|
+
if($('#alert-icon').find('.notifications-flag').length == 0) {
|
440
|
+
$('#alert-icon').prepend('<span class="notifications-flag"></span>');
|
441
|
+
}
|
442
|
+
$('#alert-icon').find('.notifications-flag').html("&bul;");
|
443
|
+
|
444
|
+
// Play the notification sound unless user is connected to a chat
|
445
|
+
// channel
|
446
|
+
if(chat.subscribedToChannel == null || data.data.is_chat != true) {
|
447
|
+
$('#notification-sound')[0].play();
|
448
|
+
}
|
449
|
+
}
|
450
|
+
|
451
|
+
}
|
452
|
+
});
|
453
|
+
}
|
454
|
+
}
|
455
|
+
```
|
456
|
+
|
457
|
+
Add a sound file to your view.
|
458
|
+
|
459
|
+
`application.html.erb`
|
460
|
+
```
|
461
|
+
<audio id="notification-sound" src="<%= audio_path('new-notification.mp3') %>" style="display:none;"></audio>
|
462
|
+
```
|
463
|
+
|
464
|
+
|
465
|
+
|
data/lib/notify_on/notify_on.rb
CHANGED
@@ -7,7 +7,7 @@ class << ActiveRecord::Base
|
|
7
7
|
([self] + self.descendants).each do |klass|
|
8
8
|
klass.class_eval do
|
9
9
|
has_many :notifications, -> { preloaded },
|
10
|
-
:class_name => NotifyOn::Notification, :as => :trigger,
|
10
|
+
:class_name => 'NotifyOn::Notification', :as => :trigger,
|
11
11
|
:dependent => :destroy
|
12
12
|
end
|
13
13
|
end
|
data/lib/notify_on/version.rb
CHANGED
@@ -18,7 +18,7 @@ class Message < ApplicationRecord
|
|
18
18
|
# ---------------------------------------- Associations
|
19
19
|
|
20
20
|
belongs_to :user
|
21
|
-
belongs_to :author, :class_name => User
|
21
|
+
belongs_to :author, :class_name => 'User'
|
22
22
|
|
23
23
|
# ---------------------------------------- Validations
|
24
24
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notify_on
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Wille
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-12-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: em-http-request
|
@@ -437,107 +437,107 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
437
437
|
version: '0'
|
438
438
|
requirements: []
|
439
439
|
rubyforge_project:
|
440
|
-
rubygems_version: 2.6.
|
440
|
+
rubygems_version: 2.6.14
|
441
441
|
signing_key:
|
442
442
|
specification_version: 4
|
443
443
|
summary: Declaritive Notifications for Rails apps.
|
444
444
|
test_files:
|
445
|
-
- spec/
|
446
|
-
- spec/dummy/app/assets/javascripts/application.js
|
447
|
-
- spec/dummy/app/assets/javascripts/cable.js
|
448
|
-
- spec/dummy/app/assets/stylesheets/application.scss
|
449
|
-
- spec/dummy/app/channels/application_cable/channel.rb
|
450
|
-
- spec/dummy/app/channels/application_cable/connection.rb
|
451
|
-
- spec/dummy/app/controllers/application_controller.rb
|
452
|
-
- spec/dummy/app/controllers/messages_controller.rb
|
453
|
-
- spec/dummy/app/helpers/application_helper.rb
|
454
|
-
- spec/dummy/app/jobs/application_job.rb
|
455
|
-
- spec/dummy/app/mailers/application_mailer.rb
|
445
|
+
- spec/spec_helper.rb
|
456
446
|
- spec/dummy/app/mailers/notification_mailer.rb
|
457
|
-
- spec/dummy/app/
|
458
|
-
- spec/dummy/app/models/comment.rb
|
447
|
+
- spec/dummy/app/mailers/application_mailer.rb
|
459
448
|
- spec/dummy/app/models/message.rb
|
449
|
+
- spec/dummy/app/models/comment.rb
|
450
|
+
- spec/dummy/app/models/application_record.rb
|
460
451
|
- spec/dummy/app/models/post.rb
|
461
452
|
- spec/dummy/app/models/user.rb
|
462
|
-
- spec/dummy/app/
|
463
|
-
- spec/dummy/app/
|
453
|
+
- spec/dummy/app/jobs/application_job.rb
|
454
|
+
- spec/dummy/app/controllers/messages_controller.rb
|
455
|
+
- spec/dummy/app/controllers/application_controller.rb
|
456
|
+
- spec/dummy/app/views/messages/index.html.erb
|
457
|
+
- spec/dummy/app/views/messages/_message.html.erb
|
458
|
+
- spec/dummy/app/views/messages/show.html.erb
|
459
|
+
- spec/dummy/app/views/messages/new.html.erb
|
464
460
|
- spec/dummy/app/views/layouts/application.html.erb
|
465
461
|
- spec/dummy/app/views/layouts/mailer.html.erb
|
466
462
|
- spec/dummy/app/views/layouts/mailer.text.erb
|
467
|
-
- spec/dummy/app/views/
|
468
|
-
- spec/dummy/app/views/
|
469
|
-
- spec/dummy/app/views/messages/new.html.erb
|
470
|
-
- spec/dummy/app/views/messages/show.html.erb
|
463
|
+
- spec/dummy/app/views/application/_header.html.erb
|
464
|
+
- spec/dummy/app/views/application/home.html.erb
|
471
465
|
- spec/dummy/app/views/notifications/new_message.html.erb
|
472
|
-
- spec/dummy/
|
473
|
-
- spec/dummy/
|
466
|
+
- spec/dummy/app/assets/config/manifest.js
|
467
|
+
- spec/dummy/app/assets/javascripts/cable.js
|
468
|
+
- spec/dummy/app/assets/javascripts/application.js
|
469
|
+
- spec/dummy/app/assets/stylesheets/application.scss
|
470
|
+
- spec/dummy/app/helpers/application_helper.rb
|
471
|
+
- spec/dummy/app/channels/application_cable/connection.rb
|
472
|
+
- spec/dummy/app/channels/application_cable/channel.rb
|
473
|
+
- spec/dummy/bin/update
|
474
474
|
- spec/dummy/bin/rake
|
475
475
|
- spec/dummy/bin/setup
|
476
|
-
- spec/dummy/bin/
|
477
|
-
- spec/dummy/
|
478
|
-
- spec/dummy/config/
|
476
|
+
- spec/dummy/bin/bundle
|
477
|
+
- spec/dummy/bin/rails
|
478
|
+
- spec/dummy/config/secrets.yml
|
479
|
+
- spec/dummy/config/routes.rb
|
480
|
+
- spec/dummy/config/locales/en.yml
|
481
|
+
- spec/dummy/config/locales/devise.en.yml
|
482
|
+
- spec/dummy/config/locales/simple_form.en.yml
|
479
483
|
- spec/dummy/config/cable.yml
|
480
|
-
- spec/dummy/config/database.yml
|
481
|
-
- spec/dummy/config/environment.rb
|
482
|
-
- spec/dummy/config/environments/development.rb
|
483
484
|
- spec/dummy/config/environments/production.rb
|
485
|
+
- spec/dummy/config/environments/development.rb
|
484
486
|
- spec/dummy/config/environments/test.rb
|
487
|
+
- spec/dummy/config/spring.rb
|
488
|
+
- spec/dummy/config/environment.rb
|
489
|
+
- spec/dummy/config/notifications.yml
|
490
|
+
- spec/dummy/config/application.rb
|
491
|
+
- spec/dummy/config/puma.rb
|
492
|
+
- spec/dummy/config/database.yml
|
493
|
+
- spec/dummy/config/boot.rb
|
485
494
|
- spec/dummy/config/initializers/application_controller_renderer.rb
|
486
|
-
- spec/dummy/config/initializers/assets.rb
|
487
495
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
488
|
-
- spec/dummy/config/initializers/cookies_serializer.rb
|
489
|
-
- spec/dummy/config/initializers/devise.rb
|
490
|
-
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
491
|
-
- spec/dummy/config/initializers/inflections.rb
|
492
496
|
- spec/dummy/config/initializers/mime_types.rb
|
497
|
+
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
498
|
+
- spec/dummy/config/initializers/session_store.rb
|
499
|
+
- spec/dummy/config/initializers/wrap_parameters.rb
|
493
500
|
- spec/dummy/config/initializers/new_framework_defaults.rb
|
501
|
+
- spec/dummy/config/initializers/assets.rb
|
494
502
|
- spec/dummy/config/initializers/notify_on.rb
|
495
|
-
- spec/dummy/config/initializers/
|
496
|
-
- spec/dummy/config/initializers/
|
503
|
+
- spec/dummy/config/initializers/cookies_serializer.rb
|
504
|
+
- spec/dummy/config/initializers/devise.rb
|
497
505
|
- spec/dummy/config/initializers/simple_form_bootstrap.rb
|
498
|
-
- spec/dummy/config/initializers/
|
499
|
-
- spec/dummy/config/
|
500
|
-
- spec/dummy/config/locales/en.yml
|
501
|
-
- spec/dummy/config/locales/simple_form.en.yml
|
502
|
-
- spec/dummy/config/notifications.yml
|
503
|
-
- spec/dummy/config/puma.rb
|
504
|
-
- spec/dummy/config/routes.rb
|
505
|
-
- spec/dummy/config/secrets.yml
|
506
|
-
- spec/dummy/config/spring.rb
|
506
|
+
- spec/dummy/config/initializers/simple_form.rb
|
507
|
+
- spec/dummy/config/initializers/inflections.rb
|
507
508
|
- spec/dummy/config.ru
|
508
|
-
- spec/dummy/db/migrate/20160801112429_devise_create_users.rb
|
509
|
-
- spec/dummy/db/migrate/20160801130804_create_messages.rb
|
510
|
-
- spec/dummy/db/migrate/20160823102904_create_notify_on_notifications.rb
|
511
|
-
- spec/dummy/db/migrate/20161021100707_create_comments.rb
|
512
|
-
- spec/dummy/db/migrate/20161021100842_create_posts.rb
|
513
|
-
- spec/dummy/db/schema.rb
|
514
|
-
- spec/dummy/db/seeds.rb
|
515
|
-
- spec/dummy/lib/templates/erb/scaffold/_form.html.erb
|
516
|
-
- spec/dummy/public/404.html
|
517
|
-
- spec/dummy/public/422.html
|
518
|
-
- spec/dummy/public/500.html
|
519
|
-
- spec/dummy/public/apple-touch-icon-precomposed.png
|
520
|
-
- spec/dummy/public/apple-touch-icon.png
|
521
|
-
- spec/dummy/public/favicon.ico
|
522
|
-
- spec/dummy/Rakefile
|
523
|
-
- spec/dummy/spec/controllers/messages_controller_spec.rb
|
524
|
-
- spec/dummy/spec/factories/comments.rb
|
525
|
-
- spec/dummy/spec/factories/messages.rb
|
526
|
-
- spec/dummy/spec/factories/posts.rb
|
527
|
-
- spec/dummy/spec/factories/users.rb
|
528
|
-
- spec/dummy/spec/features/send_message_spec.rb
|
529
509
|
- spec/dummy/spec/mailers/notify_on/notification_mailer_spec.rb
|
530
510
|
- spec/dummy/spec/mailers/previews/notification_mailer_preview.rb
|
531
|
-
- spec/dummy/spec/
|
532
|
-
- spec/dummy/spec/models/message_spec.rb
|
511
|
+
- spec/dummy/spec/features/send_message_spec.rb
|
533
512
|
- spec/dummy/spec/models/post_spec.rb
|
513
|
+
- spec/dummy/spec/models/message_spec.rb
|
514
|
+
- spec/dummy/spec/models/comment_spec.rb
|
534
515
|
- spec/dummy/spec/models/user_spec.rb
|
535
|
-
- spec/factories/
|
536
|
-
- spec/
|
516
|
+
- spec/dummy/spec/factories/comments.rb
|
517
|
+
- spec/dummy/spec/factories/messages.rb
|
518
|
+
- spec/dummy/spec/factories/posts.rb
|
519
|
+
- spec/dummy/spec/factories/users.rb
|
520
|
+
- spec/dummy/spec/controllers/messages_controller_spec.rb
|
521
|
+
- spec/dummy/Rakefile
|
522
|
+
- spec/dummy/public/favicon.ico
|
523
|
+
- spec/dummy/public/422.html
|
524
|
+
- spec/dummy/public/apple-touch-icon.png
|
525
|
+
- spec/dummy/public/500.html
|
526
|
+
- spec/dummy/public/404.html
|
527
|
+
- spec/dummy/public/apple-touch-icon-precomposed.png
|
528
|
+
- spec/dummy/lib/templates/erb/scaffold/_form.html.erb
|
529
|
+
- spec/dummy/db/schema.rb
|
530
|
+
- spec/dummy/db/seeds.rb
|
531
|
+
- spec/dummy/db/migrate/20161021100707_create_comments.rb
|
532
|
+
- spec/dummy/db/migrate/20160801112429_devise_create_users.rb
|
533
|
+
- spec/dummy/db/migrate/20160823102904_create_notify_on_notifications.rb
|
534
|
+
- spec/dummy/db/migrate/20160801130804_create_messages.rb
|
535
|
+
- spec/dummy/db/migrate/20161021100842_create_posts.rb
|
537
536
|
- spec/mailers/notify_on/notification_mailer_spec.rb
|
538
537
|
- spec/mailers/previews/notify_on/notification_mailer_preview.rb
|
539
538
|
- spec/models/notify_on/notification_spec.rb
|
540
|
-
- spec/rails_helper.rb
|
541
|
-
- spec/spec_helper.rb
|
542
|
-
- spec/support/feature_helpers.rb
|
543
539
|
- spec/support/general_helpers.rb
|
540
|
+
- spec/support/feature_helpers.rb
|
541
|
+
- spec/factories/notify_on_notifications.rb
|
542
|
+
- spec/lib/notify_on/configuration_spec.rb
|
543
|
+
- spec/rails_helper.rb
|