notification-renderer 3.0.2 → 3.0.3

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
  SHA256:
3
- metadata.gz: 45d08ece9c88b27c6b02817df0bb024c67d2dbfa25abc47670cd40abf627b5a7
4
- data.tar.gz: dfe4f0c9f612eb33c2a6b98dd7b9b245c013d1a26b2ae2de0a0ce56b132aa0d4
3
+ metadata.gz: 36bf41fe2085e87d8719b4bf164cfd9620b65a048f3c784274f912abafb86853
4
+ data.tar.gz: cf6006fb927acdea8edaf91fc3b0c1c65efc9d60b3ac24cb643f0b4e23a5af3b
5
5
  SHA512:
6
- metadata.gz: 4931d21f3a3d7091ff47e2dcc611a4cffbdca56b32c9cf29faa2e595a69db2650cab3abf621a9add609ab83698c6bd8e006421dfa4bf8134919f7df90163af17
7
- data.tar.gz: 44d5130d0b8bd97ba289239d2ed1d09f388da6961d901531b7f07f4ca421620efcbf05c8c20c0672f5b1aaa7db338a577c8f1003cd5fcd294546879323f962ec
6
+ metadata.gz: 3b91805d98abf2485e2d41548196f1aa7244d627b238a4935833b6a0365ed7625062fd0752c6892f9b5bfe14af73c6c688735c1690182016bccc3c4003c6e998
7
+ data.tar.gz: c0d168c97b8570c04a56c8bc6e8a47aecff54ca051c47da3472128251aec578aee32387c1136076043d6bdff42a509dbac87a3875e7b6f10c185e258165082d4
data/README.md CHANGED
@@ -1,290 +1,84 @@
1
- # NotificationRenderer
1
+ # notifications-rails
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/notification-renderer.svg)](https://badge.fury.io/rb/notification-renderer) ![Travis](https://travis-ci.com/jonhue/notifications-rails.svg?branch=master)
3
+ notifications-rails is the most powerful notification library for Rails. It offers not only simple APIs to create and render notifications but also supports user-integration and cross-platform delivery of notifications.
4
4
 
5
- Render your notifications on multiple platforms by specifying notification types.
5
+ ## Philosophy
6
6
 
7
- ---
7
+ notifications-rails has been built with modularity in mind. It currently consists of four components each of which bringing one essential functionality to the integration of notifications in your Rails app.
8
8
 
9
- ## Table of Contents
9
+ **[notification-handler](notification-handler):** Create and modify your notifications through a simple API.
10
10
 
11
- * [Installation](#installation)
12
- * [Usage](#usage)
13
- * [Types](#types)
14
- * [Generating a new type](#generating-a-new-type)
15
- * [Using a type](#using-a-type)
16
- * [Renderers](#renderers)
17
- * [View helpers](#view-helpers)
18
- * [`render_notification`](#render_notification)
19
- * [`render_notifications`](#render_notifications)
20
- * [Grouping](#grouping)
21
- * [Grouping by notification types](#grouping-by-notification-types)
22
- * [Grouping by notification dates](#grouping-by-notification-dates)
23
- * [Configuration](#configuration)
24
- * [To Do](#to-do)
25
- * [Contributing](#contributing)
26
- * [Semantic versioning](#semantic-versioning)
11
+ **[notification-renderer](notification-renderer):** Render your notifications in various contexts.
27
12
 
28
- ---
13
+ **[notification-pusher](notification-pusher):** Deliver your notifications to various services, including [Email](notification-pusher/notification-pusher-actionmailer) and [OneSignal](notification-pusher/notification-pusher-onesignal).
29
14
 
30
- ## Installation
31
-
32
- NotificationRenderer works with Rails 5 onwards. You can add it to your `Gemfile` with:
33
-
34
- ```ruby
35
- gem 'notification-renderer'
36
- ```
37
-
38
- And then execute:
39
-
40
- $ bundle
41
-
42
- Or install it yourself as:
43
-
44
- $ gem install notification-renderer
45
-
46
- Now run the generator:
47
-
48
- $ rails g notification_renderer:install
49
-
50
- To wrap things up, migrate the changes to your database:
51
-
52
- $ rails db:migrate
53
-
54
- ---
55
-
56
- ## Usage
57
-
58
- ### Types
59
-
60
- NotificationRenderer uses templates to render your notifications.
61
-
62
- The `type` of a notification determines which template gets utilized for rendering. Each notification type has multiple templates each of which responsible for rendering a notification in another scenario. The default template for a given type is `index`.
63
-
64
- #### Generating a new type
65
-
66
- This gem comes with a generator to make adding new types a whole lot easier. Run in your terminal:
67
-
68
- $ rails g notification_renderer:type -t notification
69
-
70
- This will create the following structure in your application:
71
-
72
- * `views`
73
- * `notifications`
74
- * `notification`
75
- * `_index.html.erb`
15
+ **[notification-settings](notification-settings):** Integrates with your authentication solution to craft a personalized user notification platform.
76
16
 
77
- You can also customize the generated templates (renderers):
17
+ You may just use the components you actually need, or instead use this gem to bundle everything for a complete notification solution.
78
18
 
79
- $ rails g notification_renderer:type -t notification -r index feed
80
-
81
- This command will also create a custom renderer called `feed` for the notification type `notification`:
82
-
83
- * `views`
84
- * `notifications`
85
- * `notification`
86
- * `_feed.html.erb`
87
- * `_index.html.erb`
88
-
89
- #### Using a type
90
-
91
- You are able to specify the `type` of a `Notification` record:
92
-
93
- ```ruby
94
- notification = Notification.create(target: User.first, object: Recipe.first, type: 'notification')
95
- ```
96
-
97
- **Note:** The `type` attribute of any new `Notification` record will default to the [`default_type` configuration](#configuration).
19
+ ## Installation
98
20
 
99
- You can also scope records by their type:
21
+ You can add notifications-rails to your `Gemfile` with:
100
22
 
101
23
  ```ruby
102
- # Return records with `'notification'` as type
103
- Notification.notification_type
104
-
105
- # Return records with `'follow'` as type
106
- Notification.follow_type
107
- ```
108
-
109
- ### Renderers
110
-
111
- In your renderers you can access the `Notification` record through the `notification` variable. This is how a renderer could look like:
112
-
113
- ```erb
114
- <%= notification.target.name %> commented on <%= notification.object.article.title %>.
115
- ```
116
-
117
- ### View helpers
118
-
119
- NotificationRenderer introduces some view helpers to assist you in embedding notifications.
120
-
121
- #### `render_notification`
122
-
123
- `render_notification` renders a single `Notification` record:
124
-
125
- ```erb
126
- <%= render_notification Notification.first %>
127
- ```
128
-
129
- Rendering a notification will set its `read` attribute to `true`. This behavior can be [configured](#configuration).
130
-
131
- You can also specify a renderer. It defaults to `'index'`.
132
-
133
- ```erb
134
- <%= render_notification Notification.first, 'feed' %>
24
+ gem 'notifications-rails'
135
25
  ```
136
26
 
137
- #### `render_notifications`
27
+ And then run:
138
28
 
139
- `render_notifications` takes an ActiveRecord array of `Notification` records and renders each of them in order:
29
+ $ bundle install
140
30
 
141
- ```erb
142
- <%= render_notifications Notification.all %>
143
- ```
144
-
145
- You can also specify a renderer. It defaults to `'index'`.
146
-
147
- ```erb
148
- <%= render_notifications Notification.all, 'feed' %>
149
- ```
150
-
151
- It wraps the rendered notifications in a `div`:
152
-
153
- ```html
154
- <div class="notification-renderer notifications">
155
- <!-- ... -->
156
- </div>
157
- ```
31
+ Or install it yourself as:
158
32
 
159
- ### Grouping
33
+ $ gem install notifications-rails
160
34
 
161
- You can group any ActiveRecord array of `Notification` records by an attribute value:
35
+ If you always want to be up to date fetch the latest from GitHub in your `Gemfile`:
162
36
 
163
37
  ```ruby
164
- Notification.all.grouping(['object.article'])
165
- Notification.all.grouping(['object.article', 'metadata[:title]'])
166
- ```
167
-
168
- **Note:** Notifications will be grouped in order.
169
-
170
- 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:
171
-
172
- ```erb
173
- <%= render_notifications_grouped Notification.all, ['object'], renderer: 'feed' %>
174
- ```
175
-
176
- You can also group notifications by nested attributes:
177
-
178
- ```erb
179
- <%= render_notifications_grouped Notification.all, ['object.article'] %>
180
- <%= render_notifications_grouped Notification.all, ['metadata[:title]'] %>
181
- ```
182
-
183
- It is also possible to group notifications for just one object:
184
-
185
- ```erb
186
- <%= render_notifications_grouped Notification.where(object_id: 1, object_type: 'Comment'), ['object'] %>
187
- ```
188
-
189
- This will render the last notification for every group and pass the attributes value grouped by to your renderer:
190
-
191
- ```erb
192
- <!-- View -->
193
-
194
- <%= render_notifications_grouped Notification.notification_type, ['object.article'] %>
195
- ```
196
-
197
- ```erb
198
- <!-- Renderer -->
199
-
200
- <% if notification_grouped? %>
201
- <%= notification.target.name %> and <%= (notifications.size - 1).to_s %> others commented on <%= attributes['object.article'].title %>.
202
- <% else %>
203
- <%= notification.target.name %> commented on <%= notification.object.article.title %>.
204
- <% end %>
205
- ```
206
-
207
- Grouping makes the following two methods available in your renderer:
208
-
209
- **`attributes`** Hash of attributes grouped by and their values.
210
-
211
- **`notifications`** The ActiveRecord array of notifications including the currently rendered notification.
212
-
213
- You may check whether a template is being used for grouping by using the `notification_grouped?` helper method.
214
-
215
- #### Grouping by notification types
216
-
217
- It is common, if rendering multiple notification types at once, to group the notifications by their type:
218
-
219
- ```erb
220
- <%= render_notifications_grouped Notification.all, ['object.article'], group_by_type: true %>
221
- ```
222
-
223
- This is identical to the following:
224
-
225
- ```erb
226
- <%= render_notifications_grouped Notification.all, [:type, 'object.article'] %>
38
+ gem 'notifications-rails', github: 'jonhue/notifications-rails'
227
39
  ```
228
40
 
229
- #### Grouping by notification dates
230
-
231
- It is also often required to group notifications by their date of creation:
232
-
233
- ```erb
234
- <%= render_notifications_grouped Notification.all, ['object.article'], group_by_date: :month %>
235
- ```
236
-
237
- This is identical to the following:
238
-
239
- ```erb
240
- <%= render_notifications_grouped Notification.all, ['created_at.beginning_of_month', 'object.article'] %>
241
- ```
242
-
243
- Accepted values are:
41
+ ## Usage
244
42
 
245
- * `:minute`
246
- * `:hour`
247
- * `:day`
248
- * `:week`
249
- * `:month`
250
- * `:year`
43
+ Details on usage are provided in the [documentation](#philosophy) of the specific modules.
251
44
 
252
- **Note:** If used together with `group_by_type`, notifications will be grouped first by creation date and then by `:type`.
45
+ ## Development
253
46
 
254
- ---
47
+ To start development you first have to fork this repository and locally clone your fork.
255
48
 
256
- ## Configuration
49
+ Install the projects dependencies by running:
257
50
 
258
- You can configure NotificationRenderer by passing a block to `configure`. This can be done in `config/initializers/notification-renderer.rb`:
51
+ $ bundle install
259
52
 
260
- ```ruby
261
- NotificationRenderer.configure do |config|
262
- config.default_type = 'notification'
263
- end
264
- ```
53
+ ### Testing
265
54
 
266
- **`default_type`** Choose your default notification type. Takes a string. Defaults to `'notification'`.
55
+ Tests are written with RSpec. Integration tests are located in `/spec`, unit tests can be found in `<module>/spec`.
267
56
 
268
- **`default_renderer`** Choose your default renderer. Takes a string. Defaults to `'index'`.
57
+ To run all tests:
269
58
 
270
- **`auto_read`** Automatically mark rendered notifications as read. Takes a boolean. Defaults to `true`.
59
+ $ ./rspec
271
60
 
272
- ---
61
+ To run RuboCop:
273
62
 
274
- ## To Do
63
+ $ bundle exec rubocop
275
64
 
276
- We use [GitHub projects](https://github.com/jonhue/notifications-rails/projects/7) to coordinate the work on this project.
65
+ You can find all commands run by the CI workflow in `.github/workflows/ci.yml`.
277
66
 
278
- To propose your ideas, initiate the discussion by adding a [new issue](https://github.com/jonhue/notifications-rails/issues/new).
67
+ ## Contributing
279
68
 
280
- ---
69
+ We warmly welcome everyone who is intersted in contributing. Please reference our [contributing guidelines](CONTRIBUTING.md) and our [Code of Conduct](CODE_OF_CONDUCT.md).
281
70
 
282
- ## Contributing
71
+ ## Releases
283
72
 
284
- We hope that you will consider contributing to NotificationRenderer. Please read this short overview for some information about how to get started:
73
+ [Here](https://github.com/jonhue/notifications-rails/releases) you can find details on all past releases. Unreleased breaking changes that are on the current master can be found [here](CHANGELOG.md).
285
74
 
286
- [Learn more about contributing to this repository](https://github.com/jonhue/notifications-rails/blob/master/CONTRIBUTING.md), [Code of Conduct](https://github.com/jonhue/notifications-rails/blob/master/CODE_OF_CONDUCT.md)
75
+ notifications-rails follows Semantic Versioning 2.0 as defined at http://semver.org. Reference our [security policy](SECURITY.md).
287
76
 
288
- ### Semantic Versioning
77
+ ### Publishing
289
78
 
290
- NotificationRenderer follows Semantic Versioning 2.0 as defined at http://semver.org.
79
+ 1. Review breaking changes and deprecations in `CHANGELOG.md`.
80
+ 1. Change the gem version in `VERSION`.
81
+ 1. Reset `CHANGELOG.md`.
82
+ 1. Create a pull request to merge the changes into `master`.
83
+ 1. After the pull request was merged, create a new release listing the breaking changes and commits on `master` since the last release.
84
+ 1. The release workflow will publish the gems to RubyGems.
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'notification-handler'
4
+ require 'notification-renderer'
5
+ require 'notification-pusher'
6
+ require 'notification-settings'
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: 3.0.2
4
+ version: 3.0.3
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: 2019-10-10 00:00:00.000000000 Z
11
+ date: 2020-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionview
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.2
47
+ version: 3.0.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: 3.0.2
54
+ version: 3.0.3
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: railties
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -164,26 +164,15 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
- description: Render your notifications on multiple platforms by specifying notification
168
- types.
169
- email: me@jonhue.me
167
+ description: Render your notifications in various contexts.
168
+ email: jonas.huebotter@gmail.com
170
169
  executables: []
171
170
  extensions: []
172
171
  extra_rdoc_files: []
173
172
  files:
174
173
  - LICENSE
175
174
  - README.md
176
- - app/helpers/notification_renderer_helper.rb
177
- - lib/generators/notification_renderer/install_generator.rb
178
- - lib/generators/notification_renderer/type_generator.rb
179
- - lib/generators/templates/install/initializer.rb
180
- - lib/generators/templates/install/notifications_migration.rb.erb
181
- - lib/generators/templates/type/_template.html
182
- - lib/notification-renderer.rb
183
- - lib/notification_renderer/configuration.rb
184
- - lib/notification_renderer/engine.rb
185
- - lib/notification_renderer/notification_lib.rb
186
- - lib/notification_renderer/notification_scopes.rb
175
+ - lib/notifications-rails.rb
187
176
  homepage: https://github.com/jonhue/notifications-rails/tree/master/notification-renderer
188
177
  licenses:
189
178
  - MIT
@@ -204,9 +193,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
193
  - !ruby/object:Gem::Version
205
194
  version: '0'
206
195
  requirements: []
207
- rubygems_version: 3.0.3
196
+ rubygems_version: 3.1.4
208
197
  signing_key:
209
198
  specification_version: 4
210
- summary: Render your notifications on multiple platforms by specifying notification
211
- types
199
+ summary: Render your notifications in various contexts
212
200
  test_files: []
@@ -1,80 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module NotificationRendererHelper
4
- def render_notification(notification,
5
- renderer: default_renderer,
6
- attributes: nil,
7
- notifications: nil)
8
- notification.update(read: true) if auto_read
9
- render(
10
- partial: "notifications/#{notification.type}/#{renderer}",
11
- locals: {
12
- notification: notification,
13
- attributes: attributes,
14
- notifications: notifications
15
- }
16
- )
17
- end
18
-
19
- def render_notifications(notifications, renderer: default_renderer)
20
- content_tag :div, class: 'notification-renderer notifications' do
21
- notifications&.map do |notification|
22
- render_notification(notification, renderer: renderer)
23
- end
24
- end
25
- end
26
-
27
- def render_notifications_grouped(notifications, group_by,
28
- renderer: default_renderer,
29
- group_by_date: false,
30
- group_by_type: false)
31
- group_by.unshift(:type) if group_by_type
32
- if group_by_date
33
- group_by.unshift("created_at.beginning_of_#{group_by_date}")
34
- end
35
-
36
- content_tag :div, class: 'notification-renderer notifications' do
37
- recursive_notification_grouping(
38
- notifications.grouping(group_by), group_by, renderer
39
- )
40
- end
41
- end
42
-
43
- def notification_grouped?
44
- local_assigns[:attributes] && local_assigns[:notifications]
45
- end
46
-
47
- private
48
-
49
- def recursive_notification_grouping(notifications, group_by, renderer,
50
- attributes)
51
- i = 0
52
- notifications.each do |k, v|
53
- attributes[group_by[i]] = k
54
- i += 1
55
- recursive_render_notifications_grouped(v, renderer, attributes)
56
- end
57
- end
58
-
59
- def recursive_render_notifications_grouped(notifications, renderer,
60
- attributes)
61
- if notifications.is_a?(Hash)
62
- recursive_notification_grouping(
63
- notifications, group_by, renderer, attributes
64
- )
65
- else
66
- render_notification(notifications.last,
67
- renderer: renderer,
68
- attributes: attributes,
69
- notifications: notifications)
70
- end
71
- end
72
-
73
- def auto_read
74
- NotificationRenderer.configuration.auto_read
75
- end
76
-
77
- def default_renderer
78
- NotificationRenderer.configuration.default_renderer
79
- end
80
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators'
4
- require 'rails/generators/migration'
5
-
6
- module NotificationRenderer
7
- class InstallGenerator < Rails::Generators::Base
8
- include Rails::Generators::Migration
9
-
10
- source_root(File.join(File.dirname(__FILE__), '../templates/install'))
11
- desc 'Install NotificationRenderer'
12
-
13
- def self.next_migration_number(dirname)
14
- if ActiveRecord::Base.timestamped_migrations
15
- Time.now.utc.strftime('%Y%m%d%H%M%S')
16
- else
17
- format('%<migration_number>.3d',
18
- migration_number: current_migration_number(dirname) + 1)
19
- end
20
- end
21
-
22
- def create_initializer
23
- template 'initializer.rb', 'config/initializers/notification_renderer.rb'
24
- end
25
-
26
- def create_notifications_migration_file
27
- migration_template(
28
- 'notifications_migration.rb.erb',
29
- 'db/migrate/notification_renderer_migration.rb',
30
- migration_version: migration_version
31
- )
32
- end
33
-
34
- def create_templates
35
- system 'rails g notification_renderer:type -t notification'
36
- end
37
-
38
- private
39
-
40
- def migration_version
41
- return unless Rails.version >= '5.0.0'
42
-
43
- "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
44
- end
45
- end
46
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/generators'
4
- require 'rails/generators/migration'
5
-
6
- module NotificationRenderer
7
- class TypeGenerator < Rails::Generators::Base
8
- source_root(File.join(File.dirname(__FILE__), '../templates/type'))
9
- desc 'Create a new notification type'
10
- class_option :type,
11
- desc: 'Specify the notification type',
12
- type: :string,
13
- default: NotificationRenderer.configuration.default_type,
14
- aliases: '-t'
15
- class_option :renderers,
16
- desc: 'Specify the renderer templates',
17
- type: :string,
18
- default: NotificationRenderer.configuration.default_renderer,
19
- aliases: '-r'
20
-
21
- def create_templates
22
- options[:renderers].split(' ')&.each do |template|
23
- template(
24
- '_template.html',
25
- "app/views/notifications/#{options[:type]}/_#{template}.html.erb"
26
- )
27
- end
28
- end
29
- end
30
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- NotificationRenderer.configure do |config|
4
- # Choose your default notification type. Takes a string.
5
- # config.default_type = 'notification'
6
-
7
- # Choose your default renderer. Takes a string.
8
- # config.default_renderer = 'index'
9
-
10
- # Automatically mark rendered notifications as read. Takes a boolean.
11
- # config.auto_read = true
12
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class NotificationRendererMigration < ActiveRecord::Migration<%= migration_version %>
4
- def change
5
- add_column :notifications, :type, :string, index: true
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- <!--
2
- In your renderers you can access the `Notification` record through the `notification` variable. This is how a renderer could look like:
3
-
4
- <%%= notification.target.name %> commented on <%%= notification.object.article.title %>
5
-
6
- Learn more: https://github.com/jonhue/notifications-rails/tree/master/notification-renderer#renderers
7
- -->
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module NotificationRenderer
4
- require_relative 'notification_renderer/configuration'
5
-
6
- require_relative 'notification_renderer/engine'
7
-
8
- autoload :NotificationLib, 'notification_renderer/notification_lib'
9
- autoload :NotificationScopes, 'notification_renderer/notification_scopes'
10
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module NotificationRenderer
4
- class << self
5
- attr_writer :configuration
6
-
7
- def configuration
8
- @configuration ||= Configuration.new
9
- end
10
- end
11
-
12
- def self.configure
13
- yield configuration
14
- end
15
-
16
- class Configuration
17
- attr_accessor :default_type
18
- attr_accessor :default_renderer
19
- attr_accessor :auto_read
20
-
21
- def initialize
22
- @default_type = 'notification'
23
- @default_renderer = 'index'
24
- @auto_read = true
25
- end
26
- end
27
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/engine'
4
- require 'action_view'
5
-
6
- module NotificationRenderer
7
- class Engine < ::Rails::Engine
8
- end
9
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'notification-handler'
4
- require 'active_support'
5
-
6
- module NotificationRenderer
7
- module NotificationLib
8
- extend ActiveSupport::Concern
9
-
10
- module ClassMethods
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
18
-
19
- def grouping_by(group_by)
20
- all.group_by { |notification| notification.send(group_by) }
21
- end
22
-
23
- def recursive_grouping(notifications, group_by)
24
- if notifications.is_a?(Hash)
25
- recursive_hash_grouping(notifications, group_by)
26
- else
27
- notifications.grouping_by(group_by)
28
- end
29
- notifications
30
- end
31
- end
32
-
33
- def type
34
- self[:type] || NotificationRenderer.configuration.default_type
35
- end
36
-
37
- private
38
-
39
- def recursive_hash_grouping(notifications, group_by)
40
- notifications.each_pair do |k, v|
41
- if v.is_a?(Hash)
42
- recursive_hash_grouping(v, group_by)
43
- else
44
- notifications[k] = v.grouping_by(group_by)
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'notification-handler'
4
- require 'active_support'
5
-
6
- module NotificationRenderer
7
- module NotificationScopes
8
- extend ActiveSupport::Concern
9
-
10
- module ClassMethods
11
- def method_missing(method, *args)
12
- if method.to_s[/(.+)_type/]
13
- where(type: $1.singularize.classify)
14
- else
15
- super
16
- end
17
- end
18
-
19
- def respond_to_missing?(method, include_private = false)
20
- super || method.to_s[/(.+)_type/]
21
- end
22
- end
23
- end
24
- end