railjet-bus 1.0 → 1.1.0

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