abstract_notifier 0.1.0 → 0.1.1

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: e5441072e0ded98cb24401c568df58e4917cb33211b04427b624498f1d622541
4
- data.tar.gz: 5bde27d338590df550fd8cc74c8301a0c694510e6277e94c3f014a0e2033d16d
3
+ metadata.gz: 4f53c7d7582adccf56af7c488e41063cf5b344cbe198a548885d52b60f030772
4
+ data.tar.gz: d13d22f8e543f15c4bbf48bb29838746cdf0843430a1eb55e1c89cafa3c417da
5
5
  SHA512:
6
- metadata.gz: e2c5d63ed5065c83bcb9bad41c8209cb2292d8703fedf326e7b44e4d03a7474758e3eae388283c5638c381584527652b34ccd9b584f5ecf7f6de056fd21402c9
7
- data.tar.gz: ebc4e4e33bc64a77a9e01d31cf123f06d62337c8d88ad35264aee947153def02584766ca3ce3c8a1e7cc07f195ad573ef6632057dd6b7af8127c4d905ef30b16
6
+ metadata.gz: 462d22226d63a1c862f089f5a4b78cac6c457ca78160510b82588129c3d914a649daf4349945a989429202fde18ac87eff4ec3c42d670240eaa90959a5d7a010
7
+ data.tar.gz: 86f83533acc72205f77d7c83486e4cee9f9b59b5d6efe6ab6692dac18c3fbd58959c5d96b2537eaf5f7c9b95a9810297908ea0f6366cd8dec6cc2db2eed7f1cd
data/.rubocop.yml CHANGED
@@ -16,6 +16,9 @@ AllCops:
16
16
  Standard/SemanticBlocks:
17
17
  Enabled: false
18
18
 
19
+ Style/FrozenStringLiteralComment:
20
+ Enabled: true
21
+
19
22
  Style/TrailingCommaInArrayLiteral:
20
23
  EnforcedStyleForMultiline: no_comma
21
24
 
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in abstract_notifier.gemspec
4
4
  gemspec
5
5
 
6
+ gem "pry-byebug"
6
7
  gem "rspec-rails"
7
8
 
8
9
  local_gemfile = File.join(__dir__, "Gemfile.local")
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
- - [`active_delivery`](https://github.com/palkan/active_delivery) – next-level abstraction which allows to combine multiple notification channels in one place.
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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
  require "rubocop/rake_task"
@@ -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"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gem "rails", "~> 4.2"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gem "rails", github: "rails/rails"
@@ -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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module AbstractNotifier
2
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
3
5
  end
@@ -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.0
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-20 00:00:00.000000000 Z
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