notification-settings 1.2.5 → 1.2.6
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/LICENSE +21 -21
- data/README.md +271 -271
- data/app/models/notification_settings/setting.rb +15 -13
- data/app/models/notification_settings/subscription.rb +15 -13
- data/lib/generators/notification_settings/install_generator.rb +40 -43
- data/lib/generators/templates/install/initializer.rb +28 -24
- data/lib/generators/templates/install/notifications_migration.rb.erb +27 -29
- data/lib/notification-settings.rb +15 -15
- data/lib/notification_settings/configuration.rb +30 -32
- data/lib/notification_settings/engine.rb +9 -7
- data/lib/notification_settings/notification_library.rb +144 -72
- data/lib/notification_settings/notification_scopes.rb +28 -30
- data/lib/notification_settings/setting_library.rb +60 -28
- data/lib/notification_settings/subscribable.rb +50 -42
- data/lib/notification_settings/subscriber.rb +35 -30
- data/lib/notification_settings/subscription_library.rb +23 -25
- data/lib/notification_settings/target.rb +27 -26
- metadata +46 -34
- data/CHANGELOG.md +0 -59
- data/lib/generators/templates/install/README.md +0 -1
@@ -1,30 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'notification-handler'
|
4
|
+
require 'active_support'
|
5
|
+
|
6
|
+
module NotificationSettings
|
7
|
+
module NotificationScopes
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
include NotificationSettings::NotificationScopes::InstanceMethods
|
12
|
+
end
|
13
|
+
|
14
|
+
module InstanceMethods
|
15
|
+
def method_missing(method, *args)
|
16
|
+
if method.to_s[/(.+)_category/]
|
17
|
+
where(category: $1.singularize.classify)
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def respond_to_missing?(method, include_private = false)
|
24
|
+
super || method.to_s[/(.+)_category/]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,28 +1,60 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
module NotificationSettings
|
6
|
+
module SettingLibrary
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
include NotificationSettings::SettingLibrary::InstanceMethods
|
11
|
+
end
|
12
|
+
|
13
|
+
module InstanceMethods
|
14
|
+
def status
|
15
|
+
if idle? && !offline?
|
16
|
+
default = 'idle'
|
17
|
+
elsif offline?
|
18
|
+
default = 'offline'
|
19
|
+
else
|
20
|
+
'online'
|
21
|
+
end
|
22
|
+
self[:status] || default
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def idle?
|
28
|
+
return unless time_since_last_seen_round
|
29
|
+
|
30
|
+
time_since_last_seen_round >= idle_after
|
31
|
+
end
|
32
|
+
|
33
|
+
def offline?
|
34
|
+
return unless time_since_last_seen_round
|
35
|
+
|
36
|
+
time_since_last_seen_round >= offline_after
|
37
|
+
end
|
38
|
+
|
39
|
+
def time_since_last_seen_round
|
40
|
+
time_since_last_seen&.round
|
41
|
+
end
|
42
|
+
|
43
|
+
def time_since_last_seen
|
44
|
+
return unless object.respond_to?(
|
45
|
+
NotificationSettings.configuration.last_seen
|
46
|
+
)
|
47
|
+
|
48
|
+
Time.now - object.send(NotificationSettings.configuration.last_seen)
|
49
|
+
end
|
50
|
+
|
51
|
+
def idle_after
|
52
|
+
NotificationSettings.configuration.idle_after
|
53
|
+
end
|
54
|
+
|
55
|
+
def offline_after
|
56
|
+
NotificationSettings.configuration.offline_after
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -1,42 +1,50 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
|
42
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
module NotificationSettings
|
6
|
+
module Subscribable
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
has_many :notification_subscriptions,
|
11
|
+
as: :subscribable,
|
12
|
+
class_name: 'NotificationSettings::Subscription',
|
13
|
+
dependent: :destroy
|
14
|
+
has_many :notification_subscribers,
|
15
|
+
through: :notification_subscriptions, source: :subscriber
|
16
|
+
|
17
|
+
include NotificationSettings::Subscribable::InstanceMethods
|
18
|
+
end
|
19
|
+
|
20
|
+
module InstanceMethods
|
21
|
+
def notify_subscribers(options = {})
|
22
|
+
options[:object] = self
|
23
|
+
subscribers = notify_dependents(options.delete(:dependents))
|
24
|
+
notification_subscribers&.each do |subscriber|
|
25
|
+
subscribers << subscriber
|
26
|
+
end
|
27
|
+
subscribers.to_a.uniq&.each do |subscriber|
|
28
|
+
subscriber.notify(options)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def notify_dependents(dependents)
|
33
|
+
subscribers = []
|
34
|
+
dependents ||= notification_dependents
|
35
|
+
dependents&.each do |dependent|
|
36
|
+
dependent.notification_subscribers&.each do |subscriber|
|
37
|
+
subscribers << subscriber
|
38
|
+
end
|
39
|
+
end
|
40
|
+
subscribers
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def notification_dependents
|
46
|
+
[]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,30 +1,35 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
module NotificationSettings
|
6
|
+
module Subscriber
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
has_many :notification_subscriptions,
|
11
|
+
as: :subscriber,
|
12
|
+
class_name: 'NotificationSettings::Subscription',
|
13
|
+
dependent: :destroy
|
14
|
+
has_many :notification_subscribables,
|
15
|
+
through: :notification_subscriptions, source: :subscribable
|
16
|
+
|
17
|
+
include NotificationSettings::Subscriber::InstanceMethods
|
18
|
+
end
|
19
|
+
|
20
|
+
module InstanceMethods
|
21
|
+
def subscribe(subscribable, options = {})
|
22
|
+
options[:subscribable] = subscribable
|
23
|
+
notification_subscriptions.create(options)
|
24
|
+
end
|
25
|
+
|
26
|
+
def unsubscribe(subscribable)
|
27
|
+
subscription = notification_subscriptions.find_by(
|
28
|
+
subscribable_id: subscribable.id,
|
29
|
+
subscribable_type: subscribable.class.name
|
30
|
+
)
|
31
|
+
subscription.destroy
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,25 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
module NotificationSettings
|
6
|
+
module SubscriptionLibrary
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
after_create_commit :create_notification_setting
|
11
|
+
|
12
|
+
include NotificationSettings::SubscriptionLibrary::InstanceMethods
|
13
|
+
end
|
14
|
+
|
15
|
+
module InstanceMethods
|
16
|
+
private
|
17
|
+
|
18
|
+
def create_notification_setting
|
19
|
+
notification_setting.create!
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,26 +1,27 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support'
|
4
|
+
|
5
|
+
module NotificationSettings
|
6
|
+
module Target
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
included do
|
10
|
+
has_one :notification_setting,
|
11
|
+
as: :object,
|
12
|
+
class_name: 'NotificationSettings::Setting',
|
13
|
+
dependent: :destroy
|
14
|
+
before_create :create_notification_setting
|
15
|
+
|
16
|
+
include NotificationSettings::Target::InstanceMethods
|
17
|
+
end
|
18
|
+
|
19
|
+
module InstanceMethods
|
20
|
+
private
|
21
|
+
|
22
|
+
def create_notification_setting
|
23
|
+
build_notification_setting
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,99 +1,113 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: notification-settings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.6
|
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-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.2'
|
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.
|
26
|
+
version: '5.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.2'
|
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.
|
40
|
+
version: '5.2'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: notification-handler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 1.2.6
|
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:
|
54
|
+
version: 1.2.6
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: railties
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '5.2'
|
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:
|
68
|
+
version: '5.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rubocop
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0
|
89
|
+
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0
|
110
|
+
version: '0'
|
97
111
|
description: Integrates with your authentication solution to craft a personalized
|
98
112
|
user notification platform.
|
99
113
|
email: me@jonhue.me
|
@@ -101,13 +115,11 @@ executables: []
|
|
101
115
|
extensions: []
|
102
116
|
extra_rdoc_files: []
|
103
117
|
files:
|
104
|
-
- CHANGELOG.md
|
105
118
|
- LICENSE
|
106
119
|
- README.md
|
107
120
|
- app/models/notification_settings/setting.rb
|
108
121
|
- app/models/notification_settings/subscription.rb
|
109
122
|
- lib/generators/notification_settings/install_generator.rb
|
110
|
-
- lib/generators/templates/install/README.md
|
111
123
|
- lib/generators/templates/install/initializer.rb
|
112
124
|
- lib/generators/templates/install/notifications_migration.rb.erb
|
113
125
|
- lib/notification-settings.rb
|
@@ -132,7 +144,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
144
|
requirements:
|
133
145
|
- - ">="
|
134
146
|
- !ruby/object:Gem::Version
|
135
|
-
version:
|
147
|
+
version: 2.2.2
|
136
148
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
149
|
requirements:
|
138
150
|
- - ">="
|
@@ -140,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
152
|
version: '0'
|
141
153
|
requirements: []
|
142
154
|
rubyforge_project:
|
143
|
-
rubygems_version: 2.7.
|
155
|
+
rubygems_version: 2.7.6
|
144
156
|
signing_key:
|
145
157
|
specification_version: 4
|
146
158
|
summary: Integrates with your authentication solution to craft a personalized user
|