hub_kernel-api 0.7.0 → 0.8.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: 012cd9631dd8925bcd3d6982acc076ee8ade6a159dbca527d3618ba4ff80eec4
4
- data.tar.gz: 98850fb2e56aca0a182d1f70adc2deedb440e9b54f0f188e321a2738034d8991
3
+ metadata.gz: a1ab149c312d3eededfba4646f9903a4113369fed1869f5e9165623d60e05b0d
4
+ data.tar.gz: 0c3f1837992e569bb231859be331eabaf3dfa0d37f7f4494078bed6fb1e8d68e
5
5
  SHA512:
6
- metadata.gz: b2e7fc3101f127f70f515be313c0532efd5a64bce8f568dc693fa2e7e3a962dad5703ea5a295e3020cc56b644fc283854a140ac24d7f588d891227b30934bf70
7
- data.tar.gz: 67b21cabf1dd75ad74c7c97a3d908432a7c508c5fd39b13a3108a63ede102b8864fc4dde26c47f6da666dbdd3234351e764a3d1d0f6431d4275fc94f7dbb12e9
6
+ metadata.gz: 00c278912444e2bf2ad857e06a48fc16d166e251d2e51ee3a60679e7149eb422c1e49eb46340273a22774104a152b5b1506bd705898484ff20f0a36b036e2377
7
+ data.tar.gz: 8eb8929362a24395413e2191cc40e5f6d99089f13624bcb8b917af814c1bedfd7022aa75ef9541d5beeb7d1ba60c5c5ed0c597f8a87f951f97d0b183a9274144
data/README.md CHANGED
@@ -27,6 +27,10 @@ exposes no methods, when two served hubs answer at the same address, or when a s
27
27
  hub's exposed list has a problem, naming each. Inside `to_prepare` it runs again after
28
28
  every code reload.
29
29
 
30
+ `HubKernel::Api.hubs` reads and writes hub_kernel-interface's one served list,
31
+ `HubKernel::Interface.hubs`, so every interface gem in the host, such as hub_kernel-mcp,
32
+ serves the same hubs at the same names. The list is set once, through either gem.
33
+
30
34
  The base controller's own sign-in runs before every call. The permission check and account
31
35
  scope must also be set, `HubKernel::Authz.check` and `HubKernel::Context.scope`, as
32
36
  hub_kernel-interface's readme describes. Mount the engine:
@@ -8,8 +8,8 @@ module HubKernel
8
8
 
9
9
  def answer
10
10
  raise ActionController::RoutingError, "Not found" unless asked_with_the_right_verb?
11
- return refuse_unlisted_values if unlisted_values.any?
12
11
 
12
+ HubKernel::Interface::CallReasons.refuse_unlisted_values(hub, params[:name], values: values, person: caller_person, account: caller_account)
13
13
  render json: { answer: hub.call_exposed(params[:name], values: values, person: caller_person, account: caller_account) }
14
14
  end
15
15
 
@@ -17,23 +17,11 @@ module HubKernel
17
17
 
18
18
  def asked_with_the_right_verb? = hub.exposed(params[:name])&.writes == request.post?
19
19
 
20
- def refuse_unlisted_values
21
- raise HubKernel::NotAllowed unless permitted?
22
-
23
- refused(HubKernel::Refused.new("#{params[:name]} does not take #{unlisted_values.join(", ")}"))
24
- end
25
-
26
- def permitted? = hub.exposures_for(person: caller_person, account: caller_account).any? { |exposure| exposure.name.to_s == params[:name] }
27
-
28
- def unlisted_values = values.keys - hub.exposed(params[:name]).takes
29
-
30
20
  def values = request.query_parameters.merge(request.request_parameters).deep_symbolize_keys
31
21
 
32
22
  def refused(refusal) = render(json: { error: refusal.message }, status: :unprocessable_content)
33
23
 
34
- def missing_record(missing)
35
- render json: { error: "No #{missing.model.demodulize.underscore.humanize(capitalize: false)} has the id #{missing.id}" }, status: :not_found
36
- end
24
+ def missing_record(missing) = render(json: { error: HubKernel::Interface::CallReasons.missing_record(missing) }, status: :not_found)
37
25
  end
38
26
  end
39
27
  end
@@ -1,5 +1,5 @@
1
1
  module HubKernel
2
2
  module Api
3
- VERSION = "0.7.0"
3
+ VERSION = "0.8.0"
4
4
  end
5
5
  end
@@ -4,33 +4,20 @@ require "hub_kernel/api/engine"
4
4
 
5
5
  module HubKernel
6
6
  module Api
7
- class UnservableHubError < StandardError; end
7
+ UnservableHubError = HubKernel::Interface::UnservableHubError
8
8
 
9
- mattr_accessor :hubs, default: []
10
9
  mattr_accessor :base_controller, default: "ActionController::API"
11
10
  mattr_accessor :person_method
12
11
  mattr_accessor :account_method
13
12
 
14
- def self.find(name) = addresses[name]
13
+ def self.hubs = HubKernel::Interface.hubs
15
14
 
16
- def self.check!
17
- problems = unexposed_hubs + shared_addresses + exposure_problems
18
- raise UnservableHubError, problems.join("\n") if problems.any?
15
+ def self.hubs=(hubs)
16
+ HubKernel::Interface.hubs = hubs
19
17
  end
20
18
 
21
- def self.addresses = served.to_h
19
+ def self.find(name) = HubKernel::Interface.find(name)
22
20
 
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
21
+ def self.check! = HubKernel::Interface.check!
35
22
  end
36
23
  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.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tylercschneider
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.3'
32
+ version: '0.6'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.3'
39
+ version: '0.6'
40
40
  description: 'hub_kernel-api gives any hub built on hub_kernel a JSON API: the host
41
41
  lists the hubs it serves, and every call goes through the host''s sign-in, permission
42
42
  check and account scope.'