notification-renderer 1.2.3 → 1.2.4
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 +55 -11
- data/app/helpers/notification_renderer_helper.rb +44 -9
- data/lib/notification_renderer/notification_library.rb +28 -9
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 712f319a90e8085272bd6e7e2064a1b1f5e736a9235703640ccc9f7dcad23335
|
4
|
+
data.tar.gz: fff7dc09ad9e69bfc29ccdf8c85a6fb60dae9c18dbfc6d82ee84648ea44c4beb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84df50521bd7d113bd023ac9b1f58603f87ae0c2378d89e7250742043fb8506cc593acf030ecd287dac39bf0b5500b25c502b0349f4991fb8aba9a2b7646cac1
|
7
|
+
data.tar.gz: e52ea677458828dcd1fb9d0a812e2b6d10fc7e5ba166f41afbb588f82937b4d5c467bd57f8eccd74bc8745a8ee99db04c63f04c5ae015f76c2f5e533fb545641
|
data/README.md
CHANGED
@@ -18,6 +18,8 @@ Render your notifications on multiple platforms by specifying notification types
|
|
18
18
|
* [`render_notification`](#render_notification)
|
19
19
|
* [`render_notifications`](#render_notifications)
|
20
20
|
* [Grouping](#grouping)
|
21
|
+
* [Grouping by notification types](#grouping-by-notification-types)
|
22
|
+
* [Grouping by notification dates](#grouping-by-notification-dates)
|
21
23
|
* [Configuration](#configuration)
|
22
24
|
* [To Do](#to-do)
|
23
25
|
* [Contributing](#contributing)
|
@@ -167,27 +169,29 @@ It wraps the rendered notifications in a `div`:
|
|
167
169
|
You can group any ActiveRecord array of `Notification` records by an attribute value:
|
168
170
|
|
169
171
|
```ruby
|
170
|
-
Notification.grouping('object.article')
|
171
|
-
Notification.grouping('metadata[:title]')
|
172
|
+
Notification.all.grouping(['object.article'])
|
173
|
+
Notification.all.grouping(['object.article', 'metadata[:title]'])
|
172
174
|
```
|
173
175
|
|
176
|
+
**Note:** Notifications will be grouped in order.
|
177
|
+
|
174
178
|
When rendering notifications you often want to group them by the object they belong to. This is how to group notifications by the associated object:
|
175
179
|
|
176
180
|
```erb
|
177
|
-
<%= render_notifications_grouped Notification.all, 'object', 'feed' %>
|
181
|
+
<%= render_notifications_grouped Notification.all, ['object'], renderer: 'feed' %>
|
178
182
|
```
|
179
183
|
|
180
184
|
You can also group notifications by nested attributes:
|
181
185
|
|
182
186
|
```erb
|
183
|
-
<%= render_notifications_grouped Notification.all, 'object.article' %>
|
184
|
-
<%= render_notifications_grouped Notification.all, 'metadata[:title]' %>
|
187
|
+
<%= render_notifications_grouped Notification.all, ['object.article'] %>
|
188
|
+
<%= render_notifications_grouped Notification.all, ['metadata[:title]'] %>
|
185
189
|
```
|
186
190
|
|
187
191
|
It is also possible to group notifications for just one object:
|
188
192
|
|
189
193
|
```erb
|
190
|
-
<%= render_notifications_grouped Notification.where(object_id: 1, object_type: 'Comment'), 'object' %>
|
194
|
+
<%= render_notifications_grouped Notification.where(object_id: 1, object_type: 'Comment'), ['object'] %>
|
191
195
|
```
|
192
196
|
|
193
197
|
This will render the last notification for every group and pass the attributes value grouped by to your renderer:
|
@@ -195,13 +199,14 @@ This will render the last notification for every group and pass the attributes v
|
|
195
199
|
```erb
|
196
200
|
<!-- View -->
|
197
201
|
|
198
|
-
<%= render_notifications_grouped Notification.
|
199
|
-
|
202
|
+
<%= render_notifications_grouped Notification.notification_type, ['object.article'] %>
|
203
|
+
```
|
200
204
|
|
205
|
+
```erb
|
201
206
|
<!-- Renderer -->
|
202
207
|
|
203
208
|
<% if notification_grouped? %>
|
204
|
-
<%= notification.target.name %> and <%= (
|
209
|
+
<%= notification.target.name %> and <%= (notifications.count - 1).to_s %> others commented on <%= attributes['object.article'].title %>.
|
205
210
|
<% else %>
|
206
211
|
<%= notification.target.name %> commented on <%= notification.object.article.title %>.
|
207
212
|
<% end %>
|
@@ -209,12 +214,51 @@ This will render the last notification for every group and pass the attributes v
|
|
209
214
|
|
210
215
|
Grouping makes the following two methods available in your renderer:
|
211
216
|
|
212
|
-
**`
|
217
|
+
**`attributes`** Hash of attributes grouped by and their values.
|
213
218
|
|
214
|
-
**`
|
219
|
+
**`notifications`** The ActiveRecord array of notifications including the currently rendered notification.
|
215
220
|
|
216
221
|
You may check whether a template is being used for grouping by using the `notification_grouped?` helper method.
|
217
222
|
|
223
|
+
#### Grouping by notification types
|
224
|
+
|
225
|
+
It is common, if rendering multiple notification types at once, to group the notifications by their type:
|
226
|
+
|
227
|
+
```erb
|
228
|
+
<%= render_notifications_grouped Notification.all, ['object.article'], group_by_type: true %>
|
229
|
+
```
|
230
|
+
|
231
|
+
This is identical to the following:
|
232
|
+
|
233
|
+
```erb
|
234
|
+
<%= render_notifications_grouped Notification.all, [:type, 'object.article'] %>
|
235
|
+
```
|
236
|
+
|
237
|
+
#### Grouping by notification dates
|
238
|
+
|
239
|
+
It is also often required to group notifications by their date of creation:
|
240
|
+
|
241
|
+
```erb
|
242
|
+
<%= render_notifications_grouped Notification.all, ['object.article'], group_by_date: :month %>
|
243
|
+
```
|
244
|
+
|
245
|
+
This is identical to the following:
|
246
|
+
|
247
|
+
```erb
|
248
|
+
<%= render_notifications_grouped Notification.all, ['created_at.beginning_of_month', 'object.article'] %>
|
249
|
+
```
|
250
|
+
|
251
|
+
Accepted values are:
|
252
|
+
|
253
|
+
* `:minute`
|
254
|
+
* `:hour`
|
255
|
+
* `:day`
|
256
|
+
* `:week`
|
257
|
+
* `:month`
|
258
|
+
* `:year`
|
259
|
+
|
260
|
+
**Note:** If used together with `group_by_type`, notifications will be grouped first by creation date and then by `:type`.
|
261
|
+
|
218
262
|
---
|
219
263
|
|
220
264
|
## Configuration
|
@@ -1,28 +1,63 @@
|
|
1
1
|
module NotificationRendererHelper
|
2
2
|
|
3
|
-
def render_notification notification,
|
3
|
+
def render_notification notification, options = {}
|
4
|
+
defaults = {
|
5
|
+
renderer: NotificationRenderer.configuration.default_renderer,
|
6
|
+
attributes: nil,
|
7
|
+
notifications: nil
|
8
|
+
}
|
9
|
+
options = defaults.merge options
|
10
|
+
|
4
11
|
notification.update_attributes read: true if NotificationRenderer.configuration.auto_read
|
5
|
-
render "notifications/#{notification.type}/#{renderer}", notification: notification,
|
12
|
+
render "notifications/#{notification.type}/#{options[:renderer]}", notification: notification, attributes: options[:attributes], notifications: options[:notifications]
|
6
13
|
end
|
7
14
|
|
8
|
-
def render_notifications notifications,
|
15
|
+
def render_notifications notifications, options = {}
|
16
|
+
defaults = {
|
17
|
+
renderer: NotificationRenderer.configuration.default_renderer
|
18
|
+
}
|
19
|
+
options = defaults.merge options
|
20
|
+
|
9
21
|
content_tag :div, class: 'notification-renderer notifications' do
|
10
22
|
notifications.each do |notification|
|
11
|
-
render_notification notification, renderer
|
23
|
+
render_notification notification, renderer: options[:renderer]
|
12
24
|
end
|
13
25
|
end
|
14
26
|
end
|
15
27
|
|
16
|
-
def render_notifications_grouped notifications, group_by,
|
28
|
+
def render_notifications_grouped notifications, group_by, options = {}
|
29
|
+
defaults = {
|
30
|
+
renderer: NotificationRenderer.configuration.default_renderer,
|
31
|
+
group_by_date: false,
|
32
|
+
group_by_type: false
|
33
|
+
}
|
34
|
+
options = defaults.merge options
|
35
|
+
|
36
|
+
group_by.unshift :type if options[:group_by_type]
|
37
|
+
group_by.unshift "created_at.beginning_of_#{options[:group_by_date]}" if options[:group_by_date]
|
38
|
+
|
17
39
|
content_tag :div, class: 'notification-renderer notifications' do
|
18
|
-
notifications.grouping(group_by)
|
19
|
-
render_notification notifications.last, renderer, attribute, notifications.count
|
20
|
-
end
|
40
|
+
recursive_render_notifications_grouped notifications.grouping(options[:group_by]), options
|
21
41
|
end
|
22
42
|
end
|
23
43
|
|
24
44
|
def notification_grouped?
|
25
|
-
local_assigns[:
|
45
|
+
local_assigns[:attributes] && local_assigns[:notifications]
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def recursive_render_notifications_grouped notifications, i = 0, options = {}
|
51
|
+
options[:attributes] = {} unless options.has_key? :attributes
|
52
|
+
notifications.each_pair do |k, v|
|
53
|
+
options[:attributes][options[:group_by][i]] = k
|
54
|
+
i += 1
|
55
|
+
if v.is_a? Hash
|
56
|
+
recursive_render_notifications_grouped v, options
|
57
|
+
else
|
58
|
+
render_notification v.last, renderer: options[:renderer], attributes: options[:attributes], notifications: v
|
59
|
+
end
|
60
|
+
end
|
26
61
|
end
|
27
62
|
|
28
63
|
end
|
@@ -6,21 +6,40 @@ module NotificationRenderer
|
|
6
6
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
module ClassMethods
|
10
|
+
|
11
|
+
def grouping group_by
|
12
|
+
notifications = all
|
13
|
+
group_by.each do |method|
|
14
|
+
notifications = recursive_grouping notifications, method
|
15
|
+
end
|
16
|
+
notifications
|
17
|
+
end
|
14
18
|
|
15
|
-
def
|
16
|
-
group_by{ |notification| notification.send(group_by) }
|
19
|
+
def grouping_by group_by
|
20
|
+
all.group_by{ |notification| notification.send(group_by) }
|
17
21
|
end
|
18
22
|
|
19
|
-
def
|
20
|
-
|
23
|
+
def recursive_grouping notifications, group_by
|
24
|
+
if notifications.is_a? Hash
|
25
|
+
notifications.each_pair do |k, v|
|
26
|
+
if v.is_a? Hash
|
27
|
+
recursive_grouping v, group_by
|
28
|
+
else
|
29
|
+
k = v.grouping_by group_by
|
30
|
+
end
|
31
|
+
end
|
32
|
+
else
|
33
|
+
notifications.grouping_by group_by
|
34
|
+
end
|
35
|
+
notifications
|
21
36
|
end
|
22
37
|
|
23
38
|
end
|
24
39
|
|
40
|
+
def type
|
41
|
+
self[:type] || NotificationRenderer.configuration.default_type
|
42
|
+
end
|
43
|
+
|
25
44
|
end
|
26
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notification-renderer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Hübotter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.2.
|
61
|
+
version: 1.2.4
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.2.
|
68
|
+
version: 1.2.4
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|