notify_on 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 522b65290d13dbc3fcde080221b2e3ab63dd8567
4
- data.tar.gz: c88fa1da0714593511218f5159679ccf9e223421
3
+ metadata.gz: 21468ef5fcb1a7687544f3b74fa2d2cdd8b28069
4
+ data.tar.gz: 8e7d964ffdcaf8394462b74044da7f77fc96a6b4
5
5
  SHA512:
6
- metadata.gz: 9f50b96b159f20bbe1165013bc1337ec409078adaf2ba1081cd79f86d7a09036f7fb123698f1671a0bd566b736507f350721d5d9d0dd9258e985da423dd57e85
7
- data.tar.gz: 309847d668e04e6d0485228be4a39d738030d30e36ff6996cde96c043b1e45390018682f8d49490b7adf85f0b834a747f41760144373acc3a483cc598bdbc1b3
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
+ ![Notification List](notification-list.png)
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
+ &nbsp;
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
+
@@ -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
@@ -3,7 +3,7 @@ class << ActiveRecord::Base
3
3
  def receives_notifications
4
4
 
5
5
  has_many :notifications, -> { preloaded },
6
- :class_name => NotifyOn::Notification, :as => :recipient,
6
+ :class_name => 'NotifyOn::Notification', :as => :recipient,
7
7
  :dependent => :destroy
8
8
 
9
9
  end
@@ -1,3 +1,3 @@
1
1
  module NotifyOn
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
@@ -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
 
@@ -2,7 +2,7 @@ class Post < ApplicationRecord
2
2
 
3
3
  # ---------------------------------------- Associations
4
4
 
5
- belongs_to :author, :class_name => User
5
+ belongs_to :author, :class_name => 'User'
6
6
 
7
7
  # ---------------------------------------- Attributes
8
8
 
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.1
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-10-19 00:00:00.000000000 Z
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.13
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/dummy/app/assets/config/manifest.js
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/models/application_record.rb
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/views/application/_header.html.erb
463
- - spec/dummy/app/views/application/home.html.erb
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/messages/_message.html.erb
468
- - spec/dummy/app/views/messages/index.html.erb
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/bin/bundle
473
- - spec/dummy/bin/rails
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/update
477
- - spec/dummy/config/application.rb
478
- - spec/dummy/config/boot.rb
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/session_store.rb
496
- - spec/dummy/config/initializers/simple_form.rb
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/wrap_parameters.rb
499
- - spec/dummy/config/locales/devise.en.yml
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/models/comment_spec.rb
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/notify_on_notifications.rb
536
- - spec/lib/notify_on/configuration_spec.rb
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