notification-handler 1.2.6 → 2.0.0

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: 487a429c1a9affdd1a4134cf9f25db17f959c348235c1e84030d6ae8f864d11b
4
- data.tar.gz: 789a52f5f28e9eaeca91729f7780e8ce002aba23d1f717fb4ebad78cf29d557f
3
+ metadata.gz: f2cdb58ba8f4da880b60d9443747199aac809a9fc881c52ea6d6521b02ebb1c6
4
+ data.tar.gz: 2b22c562259da40608261bd742224fc6302ba678e2536ece9c01a01a01c51d82
5
5
  SHA512:
6
- metadata.gz: f953fa2ea9805a60524117a04313b9b26eb2349fbe1a606d13daab4f5fd5e8e03a209b596f23f235a1c2774445c3b286494070369a3e54962f9910af426b9b26
7
- data.tar.gz: c578e829f2cf2aad8d73ba459289db0c658b324a78b24217149757fd87d64a1533ebac9faada3e7756a2f45983ab408e3562af268bd8e72de3501238d759a533
6
+ metadata.gz: a6eb0d2c4cc82ca45ca54d08bc4bf75aaa531d793a31109c0644345e2e00d392f84bf145b414863b835225e52a2249d64ff12df872b2698657ba6ce0b7401693
7
+ data.tar.gz: cac446fcf48614af0346f947a181be5bfbb5a2fe9f54dd3aebd7e0b231d2550d73f851fad439cf3a07565e8daa9f7278ccc9c5ddd59395b8ee82a1d8e9d50aea
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # NotificationHandler
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/notification-handler.svg)](https://badge.fury.io/rb/notification-handler) <img src="https://travis-ci.org/jonhue/notifications-rails.svg?branch=master" />
3
+ [![Gem Version](https://badge.fury.io/rb/notification-handler.svg)](https://badge.fury.io/rb/notification-handler) ![Travis](https://travis-ci.com/jonhue/notifications-rails.svg?branch=master)
4
4
 
5
5
  Create and modify your notifications through a simple API.
6
6
 
@@ -10,19 +10,17 @@ Create and modify your notifications through a simple API.
10
10
 
11
11
  * [Installation](#installation)
12
12
  * [Usage](#usage)
13
- * [`Notification` API](#notification-api)
14
- * [`notification_target`](#notification_target)
15
- * [`notification_object`](#notification_object)
16
- * [Groups](#groups)
17
- * [Defining a group](#defining-a-group)
18
- * [Using a group](#using-a-group)
19
- * [Caching](#caching)
13
+ * [`Notification` API](#notification-api)
14
+ * [`notification_target`](#notification_target)
15
+ * [`notification_object`](#notification_object)
16
+ * [Groups](#groups)
17
+ * [Defining a group](#defining-a-group)
18
+ * [Using a group](#using-a-group)
19
+ * [Caching](#caching)
20
20
  * [Configuration](#configuration)
21
21
  * [To Do](#to-do)
22
22
  * [Contributing](#contributing)
23
- * [Contributors](#contributors)
24
- * [Semantic versioning](#semantic-versioning)
25
- * [License](#license)
23
+ * [Semantic versioning](#semantic-versioning)
26
24
 
27
25
  ---
28
26
 
@@ -42,12 +40,6 @@ Or install it yourself as:
42
40
 
43
41
  $ gem install notification-handler
44
42
 
45
- If you always want to be up to date fetch the latest from GitHub in your `Gemfile`:
46
-
47
- ```ruby
48
- gem 'notification-handler', github: 'jonhue/notifications-rails'
49
- ```
50
-
51
43
  Now run the generator:
52
44
 
53
45
  $ rails g notification_handler:install
@@ -78,8 +70,8 @@ To store information in your `Notification` record you can use the `metadata` at
78
70
 
79
71
  ```ruby
80
72
  notification.metadata = {
81
- title: 'My first notification',
82
- content: "It looks great, doesn't it?"
73
+ title: 'My first notification',
74
+ content: "It looks great, doesn't it?"
83
75
  }
84
76
  ```
85
77
 
@@ -116,7 +108,7 @@ To use records of an ActiveRecord class as notification targets, add the followi
116
108
 
117
109
  ```ruby
118
110
  class User < ApplicationRecord
119
- notification_target
111
+ notification_target
120
112
  end
121
113
  ```
122
114
 
@@ -129,7 +121,7 @@ notifications = User.first.notifications
129
121
  You can create a notification from a `target`:
130
122
 
131
123
  ```ruby
132
- User.first.notify object: Recipe.first
124
+ User.first.notify(object: Recipe.first)
133
125
  ```
134
126
 
135
127
  ...
@@ -140,7 +132,7 @@ When using records of an ActiveRecord class as notification objects, add this to
140
132
 
141
133
  ```ruby
142
134
  class Recipe < ApplicationRecord
143
- notification_object
135
+ notification_object
144
136
  end
145
137
  ```
146
138
 
@@ -162,7 +154,7 @@ You define groups in your `NotificationHandler` configuration:
162
154
 
163
155
  ```ruby
164
156
  NotificationHandler.configure do |config|
165
- config.define_group :subscribers, User.where(subscriber: true)
157
+ config.define_group :subscribers, -> { User.where(subscriber: true) }
166
158
  end
167
159
  ```
168
160
 
@@ -170,16 +162,22 @@ When creating a notification for the group `:subscribers`, one notification will
170
162
 
171
163
  ```ruby
172
164
  NotificationHandler.configure do |config|
173
- config.define_group :subscribers, User.where(subscriber: true) + Admin.all
165
+ config.define_group :subscribers, -> { User.where(subscriber: true) + Admin.all }
166
+ config.define_group :company_members, lambda { |company_id|
167
+ User.with_role(:member, Company.find(company_id)
168
+ }
174
169
  end
175
170
  ```
176
171
 
172
+ The only requirement is that the result of evaluating the proc be Enumerable.
173
+
177
174
  #### Using a group
178
175
 
179
176
  Bulk-creation of notifications for a certain group is fairly simple:
180
177
 
181
178
  ```ruby
182
- notification = Notification.create object: Recipe.first, group: :subscribers
179
+ notification = Notification.create(object: Recipe.first, group: :subscribers)
180
+ notification = Notification.create(object: Recipe.first, group: :company_members, group_args: 4)
183
181
  ```
184
182
 
185
183
  **Note:** You are not able to set the `target` attribute when a `group` has been specified.
@@ -203,7 +201,7 @@ You can configure NotificationHandler by passing a block to `configure`. This ca
203
201
 
204
202
  ```ruby
205
203
  NotificationHandler.configure do |config|
206
- config.cache = true
204
+ config.cache = true
207
205
  end
208
206
  ```
209
207
 
@@ -213,7 +211,7 @@ end
213
211
 
214
212
  ## To Do
215
213
 
216
- [Here](https://github.com/jonhue/notifications-rails/projects/2) is the full list of current projects.
214
+ We use [GitHub projects](https://github.com/jonhue/notifications-rails/projects/2) to coordinate the work on this project.
217
215
 
218
216
  To propose your ideas, initiate the discussion by adding a [new issue](https://github.com/jonhue/notifications-rails/issues/new).
219
217
 
@@ -225,36 +223,6 @@ We hope that you will consider contributing to NotificationHandler. Please read
225
223
 
226
224
  [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)
227
225
 
228
- ### Contributors
229
-
230
- Give the people some :heart: who are working on this project. See them all at:
231
-
232
- https://github.com/jonhue/notifications-rails/graphs/contributors
233
-
234
226
  ### Semantic Versioning
235
227
 
236
228
  NotificationHandler follows Semantic Versioning 2.0 as defined at http://semver.org.
237
-
238
- ## License
239
-
240
- MIT License
241
-
242
- Copyright (c) 2017 Jonas Hübotter
243
-
244
- Permission is hereby granted, free of charge, to any person obtaining a copy
245
- of this software and associated documentation files (the "Software"), to deal
246
- in the Software without restriction, including without limitation the rights
247
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
248
- copies of the Software, and to permit persons to whom the Software is
249
- furnished to do so, subject to the following conditions:
250
-
251
- The above copyright notice and this permission notice shall be included in all
252
- copies or substantial portions of the Software.
253
-
254
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
255
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
256
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
257
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
258
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
259
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
260
- SOFTWARE.
@@ -2,7 +2,7 @@
2
2
 
3
3
  module NotificationHandler
4
4
  class Notification < ApplicationRecord
5
- include NotificationHandler::NotificationLibrary
5
+ include NotificationHandler::NotificationLib
6
6
  include NotificationHandler::NotificationScopes
7
7
  end
8
8
  end
@@ -19,7 +19,7 @@ module NotificationHandler
19
19
  end
20
20
 
21
21
  def create_initializer
22
- template 'initializer.rb', 'config/initializers/notification-handler.rb'
22
+ template 'initializer.rb', 'config/initializers/notification_handler.rb'
23
23
  end
24
24
 
25
25
  def create_notifications_migration_file
@@ -8,5 +8,5 @@ NotificationHandler.configure do |config|
8
8
  # Groups are a powerful way to bulk-create notifications for multiple objects
9
9
  # that don't necessarily have a common class.
10
10
  # Learn more: https://github.com/jonhue/notifications-rails/tree/master/notification-handler#groups
11
- # config.define_group :subscribers, User.where(subscriber: true)
11
+ # config.define_group :subscribers, -> { User.where(subscriber: true) }
12
12
  end
@@ -1,16 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NotificationHandler
4
- require 'notification_handler/configuration'
4
+ require_relative 'notification_handler/configuration'
5
5
 
6
- require 'notification_handler/engine'
6
+ require_relative 'notification_handler/engine'
7
7
 
8
8
  autoload :Group, 'notification_handler/group'
9
9
 
10
10
  autoload :Target, 'notification_handler/target'
11
11
  autoload :Object, 'notification_handler/object'
12
- autoload :NotificationLibrary, 'notification_handler/notification_library'
12
+ autoload :NotificationLib, 'notification_handler/notification_lib'
13
13
  autoload :NotificationScopes, 'notification_handler/notification_scopes'
14
-
15
- require 'notification_handler/railtie'
16
14
  end
@@ -1,12 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'group'
4
+
3
5
  module NotificationHandler
4
6
  class << self
5
- attr_accessor :configuration
7
+ attr_writer :configuration
8
+
9
+ def configuration
10
+ @configuration ||= Configuration.new
11
+ end
6
12
  end
7
13
 
8
14
  def self.configure
9
- self.configuration ||= Configuration.new
10
15
  yield configuration
11
16
  end
12
17
 
@@ -15,12 +20,12 @@ module NotificationHandler
15
20
  attr_accessor :cache
16
21
 
17
22
  def initialize
18
- @groups = []
23
+ @groups = {}
19
24
  @cache = false
20
25
  end
21
26
 
22
27
  def define_group(name, target_scope)
23
- groups << ::NotificationHandler::Group.new(name.to_sym, target_scope)
28
+ groups[name.to_sym] = ::NotificationHandler::Group.new(target_scope)
24
29
  end
25
30
  end
26
31
  end
@@ -1,9 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rails/railtie'
3
+ require 'rails/engine'
4
4
  require 'active_record'
5
5
 
6
6
  module NotificationHandler
7
7
  class Engine < ::Rails::Engine
8
+ initializer 'notification-handler.active_record' do
9
+ ActiveSupport.on_load :active_record do
10
+ include NotificationHandler::Target
11
+ include NotificationHandler::Object
12
+ end
13
+ end
8
14
  end
9
15
  end
@@ -2,18 +2,21 @@
2
2
 
3
3
  module NotificationHandler
4
4
  class Group
5
- attr_accessor :name
6
- attr_accessor :target_scope
5
+ attr_reader :target_scope
7
6
 
8
- def initialize(name, target_scope)
9
- @name = name
7
+ def initialize(target_scope)
10
8
  @target_scope = target_scope
11
9
  end
12
10
 
13
11
  def self.find_by_name(name)
14
- NotificationHandler.configuration.groups.select do |group|
15
- group.name == name.to_sym
16
- end
12
+ NotificationHandler.configuration.groups[name]
13
+ end
14
+
15
+ def self.find_by_name!(name)
16
+ find_by_name(name) ||
17
+ raise(ArgumentError,
18
+ "Could not find a registered group for #{name}. " \
19
+ "Make sure you register it with config.define_group :#{name}")
17
20
  end
18
21
  end
19
22
  end
@@ -3,7 +3,7 @@
3
3
  require 'active_support'
4
4
 
5
5
  module NotificationHandler
6
- module NotificationLibrary
6
+ module NotificationLib
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
@@ -14,20 +14,21 @@ module NotificationHandler
14
14
 
15
15
  serialize :metadata, Hash
16
16
  attr_accessor :group
17
+ attr_accessor :group_args
17
18
 
18
19
  belongs_to :target, polymorphic: true
19
20
  belongs_to :object, polymorphic: true, optional: true
20
21
 
21
- include NotificationHandler::NotificationLibrary::InstanceMethods
22
+ include NotificationHandler::NotificationLib::InstanceMethods
22
23
 
23
24
  if defined?(NotificationRenderer)
24
- include NotificationRenderer::NotificationLibrary
25
+ include NotificationRenderer::NotificationLib
25
26
  end
26
27
  if defined?(NotificationPusher)
27
- include NotificationPusher::NotificationLibrary
28
+ include NotificationPusher::NotificationLib
28
29
  end
29
30
  if defined?(NotificationSettings)
30
- include NotificationSettings::NotificationLibrary
31
+ include NotificationSettings::NotificationLib
31
32
  end
32
33
  end
33
34
 
@@ -45,15 +46,14 @@ module NotificationHandler
45
46
  def create_for_group
46
47
  return if group.nil?
47
48
 
48
- target_scope = NotificationHandler::Group.find_by_name(group)
49
- .last.target_scope
50
- target_scope&.each do |target|
51
- notification = dup
49
+ target_scope = NotificationHandler::Group.find_by_name!(group)
50
+ .target_scope
51
+ target_scope.call(*group_args)&.each_with_index do |target, index|
52
+ notification = index.zero? ? self : dup
52
53
  notification.target = target
53
54
  notification.group = nil
54
- notification.save
55
+ notification.save!
55
56
  end
56
- false
57
57
  end
58
58
 
59
59
  def cache
@@ -13,6 +13,7 @@ module NotificationHandler
13
13
  include NotificationHandler::Object::InstanceMethods
14
14
 
15
15
  return unless defined?(NotificationSettings)
16
+
16
17
  include NotificationSettings::Subscribable
17
18
  end
18
19
  end
@@ -13,6 +13,7 @@ module NotificationHandler
13
13
 
14
14
  include NotificationSettings::Target if defined?(NotificationSettings)
15
15
  return unless defined?(NotificationSettings)
16
+
16
17
  include NotificationSettings::Subscriber
17
18
  end
18
19
  end
metadata CHANGED
@@ -1,59 +1,101 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notification-handler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 2.0.0
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-12-22 00:00:00.000000000 Z
11
+ date: 2019-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.2'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '5.2'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '5.2'
33
+ version: '5.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '5.2'
40
+ version: '5.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: railties
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.2'
47
+ version: '5.0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
53
81
  - !ruby/object:Gem::Version
54
- version: '5.2'
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: rspec
84
+ name: rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-rails
57
99
  requirement: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - ">="
@@ -94,6 +136,20 @@ dependencies:
94
136
  - - ">="
95
137
  - !ruby/object:Gem::Version
96
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: sqlite3
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
97
153
  description: Create and modify your notifications through a simple API.
98
154
  email: me@jonhue.me
99
155
  executables: []
@@ -111,10 +167,9 @@ files:
111
167
  - lib/notification_handler/configuration.rb
112
168
  - lib/notification_handler/engine.rb
113
169
  - lib/notification_handler/group.rb
114
- - lib/notification_handler/notification_library.rb
170
+ - lib/notification_handler/notification_lib.rb
115
171
  - lib/notification_handler/notification_scopes.rb
116
172
  - lib/notification_handler/object.rb
117
- - lib/notification_handler/railtie.rb
118
173
  - lib/notification_handler/target.rb
119
174
  homepage: https://github.com/jonhue/notifications-rails/tree/master/notification-handler
120
175
  licenses:
@@ -135,8 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
190
  - !ruby/object:Gem::Version
136
191
  version: '0'
137
192
  requirements: []
138
- rubyforge_project:
139
- rubygems_version: 2.7.6
193
+ rubygems_version: 3.0.3
140
194
  signing_key:
141
195
  specification_version: 4
142
196
  summary: Create and modify your notifications through a simple API
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/railtie'
4
- require 'active_record'
5
- require 'active_support'
6
-
7
- module NotificationHandler
8
- class Railtie < Rails::Railtie
9
- initializer 'notification-handler.active_record' do
10
- ActiveSupport.on_load :active_record do
11
- include NotificationHandler::Target
12
- include NotificationHandler::Object
13
- end
14
- end
15
- end
16
- end