shogun 6.2.1 → 6.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/shogun/version.rb +1 -1
- data/scaffold/generate/resource.rb +15 -0
- data/scaffold/generate/resource/create.rb +10 -0
- data/scaffold/generate/resource/create/authorizer.rb +21 -0
- data/scaffold/generate/resource/create/control.rb +27 -0
- data/scaffold/generate/resource/create/denormalizer.rb +31 -0
- data/scaffold/generate/resource/create/normalizer.rb +22 -0
- data/scaffold/generate/resource/create/validator.rb +14 -0
- data/scaffold/generate/resource/destroy.rb +11 -0
- data/scaffold/generate/resource/destroy/authorizer.rb +21 -0
- data/scaffold/generate/resource/destroy/control.rb +37 -0
- data/scaffold/generate/resource/destroy/denormalizer.rb +31 -0
- data/scaffold/generate/resource/destroy/normalizer.rb +28 -0
- data/scaffold/generate/resource/destroy/validator.rb +20 -0
- data/scaffold/generate/resource/endpoint.rb +16 -0
- data/scaffold/generate/resource/list.rb +10 -0
- data/scaffold/generate/resource/list/authorizer.rb +21 -0
- data/scaffold/generate/resource/list/control.rb +26 -0
- data/scaffold/generate/resource/list/denormalizer.rb +33 -0
- data/scaffold/generate/resource/list/normalizer.rb +58 -0
- data/scaffold/generate/resource/list/validator.rb +24 -0
- data/scaffold/generate/resource/model.rb +21 -0
- data/scaffold/generate/resource/null.rb +11 -0
- data/scaffold/generate/resource/presenter.rb +24 -0
- data/scaffold/generate/resource/show.rb +10 -0
- data/scaffold/generate/resource/show/authorizer.rb +21 -0
- data/scaffold/generate/resource/show/control.rb +31 -0
- data/scaffold/generate/resource/show/denormalizer.rb +18 -0
- data/scaffold/generate/resource/show/normalizer.rb +37 -0
- data/scaffold/generate/resource/show/validator.rb +21 -0
- data/scaffold/generate/resource/update.rb +11 -0
- data/scaffold/generate/resource/update/authorizer.rb +21 -0
- data/scaffold/generate/resource/update/control.rb +37 -0
- data/scaffold/generate/resource/update/denormalizer.rb +31 -0
- data/scaffold/generate/resource/update/normalizer.rb +37 -0
- data/scaffold/generate/resource/update/validator.rb +14 -0
- data/scaffold/new/project/Envfile +17 -0
- data/scaffold/new/project/Gemfile +18 -0
- data/scaffold/new/project/LICENSE +22 -0
- data/scaffold/new/project/Procfile +1 -0
- data/scaffold/new/project/README.md +32 -0
- data/scaffold/new/project/Rakefile +9 -0
- data/scaffold/new/project/config.ru +8 -0
- data/scaffold/new/project/config/puma.rb +167 -0
- data/scaffold/new/project/gitignore +39 -0
- data/scaffold/new/project/lib/namespace.rb +29 -0
- data/scaffold/new/project/lib/namespace/accounts.rb +15 -0
- data/scaffold/new/project/lib/namespace/accounts/create.rb +10 -0
- data/scaffold/new/project/lib/namespace/accounts/create/control.rb +27 -0
- data/scaffold/new/project/lib/namespace/accounts/create/denormalizer.rb +35 -0
- data/scaffold/new/project/lib/namespace/accounts/create/normalizer.rb +42 -0
- data/scaffold/new/project/lib/namespace/accounts/create/validator.rb +34 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy.rb +11 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/authorizer.rb +21 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/control.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/denormalizer.rb +35 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/normalizer.rb +28 -0
- data/scaffold/new/project/lib/namespace/accounts/destroy/validator.rb +20 -0
- data/scaffold/new/project/lib/namespace/accounts/endpoint.rb +16 -0
- data/scaffold/new/project/lib/namespace/accounts/list.rb +10 -0
- data/scaffold/new/project/lib/namespace/accounts/list/control.rb +26 -0
- data/scaffold/new/project/lib/namespace/accounts/list/denormalizer.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/list/normalizer.rb +58 -0
- data/scaffold/new/project/lib/namespace/accounts/list/validator.rb +24 -0
- data/scaffold/new/project/lib/namespace/accounts/model.rb +49 -0
- data/scaffold/new/project/lib/namespace/accounts/null.rb +11 -0
- data/scaffold/new/project/lib/namespace/accounts/presenter.rb +40 -0
- data/scaffold/new/project/lib/namespace/accounts/show.rb +10 -0
- data/scaffold/new/project/lib/namespace/accounts/show/control.rb +31 -0
- data/scaffold/new/project/lib/namespace/accounts/show/denormalizer.rb +22 -0
- data/scaffold/new/project/lib/namespace/accounts/show/normalizer.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/show/validator.rb +21 -0
- data/scaffold/new/project/lib/namespace/accounts/update.rb +11 -0
- data/scaffold/new/project/lib/namespace/accounts/update/authorizer.rb +21 -0
- data/scaffold/new/project/lib/namespace/accounts/update/control.rb +37 -0
- data/scaffold/new/project/lib/namespace/accounts/update/denormalizer.rb +35 -0
- data/scaffold/new/project/lib/namespace/accounts/update/normalizer.rb +52 -0
- data/scaffold/new/project/lib/namespace/accounts/update/validator.rb +47 -0
- data/scaffold/new/project/lib/namespace/errors.rb +8 -0
- data/scaffold/new/project/lib/namespace/errors/denormalizer.rb +24 -0
- data/scaffold/new/project/lib/namespace/errors/presenter.rb +16 -0
- data/scaffold/new/project/lib/namespace/server.rb +54 -0
- data/scaffold/new/project/lib/namespace/sessions.rb +11 -0
- data/scaffold/new/project/lib/namespace/sessions/create.rb +11 -0
- data/scaffold/new/project/lib/namespace/sessions/create/authorizer.rb +19 -0
- data/scaffold/new/project/lib/namespace/sessions/create/control.rb +26 -0
- data/scaffold/new/project/lib/namespace/sessions/create/denormalizer.rb +30 -0
- data/scaffold/new/project/lib/namespace/sessions/create/normalizer.rb +31 -0
- data/scaffold/new/project/lib/namespace/sessions/create/validator.rb +21 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy.rb +10 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/control.rb +32 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/denormalizer.rb +29 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/normalizer.rb +20 -0
- data/scaffold/new/project/lib/namespace/sessions/destroy/validator.rb +16 -0
- data/scaffold/new/project/lib/namespace/sessions/endpoint.rb +13 -0
- data/scaffold/new/project/lib/namespace/sessions/model.rb +25 -0
- data/scaffold/new/project/lib/namespace/sessions/presenter.rb +40 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/create/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/destroy/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/endpoint_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/list/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/model_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/presenter_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/show/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/accounts/update/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/errors/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/errors/presenter_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/errors/presenters_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/model_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/server_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/create/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/control_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/denormalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/normalizer_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/destroy/validator_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/endpoint_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/model_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace/sessions/presenter_spec.rb +1 -0
- data/scaffold/new/project/spec/lib/namespace_spec.rb +7 -0
- data/scaffold/new/project/spec/spec_helper.rb +3 -0
- metadata +138 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b911d9b9871b623aa87e07a5595d93c302e78757
|
4
|
+
data.tar.gz: c8f17acac6f2758f5a754573f2e8723eebabe841
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c06a16488a91d424fd701f3365677fe5026c71323be678161d8270839706378844dad7fe0318702dd86a10064a6ebbd3985509668779656fe125373f5c32045
|
7
|
+
data.tar.gz: 8c89b10d59e721c3cca403e5e48506212b9d034f4197c6b4ce6b74c6bddc6263c923947c60e5bb7649060bc9790a066b30be4a5af6b1d4236e6a8a7028aa51e6
|
data/lib/shogun/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
NAMESPACE = "{{resource}}"
|
4
|
+
|
5
|
+
require_relative "{{resource}}/create"
|
6
|
+
require_relative "{{resource}}/destroy"
|
7
|
+
require_relative "{{resource}}/endpoint"
|
8
|
+
require_relative "{{resource}}/list"
|
9
|
+
require_relative "{{resource}}/model"
|
10
|
+
require_relative "{{resource}}/null"
|
11
|
+
require_relative "{{resource}}/presenter"
|
12
|
+
require_relative "{{resource}}/show"
|
13
|
+
require_relative "{{resource}}/update"
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Create
|
4
|
+
class Authorizer
|
5
|
+
include Shogun::Authorizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
def initialize(requester:, resource:)
|
9
|
+
if requester
|
10
|
+
@requester = requester.account
|
11
|
+
end
|
12
|
+
@resource = resource
|
13
|
+
end
|
14
|
+
|
15
|
+
def allowed?
|
16
|
+
@requester == @resource
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Create
|
4
|
+
class Control
|
5
|
+
include Shogun::Control
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
def initialize(payload:)
|
9
|
+
@normalizer = Normalizer.new(raw: payload.to_hash)
|
10
|
+
@validator = Validator.new(data: @normalizer)
|
11
|
+
|
12
|
+
if @validator.valid?
|
13
|
+
@model = Model.create(@normalizer.to_hash)
|
14
|
+
|
15
|
+
@presenter = Presenter.new(resource: @model)
|
16
|
+
@denormalizer = Denormalizer.new(object: @presenter)
|
17
|
+
@status = OK
|
18
|
+
else
|
19
|
+
@presenters = Shogun::Presenters.new(resources: @validator.invalids, cast: Errors::Presenter)
|
20
|
+
@denormalizer = Errors::Denormalizer.new(object: @presenters)
|
21
|
+
@status = UNPROCESSABLE_ENTITY
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Create
|
4
|
+
class Denormalizer
|
5
|
+
include Shogun::Denormalizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
MAPPING = {
|
9
|
+
"id" => "id",
|
10
|
+
"created_at" => "created_at",
|
11
|
+
"destroyed_at" => "destroyed_at",
|
12
|
+
"updated_at" => "updated_at",
|
13
|
+
"href" => "href"
|
14
|
+
}
|
15
|
+
|
16
|
+
def initialize(object:)
|
17
|
+
@object = object
|
18
|
+
@meta = object.meta
|
19
|
+
@links = object.links
|
20
|
+
@linked = object.linked
|
21
|
+
end
|
22
|
+
|
23
|
+
private def document
|
24
|
+
mapping.inject({}) do |hash, (field, name)|
|
25
|
+
hash.merge(field => @object.public_send(name))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Create
|
4
|
+
class Normalizer
|
5
|
+
include Shogun::Normalizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
ATTRIBUTES = %w|attribute|
|
9
|
+
|
10
|
+
def initialize(raw:)
|
11
|
+
if raw[namespace]
|
12
|
+
@attribute = raw[namespace]["attribute"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def attribute
|
17
|
+
@attribute.strip if @attribute.is_a?(String)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Destroy
|
4
|
+
require_relative "destroy/control"
|
5
|
+
require_relative "destroy/authorizer"
|
6
|
+
require_relative "destroy/denormalizer"
|
7
|
+
require_relative "destroy/normalizer"
|
8
|
+
require_relative "destroy/validator"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Destroy
|
4
|
+
class Authorizer
|
5
|
+
include Shogun::Authorizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
def initialize(requester:, resource:)
|
9
|
+
if requester
|
10
|
+
@requester = requester.account
|
11
|
+
end
|
12
|
+
@resource = resource
|
13
|
+
end
|
14
|
+
|
15
|
+
def allowed?
|
16
|
+
@requester == @resource
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Destroy
|
4
|
+
class Control
|
5
|
+
include Shogun::Control
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
def initialize(payload:)
|
9
|
+
@normalizer = Normalizer.new(raw: payload.to_hash)
|
10
|
+
@validator = Validator.new(data: @normalizer)
|
11
|
+
|
12
|
+
if @validator.valid?
|
13
|
+
@session = Sessions::Model.find_by(id: @normalizer.session)
|
14
|
+
@model = Model.find_by(id: @normalizer.id)
|
15
|
+
@authorizer = Authorizer.new(requester: @session, resource: @model)
|
16
|
+
|
17
|
+
case
|
18
|
+
when @model && @authorizer.allowed?
|
19
|
+
@model.destroy
|
20
|
+
@presenter = Presenter.new(resource: @model, meta: @normalizer.as_meta)
|
21
|
+
@denormalizer = Denormalizer.new(object: @presenter)
|
22
|
+
@status = OK
|
23
|
+
when @model && @authorizer.denied?
|
24
|
+
@status = UNAUTHORIZED
|
25
|
+
else
|
26
|
+
@status = NOT_FOUND
|
27
|
+
end
|
28
|
+
else
|
29
|
+
@presenters = Shogun::Presenters.new(resources: @validator.invalids, cast: Errors::Presenter)
|
30
|
+
@denormalizer = Errors::Denormalizer.new(object: @presenters)
|
31
|
+
@status = UNPROCESSABLE_ENTITY
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Destroy
|
4
|
+
class Denormalizer
|
5
|
+
include Shogun::Denormalizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
MAPPING = {
|
9
|
+
"id" => "id",
|
10
|
+
"created_at" => "created_at",
|
11
|
+
"destroyed_at" => "destroyed_at",
|
12
|
+
"updated_at" => "updated_at",
|
13
|
+
"href" => "href"
|
14
|
+
}
|
15
|
+
|
16
|
+
def initialize(object:)
|
17
|
+
@object = object
|
18
|
+
@meta = object.meta
|
19
|
+
@links = object.links
|
20
|
+
@linked = object.linked
|
21
|
+
end
|
22
|
+
|
23
|
+
private def document
|
24
|
+
mapping.inject({}) do |hash, (field, name)|
|
25
|
+
hash.merge(field => @object.public_send(name))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Destroy
|
4
|
+
class Normalizer
|
5
|
+
include Shogun::Normalizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
METADATA = %w|id|
|
9
|
+
|
10
|
+
def initialize(raw:)
|
11
|
+
@id = raw["id"]
|
12
|
+
|
13
|
+
if raw["rack.authentication"] && raw["rack.authentication"]["sessions"]
|
14
|
+
@session = raw["rack.authentication"]["sessions"]["id"]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def id
|
19
|
+
@id
|
20
|
+
end
|
21
|
+
|
22
|
+
def session
|
23
|
+
@session
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module Destroy
|
4
|
+
class Validator
|
5
|
+
include Shogun::Validator
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
ID_MATCH = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
|
9
|
+
|
10
|
+
def initialize(data:)
|
11
|
+
@verifiers = [
|
12
|
+
Shogun::Verifier::Presence.new(data: data.id, name: "id"),
|
13
|
+
Shogun::Verifier::Match.new(data: data.id, name: "id", comparison: ID_MATCH),
|
14
|
+
Shogun::Verifier::Presence.new(data: data.session, name: "session")
|
15
|
+
]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
class Endpoint
|
4
|
+
include {{resource_module}}
|
5
|
+
include Shogun::Endpoint
|
6
|
+
|
7
|
+
def initialize(router:)
|
8
|
+
router.push route: route(verb: :get, control: List::Control)
|
9
|
+
router.push route: route(verb: :post, control: Create::Control)
|
10
|
+
router.push route: route(verb: :get, matcher: /(?<id>.+)/, control: Show::Control)
|
11
|
+
router.push route: route(verb: :patch, matcher: /(?<id>.+)/, control: Update::Control)
|
12
|
+
router.push route: route(verb: :delete, matcher: /(?<id>.+)/, control: Destroy::Control)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module List
|
4
|
+
class Authorizer
|
5
|
+
include Shogun::Authorizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
def initialize(requester:, resource:)
|
9
|
+
if requester
|
10
|
+
@requester = requester.account
|
11
|
+
end
|
12
|
+
@resource = resource
|
13
|
+
end
|
14
|
+
|
15
|
+
def allowed?
|
16
|
+
@requester == @resource
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module List
|
4
|
+
class Control
|
5
|
+
include Shogun::Control
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
def initialize(payload:)
|
9
|
+
@normalizer = Normalizer.new(raw: payload.to_hash)
|
10
|
+
@validator = Validator.new(data: @normalizer)
|
11
|
+
|
12
|
+
if @validator.valid?
|
13
|
+
@models = Model.limit(@normalizer.limit).where(@normalizer.filters).includes(@normalizer.includes)
|
14
|
+
@presenters = Shogun::Presenters.new(resources: @models, cast: Presenter, includes: @normalizer.includes, meta: @normalizer.as_meta)
|
15
|
+
@denormalizer = Denormalizer.new(object: @presenters, fields: @normalizer.fields)
|
16
|
+
@status = OK
|
17
|
+
else
|
18
|
+
@presenters = Shogun::Presenters.new(resources: @validator.invalids, cast: Errors::Presenter)
|
19
|
+
@denormalizer = Errors::Denormalizer.new(object: @presenters)
|
20
|
+
@status = UNPROCESSABLE_ENTITY
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module {{namespace_module}}
|
2
|
+
module {{resource_module}}
|
3
|
+
module List
|
4
|
+
class Denormalizer
|
5
|
+
include Shogun::Denormalizer
|
6
|
+
include {{resource_module}}
|
7
|
+
|
8
|
+
MAPPING = {
|
9
|
+
"id" => "id",
|
10
|
+
"created_at" => "created_at",
|
11
|
+
"destroyed_at" => "destroyed_at",
|
12
|
+
"updated_at" => "updated_at",
|
13
|
+
"href" => "href",
|
14
|
+
LINKS_KEY => "links",
|
15
|
+
META_KEY => "meta",
|
16
|
+
LINKED_KEY => "linked"
|
17
|
+
}
|
18
|
+
|
19
|
+
private def document
|
20
|
+
@object.map do |object|
|
21
|
+
if @fields.one?
|
22
|
+
object.public_send(@fields.first)
|
23
|
+
else
|
24
|
+
@fields.inject({}) do |hash, field|
|
25
|
+
hash.merge(field => object.public_send(mapping[field]))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|