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 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