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 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