railjet-bus 1.0 → 1.1.0

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
  SHA1:
3
- metadata.gz: 67eb9351072a50e7442ebefa697f06cbbbeaf964
4
- data.tar.gz: 8b5d05cac87ee382489ed4e85f3420c1c1c7ef80
3
+ metadata.gz: dc738a24deb19984756e64ac67da77cc9a745485
4
+ data.tar.gz: bd1166edeb6eefafabf3b4d3aadc6203926efb82
5
5
  SHA512:
6
- metadata.gz: 504e95cce3845574f4df196783a3968f81af84b93e6e153a4361997b78246e1a7b5ae3b5ae681f4c74bf62d881d9f343232334c23ad75293e4413d1821ec09fc
7
- data.tar.gz: 39c35a636d34a82ea4d0dcba8cff9ecaddde4a3b54e1cff2374beddf28d79dd19797b737a14a2b021f36299415f5682e26bc38a781c2b999f9000cc341e0b7b6
6
+ metadata.gz: 724e45aeb16d33534055a035a819124bc58c1200daf7b569dd381936e45fdbaa08760767f86e02e1c600d769ddb473fe10da09a33078b87f9321ba27df87669e
7
+ data.tar.gz: d51f4b24be4d18379a5e0236b44d6426306e84459d17bd5c9b8e59c8e00bb4e84c8e2aa8b934c10d2a1d67848e852324c0650dfcdccd96bc291d4fcf3701d3cb
data/Gemfile.lock CHANGED
@@ -10,7 +10,7 @@ GIT
10
10
  PATH
11
11
  remote: .
12
12
  specs:
13
- railjet-bus (1.0)
13
+ railjet-bus (1.1.0)
14
14
  railjet (~> 2.0)
15
15
  wisper (~> 2.0)
16
16
  wisper-sidekiq (~> 0.0.1)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0
1
+ 1.1.0
@@ -1,5 +1,5 @@
1
1
  module Railjet
2
2
  class Bus
3
- VERSION = "1.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
data/lib/railjet/bus.rb CHANGED
@@ -28,8 +28,60 @@ module Railjet
28
28
  bus.subscribe(subscriber, on: event, prefix: true, async: true)
29
29
  end
30
30
 
31
+ def subscribe_listener(listener)
32
+ listener.subscriptions.each do |event|
33
+ subscribe(event, listener)
34
+ end
35
+ end
36
+
31
37
  private
32
38
 
33
39
  attr_reader :bus
34
40
  end
41
+
42
+ class Listener
43
+ include Railjet::Util::UseCaseHelper
44
+
45
+ class << self
46
+ def subscriptions
47
+ @subscriptions ||= []
48
+ end
49
+
50
+ def listen_to(event, &block)
51
+ subscriptions << event
52
+ define_listeners(event, &block)
53
+ end
54
+
55
+ private
56
+
57
+ def define_listeners(event, &block)
58
+ define_listener(event, &block)
59
+ define_listener_caller(event)
60
+ end
61
+
62
+ def define_listener(event, &block)
63
+ define_method listener_name(event) do |**kwargs|
64
+ around_listener(event, kwargs) { |args| instance_exec(args, &block) }
65
+ end
66
+ end
67
+
68
+ def define_listener_caller(event)
69
+ name = listener_name(event)
70
+ define_singleton_method name do |**kwargs|
71
+ new.public_send(name, **kwargs)
72
+ end
73
+ end
74
+
75
+ def listener_name(event)
76
+ "on_#{event}"
77
+ end
78
+ end
79
+
80
+ # This around block does nothing
81
+ # but it's there as point of extensions so it could be easily overridden in
82
+ # sub-class if some additional setup is needed
83
+ def around_listener(event, **kwargs)
84
+ yield(**kwargs)
85
+ end
86
+ end
35
87
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railjet-bus
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Krzysztof Zalewski
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-11-23 00:00:00.000000000 Z
11
+ date: 2018-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railjet