hub_kernel-interface 0.3.0 → 0.4.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 +5 -0
- data/lib/hub_kernel/interface/version.rb +1 -1
- data/lib/hub_kernel/interface.rb +21 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9385ca6b5908cfc7854200c351dd6f6cbe30a90c850d14a7519c4e73a5d2eeeb
|
|
4
|
+
data.tar.gz: 199574b3bc71a071a97670a97dd8ab08747945b45216d1eac24d21f22ffa965a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 96ef67da95a65e5fd1f26c3fc6ef25e9ad0a9fb28a742b03ce2399aefb5360ccddcb4c764c04a2255b685b542a1d612937163b252b47ee7c2eb7cc2888688618
|
|
7
|
+
data.tar.gz: e36173e0a4b7f957323969718216df7c7c0ca5083ba1852ac094c77d75579b9da986e64c8c11c996e4efb139379d77a08862b773f557820f0b1f13532df09fc3
|
data/README.md
CHANGED
|
@@ -55,6 +55,11 @@ HubKernel::Interface.served # => { "supplies" => Supplies, "money" =>
|
|
|
55
55
|
The permission check is still asked about a hub served under a chosen name by its own name,
|
|
56
56
|
such as `ledger:record_spend`.
|
|
57
57
|
|
|
58
|
+
An interface gem's boot check runs `HubKernel::Interface.check!`, which raises
|
|
59
|
+
`HubKernel::Interface::UnservableHubError` naming every problem in the served list at once:
|
|
60
|
+
an entry that exposes no methods, two entries that answer at the same name, and each
|
|
61
|
+
problem in a served hub's exposed list.
|
|
62
|
+
|
|
58
63
|
`Supplies.exposure_problems` names each exposed method the hub has no method for, or lists
|
|
59
64
|
with values it does not take. `HubKernel::Interface::ExposingHubs.list` holds every hub that
|
|
60
65
|
declares an exposed method.
|
data/lib/hub_kernel/interface.rb
CHANGED
|
@@ -3,12 +3,32 @@ require "hub_kernel/exposes"
|
|
|
3
3
|
|
|
4
4
|
module HubKernel
|
|
5
5
|
module Interface
|
|
6
|
+
class UnservableHubError < StandardError; end
|
|
7
|
+
|
|
6
8
|
singleton_class.attr_writer :hubs
|
|
7
9
|
|
|
8
10
|
def self.hubs = @hubs ||= []
|
|
9
11
|
|
|
10
12
|
def self.find(name) = served[name]
|
|
11
13
|
|
|
12
|
-
def self.
|
|
14
|
+
def self.check!
|
|
15
|
+
problems = unexposed_hubs + shared_names + exposure_problems
|
|
16
|
+
raise UnservableHubError, problems.join("\n") if problems.any?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.unexposed_hubs = served.values.reject { |hub| hub.respond_to?(:exposures) && hub.exposures.any? }.map { |hub| "#{hub.name} exposes no methods to serve" }
|
|
20
|
+
|
|
21
|
+
def self.shared_names
|
|
22
|
+
served_pairs.group_by(&:first).select { |_name, pairs| pairs.size > 1 }.map do |name, pairs|
|
|
23
|
+
"#{pairs.map { |_name, hub| hub.name }.join(" and ")} both answer at #{name}"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.exposure_problems = served.values.select { |hub| hub.respond_to?(:exposure_problems) }.flat_map(&:exposure_problems)
|
|
28
|
+
|
|
29
|
+
def self.served_pairs = hubs.flat_map { |entry| entry.is_a?(Hash) ? entry.to_a : [ [ entry.name.demodulize.underscore, entry ] ] }
|
|
30
|
+
private_class_method :unexposed_hubs, :shared_names, :exposure_problems, :served_pairs
|
|
31
|
+
|
|
32
|
+
def self.served = served_pairs.to_h
|
|
13
33
|
end
|
|
14
34
|
end
|