hub_kernel-api 0.4.0 → 0.5.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 +6 -0
- data/lib/hub_kernel/api/version.rb +1 -1
- data/lib/hub_kernel/api.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: 005a2ef443ca851aa60b1e07bbf00d20f36ad682a7dcba572fcb2c5847181831
|
|
4
|
+
data.tar.gz: 3da76e3b5993936cc999d4641e2d4b70476a8fb7d86451294a7a5f583b85fb0c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36883d22bb606c36eca8c7e80620d1a8c07105254f41152a87e28c4317f91ff23ec58f5a6aa17971d106577695f25f2e8c5e3aa8b329108303a0ca8f341326fb
|
|
7
|
+
data.tar.gz: 78348ad9a3c18cffff53beadc24f99a15a5d0b4524a592da883e807966648bef9f550945bd059cacc60e03d60084bed3c0d8a8ead26c7d702baaca0c43eabaeb
|
data/README.md
CHANGED
|
@@ -17,9 +17,15 @@ HubKernel::Api.account_method = :current_account
|
|
|
17
17
|
|
|
18
18
|
Rails.application.config.to_prepare do
|
|
19
19
|
HubKernel::Api.hubs = [ Supplies ]
|
|
20
|
+
HubKernel::Api.check!
|
|
20
21
|
end
|
|
21
22
|
```
|
|
22
23
|
|
|
24
|
+
`HubKernel::Api.check!` raises `HubKernel::Api::UnservableHubError` when a served entry
|
|
25
|
+
exposes no methods, when two served hubs answer at the same address, or when a served
|
|
26
|
+
hub's exposed list has a problem, naming each. Inside `to_prepare` it runs again after
|
|
27
|
+
every code reload.
|
|
28
|
+
|
|
23
29
|
The base controller's own sign-in runs before every call. hub_kernel's permission check
|
|
24
30
|
and account scope must also be set, as hub_kernel's readme describes. Mount the engine:
|
|
25
31
|
|
data/lib/hub_kernel/api.rb
CHANGED
|
@@ -4,6 +4,8 @@ require "hub_kernel/api/engine"
|
|
|
4
4
|
|
|
5
5
|
module HubKernel
|
|
6
6
|
module Api
|
|
7
|
+
class UnservableHubError < StandardError; end
|
|
8
|
+
|
|
7
9
|
mattr_accessor :hubs, default: []
|
|
8
10
|
mattr_accessor :base_controller, default: "ActionController::API"
|
|
9
11
|
mattr_accessor :person_method
|
|
@@ -11,6 +13,24 @@ module HubKernel
|
|
|
11
13
|
|
|
12
14
|
def self.find(name) = addresses[name]
|
|
13
15
|
|
|
14
|
-
def self.
|
|
16
|
+
def self.check!
|
|
17
|
+
problems = unexposed_hubs + shared_addresses + exposure_problems
|
|
18
|
+
raise UnservableHubError, problems.join("\n") if problems.any?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.addresses = served.to_h
|
|
22
|
+
|
|
23
|
+
def self.served = hubs.flat_map { |entry| entry.is_a?(Hash) ? entry.to_a : [ [ entry.name.demodulize.underscore, entry ] ] }
|
|
24
|
+
|
|
25
|
+
def self.unexposed_hubs = served.map(&:last).reject { |hub| hub.respond_to?(:exposures) }.map { |hub| "#{hub.name} exposes no methods to serve" }
|
|
26
|
+
|
|
27
|
+
def self.shared_addresses
|
|
28
|
+
served.group_by(&:first).select { |_address, entries| entries.size > 1 }.map do |address, entries|
|
|
29
|
+
"#{entries.map { |_address, hub| hub.name }.join(" and ")} both answer at #{address}"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.exposure_problems = served.map(&:last).select { |hub| hub.respond_to?(:exposure_problems) }.flat_map(&:exposure_problems)
|
|
34
|
+
private_class_method :served, :unexposed_hubs, :shared_addresses, :exposure_problems
|
|
15
35
|
end
|
|
16
36
|
end
|