abstract_notifier 0.1.0 → 0.1.1
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/.rubocop.yml +3 -0
- data/Gemfile +1 -0
- data/README.md +17 -1
- data/Rakefile +2 -0
- data/abstract_notifier.gemspec +4 -0
- data/gemfiles/rails42.gemfile +2 -0
- data/gemfiles/railsmaster.gemfile +2 -0
- data/lib/abstract_notifier.rb +4 -0
- data/lib/abstract_notifier/testing/rspec.rb +2 -2
- data/lib/abstract_notifier/version.rb +3 -1
- data/lib/active_delivery/lines/notifier.rb +46 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f53c7d7582adccf56af7c488e41063cf5b344cbe198a548885d52b60f030772
|
4
|
+
data.tar.gz: d13d22f8e543f15c4bbf48bb29838746cdf0843430a1eb55e1c89cafa3c417da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 462d22226d63a1c862f089f5a4b78cac6c457ca78160510b82588129c3d914a649daf4349945a989429202fde18ac87eff4ec3c42d670240eaa90959a5d7a010
|
7
|
+
data.tar.gz: 86f83533acc72205f77d7c83486e4cee9f9b59b5d6efe6ab6692dac18c3fbd58959c5d96b2537eaf5f7c9b95a9810297908ea0f6366cd8dec6cc2db2eed7f1cd
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -157,7 +157,23 @@ expect { EventsNotifier.with(profile: profile).canceled(event).notify_later}.
|
|
157
157
|
|
158
158
|
## Related projects
|
159
159
|
|
160
|
-
|
160
|
+
### [`active_delivery`](https://github.com/palkan/active_delivery)
|
161
|
+
|
162
|
+
Active Delivery is the next-level abstraction which allows to combine multiple notification channels in one place.
|
163
|
+
|
164
|
+
Abstract Notifier provides a _notifier_ line for Active Delivery:
|
165
|
+
|
166
|
+
```ruby
|
167
|
+
class ApplicationDelivery < ActiveDelivery::Base
|
168
|
+
# Add notifier line to you delivery
|
169
|
+
register_line :notifier, ActiveDelivery::Lines::Notifier,
|
170
|
+
# you may provide a resolver, which infers notifier class
|
171
|
+
# from delivery name (resolver is a callable).
|
172
|
+
rsolver: ->(name) { resolve_somehow(name) }
|
173
|
+
end
|
174
|
+
```
|
175
|
+
|
176
|
+
**NOTE:** we automatically add `:notifier` line with `"*Delivery" -> *Notifier` resolution mechanism if `#safe_constantize` method is defined for String, i.e. you don't have to configure the default notifier line when running Rails.
|
161
177
|
|
162
178
|
## Contributing
|
163
179
|
|
data/Rakefile
CHANGED
data/abstract_notifier.gemspec
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
lib = File.expand_path("../lib", __FILE__)
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
5
|
require "abstract_notifier/version"
|
@@ -16,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
16
18
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
19
|
spec.require_paths = ["lib"]
|
18
20
|
|
21
|
+
spec.add_development_dependency "active_delivery"
|
22
|
+
|
19
23
|
spec.add_development_dependency "bundler", "~> 1.16"
|
20
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
21
25
|
spec.add_development_dependency "rspec", "~> 3.0"
|
data/gemfiles/rails42.gemfile
CHANGED
data/lib/abstract_notifier.rb
CHANGED
@@ -72,3 +72,7 @@ require "abstract_notifier/async_adapters"
|
|
72
72
|
require "abstract_notifier/async_adapters/active_job" if defined?(ActiveJob)
|
73
73
|
|
74
74
|
require "abstract_notifier/testing" if ENV["RACK_ENV"] == "test" || ENV["RAILS_ENV"] == "test"
|
75
|
+
|
76
|
+
if defined?(ActiveDelivery::Base) && defined?(ActiveDelivery::Lines::Base)
|
77
|
+
require "active_delivery/lines/notifier"
|
78
|
+
end
|
@@ -4,7 +4,7 @@ module AbstractNotifier
|
|
4
4
|
class HaveSentNotification < RSpec::Matchers::BuiltIn::BaseMatcher
|
5
5
|
attr_reader :payload
|
6
6
|
|
7
|
-
def initialize(payload)
|
7
|
+
def initialize(payload = nil)
|
8
8
|
@payload = payload
|
9
9
|
set_expected_number(:exactly, 1)
|
10
10
|
end
|
@@ -55,7 +55,7 @@ module AbstractNotifier
|
|
55
55
|
|
56
56
|
@matching_deliveries, @unmatching_deliveries =
|
57
57
|
in_block_deliveries.partition do |actual_payload|
|
58
|
-
payload === actual_payload
|
58
|
+
payload.nil? || (payload === actual_payload)
|
59
59
|
end
|
60
60
|
|
61
61
|
@matching_count = @matching_deliveries.size
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveDelivery
|
4
|
+
module Lines
|
5
|
+
# AbstractNotifier line for Active Delivery.
|
6
|
+
#
|
7
|
+
# You must provide custom `resolver` to infer notifier class
|
8
|
+
# (if String#safe_constantize is defined, we convert "*Delivery" -> "*Notifier").
|
9
|
+
#
|
10
|
+
# Resolver is a callable object.
|
11
|
+
class Notifier < ActiveDelivery::Lines::Base
|
12
|
+
DEFAULT_RESOLVER = ->(name) { name.gsub(/Delivery$/, "Notifier").safe_constantize }
|
13
|
+
|
14
|
+
def initialize(*)
|
15
|
+
super
|
16
|
+
@resolver = options[:resolver]
|
17
|
+
end
|
18
|
+
|
19
|
+
def resolve_class(name)
|
20
|
+
resolver&.call(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def notify?(method_name)
|
24
|
+
handler_class.action_methods.include?(method_name.to_s)
|
25
|
+
end
|
26
|
+
|
27
|
+
def notify_now(handler, mid, *args)
|
28
|
+
handler.public_send(mid, *args).notify_now
|
29
|
+
end
|
30
|
+
|
31
|
+
def notify_later(handler, mid, *args)
|
32
|
+
handler.public_send(mid, *args).notify_later
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
attr_reader :resolver
|
38
|
+
end
|
39
|
+
|
40
|
+
# Only automatically register line when we can resolve the class
|
41
|
+
# easily.
|
42
|
+
if "".respond_to?(:safe_constantize)
|
43
|
+
ActiveDelivery::Base.register_line :notifier, Notifier, resolver: Notifier::DEFAULT_RESOLVER
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abstract_notifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vladimir Dementyev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: active_delivery
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -93,6 +107,7 @@ files:
|
|
93
107
|
- lib/abstract_notifier/testing.rb
|
94
108
|
- lib/abstract_notifier/testing/rspec.rb
|
95
109
|
- lib/abstract_notifier/version.rb
|
110
|
+
- lib/active_delivery/lines/notifier.rb
|
96
111
|
homepage: https://github.com/palkan/abstract_notifier
|
97
112
|
licenses:
|
98
113
|
- MIT
|