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 +4 -4
- data/README.md +4 -0
- data/app/controllers/hub_kernel/api/hub_calls_controller.rb +2 -14
- data/lib/hub_kernel/api/version.rb +1 -1
- data/lib/hub_kernel/api.rb +6 -19
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a1ab149c312d3eededfba4646f9903a4113369fed1869f5e9165623d60e05b0d
|
|
4
|
+
data.tar.gz: 0c3f1837992e569bb231859be331eabaf3dfa0d37f7f4494078bed6fb1e8d68e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lib/hub_kernel/api.rb
CHANGED
|
@@ -4,33 +4,20 @@ require "hub_kernel/api/engine"
|
|
|
4
4
|
|
|
5
5
|
module HubKernel
|
|
6
6
|
module Api
|
|
7
|
-
|
|
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.
|
|
13
|
+
def self.hubs = HubKernel::Interface.hubs
|
|
15
14
|
|
|
16
|
-
def self.
|
|
17
|
-
|
|
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.
|
|
19
|
+
def self.find(name) = HubKernel::Interface.find(name)
|
|
22
20
|
|
|
23
|
-
def self.
|
|
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.
|
|
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.
|
|
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.
|
|
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.'
|