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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e54d19b67798c82119ecff94f0f294353cd927da83a55282b2f61ffbf111061d
4
- data.tar.gz: 1d48fc7eb9520cb6300315462a74159b68a0e236c797f87d97964c4455eefce1
3
+ metadata.gz: 005a2ef443ca851aa60b1e07bbf00d20f36ad682a7dcba572fcb2c5847181831
4
+ data.tar.gz: 3da76e3b5993936cc999d4641e2d4b70476a8fb7d86451294a7a5f583b85fb0c
5
5
  SHA512:
6
- metadata.gz: fa3f514ecb094b92a30e80fc390414abf616e68c8b479485462d5f7298d77cab57f3d813ced143fbafc58330f8685a7cac2d94aad14693a006730ff0c0ba6060
7
- data.tar.gz: 07c3ae8786feb3ad091474071d2dc7699ee8cc0b7ebb798f95cd53c7afaac53096e7df8d261bbd5c1e01ba4f13a613998b40cea868c4afccabcc12a0789c0fe9
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
 
@@ -1,5 +1,5 @@
1
1
  module HubKernel
2
2
  module Api
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
@@ -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.addresses = hubs.reduce({}) { |found, entry| found.merge(entry.is_a?(Hash) ? entry : { entry.name.demodulize.underscore => entry }) }
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hub_kernel-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tylercschneider