hub_kernel 0.2.0 → 0.3.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 +4 -4
- data/README.md +16 -0
- data/lib/hub_kernel/hubs.rb +15 -0
- data/lib/hub_kernel/ports.rb +12 -1
- data/lib/hub_kernel/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2e21318b337715e24c66ec08ab39f65b4a11aa4eb43783a05bf6f7548dd7f8fc
|
|
4
|
+
data.tar.gz: 36790eed17097fefd6b6c2eaa1a6c42b712b7b1cc9df510ad1b0b8f2e4136a3c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 776e13a1c4fb5be4f499fe4a2647d845fb5bf9b972bd7e045b5fa4c754130bb633a0841230f2aeee684d017fc8d23be144db551915e84eb240a9458c5c8bc78d
|
|
7
|
+
data.tar.gz: 238d3e0722eb7c89ed1a32237a1d7edcf68933034aa98df541001ac8bbaccaaf81ee0d96d90029e4fed3cb523d4c80510ccbb72c9b3ae2d3948257e0a1e9f448
|
data/README.md
CHANGED
|
@@ -28,6 +28,22 @@ returns its answer. An error it raises reaches the caller unchanged. Calling a p
|
|
|
28
28
|
app left unfilled raises `HubKernel::UnwiredPortError`, such as "Supplies' spend
|
|
29
29
|
recorder is not wired".
|
|
30
30
|
|
|
31
|
+
### The start check
|
|
32
|
+
Every hub that declares a port is on `HubKernel::Hubs.list`. Call
|
|
33
|
+
`HubKernel::Hubs.check!` after the app fills its ports, and the app refuses to start
|
|
34
|
+
while any port is unfilled:
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
Rails.application.config.to_prepare do
|
|
38
|
+
Supplies.spend_recorder = Finance.method(:record_spend)
|
|
39
|
+
HubKernel::Hubs.check!
|
|
40
|
+
end
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
It raises `HubKernel::UnwiredPortError` naming every unfilled port with its hub, one per
|
|
44
|
+
line. Running it inside `to_prepare` checks again after every code reload, and a hub
|
|
45
|
+
declared again on a reload stays on the list once.
|
|
46
|
+
|
|
31
47
|
## Installation
|
|
32
48
|
Add this line to your application's Gemfile:
|
|
33
49
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module HubKernel
|
|
2
|
+
module Hubs
|
|
3
|
+
def self.add(hub)
|
|
4
|
+
list.reject! { |listed| listed.name == hub.name }
|
|
5
|
+
list << hub
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def self.list = @list ||= []
|
|
9
|
+
|
|
10
|
+
def self.check!
|
|
11
|
+
unwired = list.flat_map(&:unwired_ports)
|
|
12
|
+
raise UnwiredPortError, unwired.join("\n") if unwired.any?
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
data/lib/hub_kernel/ports.rb
CHANGED
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
require "active_support/core_ext/string/inflections"
|
|
2
|
+
require "hub_kernel/hubs"
|
|
2
3
|
|
|
3
4
|
module HubKernel
|
|
4
5
|
class UnwiredPortError < StandardError; end
|
|
5
6
|
|
|
6
7
|
module Ports
|
|
7
8
|
def port(name, as:)
|
|
9
|
+
Hubs.add(self)
|
|
10
|
+
declared_ports << name
|
|
8
11
|
singleton_class.attr_writer name
|
|
9
12
|
define_singleton_method(name) { instance_variable_get(:"@#{name}") || unwired(name) }
|
|
10
13
|
define_singleton_method(as) { |*args, **options| public_send(name).call(*args, **options) }
|
|
11
14
|
end
|
|
12
15
|
|
|
16
|
+
def unwired_ports
|
|
17
|
+
declared_ports.reject { |name| instance_variable_get(:"@#{name}") }.map { |name| unwired_message(name) }
|
|
18
|
+
end
|
|
19
|
+
|
|
13
20
|
private
|
|
14
21
|
|
|
22
|
+
def declared_ports = @declared_ports ||= []
|
|
23
|
+
|
|
15
24
|
def unwired(name)
|
|
16
|
-
->(*, **) { raise UnwiredPortError,
|
|
25
|
+
->(*, **) { raise UnwiredPortError, unwired_message(name) }
|
|
17
26
|
end
|
|
18
27
|
|
|
28
|
+
def unwired_message(name) = "#{hub_name} #{name.to_s.tr("_", " ")} is not wired"
|
|
29
|
+
|
|
19
30
|
def hub_name = self.name.demodulize.then { |hub| hub.end_with?("s") ? "#{hub}'" : "#{hub}'s" }
|
|
20
31
|
end
|
|
21
32
|
end
|
data/lib/hub_kernel/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hub_kernel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- tylercschneider
|
|
@@ -46,6 +46,7 @@ files:
|
|
|
46
46
|
- lib/hub_kernel/engine.rb
|
|
47
47
|
- lib/hub_kernel/events.rb
|
|
48
48
|
- lib/hub_kernel/follow_up.rb
|
|
49
|
+
- lib/hub_kernel/hubs.rb
|
|
49
50
|
- lib/hub_kernel/markup.rb
|
|
50
51
|
- lib/hub_kernel/ports.rb
|
|
51
52
|
- lib/hub_kernel/version.rb
|