shogun 6.2.1 → 6.2.2

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.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/lib/shogun/version.rb +1 -1
  3. data/scaffold/generate/resource.rb +15 -0
  4. data/scaffold/generate/resource/create.rb +10 -0
  5. data/scaffold/generate/resource/create/authorizer.rb +21 -0
  6. data/scaffold/generate/resource/create/control.rb +27 -0
  7. data/scaffold/generate/resource/create/denormalizer.rb +31 -0
  8. data/scaffold/generate/resource/create/normalizer.rb +22 -0
  9. data/scaffold/generate/resource/create/validator.rb +14 -0
  10. data/scaffold/generate/resource/destroy.rb +11 -0
  11. data/scaffold/generate/resource/destroy/authorizer.rb +21 -0
  12. data/scaffold/generate/resource/destroy/control.rb +37 -0
  13. data/scaffold/generate/resource/destroy/denormalizer.rb +31 -0
  14. data/scaffold/generate/resource/destroy/normalizer.rb +28 -0
  15. data/scaffold/generate/resource/destroy/validator.rb +20 -0
  16. data/scaffold/generate/resource/endpoint.rb +16 -0
  17. data/scaffold/generate/resource/list.rb +10 -0
  18. data/scaffold/generate/resource/list/authorizer.rb +21 -0
  19. data/scaffold/generate/resource/list/control.rb +26 -0
  20. data/scaffold/generate/resource/list/denormalizer.rb +33 -0
  21. data/scaffold/generate/resource/list/normalizer.rb +58 -0
  22. data/scaffold/generate/resource/list/validator.rb +24 -0
  23. data/scaffold/generate/resource/model.rb +21 -0
  24. data/scaffold/generate/resource/null.rb +11 -0
  25. data/scaffold/generate/resource/presenter.rb +24 -0
  26. data/scaffold/generate/resource/show.rb +10 -0
  27. data/scaffold/generate/resource/show/authorizer.rb +21 -0
  28. data/scaffold/generate/resource/show/control.rb +31 -0
  29. data/scaffold/generate/resource/show/denormalizer.rb +18 -0
  30. data/scaffold/generate/resource/show/normalizer.rb +37 -0
  31. data/scaffold/generate/resource/show/validator.rb +21 -0
  32. data/scaffold/generate/resource/update.rb +11 -0
  33. data/scaffold/generate/resource/update/authorizer.rb +21 -0
  34. data/scaffold/generate/resource/update/control.rb +37 -0
  35. data/scaffold/generate/resource/update/denormalizer.rb +31 -0
  36. data/scaffold/generate/resource/update/normalizer.rb +37 -0
  37. data/scaffold/generate/resource/update/validator.rb +14 -0
  38. data/scaffold/new/project/Envfile +17 -0
  39. data/scaffold/new/project/Gemfile +18 -0
  40. data/scaffold/new/project/LICENSE +22 -0
  41. data/scaffold/new/project/Procfile +1 -0
  42. data/scaffold/new/project/README.md +32 -0
  43. data/scaffold/new/project/Rakefile +9 -0
  44. data/scaffold/new/project/config.ru +8 -0
  45. data/scaffold/new/project/config/puma.rb +167 -0
  46. data/scaffold/new/project/gitignore +39 -0
  47. data/scaffold/new/project/lib/namespace.rb +29 -0
  48. data/scaffold/new/project/lib/namespace/accounts.rb +15 -0
  49. data/scaffold/new/project/lib/namespace/accounts/create.rb +10 -0
  50. data/scaffold/new/project/lib/namespace/accounts/create/control.rb +27 -0
  51. data/scaffold/new/project/lib/namespace/accounts/create/denormalizer.rb +35 -0
  52. data/scaffold/new/project/lib/namespace/accounts/create/normalizer.rb +42 -0
  53. data/scaffold/new/project/lib/namespace/accounts/create/validator.rb +34 -0
  54. data/scaffold/new/project/lib/namespace/accounts/destroy.rb +11 -0
  55. data/scaffold/new/project/lib/namespace/accounts/destroy/authorizer.rb +21 -0
  56. data/scaffold/new/project/lib/namespace/accounts/destroy/control.rb +37 -0
  57. data/scaffold/new/project/lib/namespace/accounts/destroy/denormalizer.rb +35 -0
  58. data/scaffold/new/project/lib/namespace/accounts/destroy/normalizer.rb +28 -0
  59. data/scaffold/new/project/lib/namespace/accounts/destroy/validator.rb +20 -0
  60. data/scaffold/new/project/lib/namespace/accounts/endpoint.rb +16 -0
  61. data/scaffold/new/project/lib/namespace/accounts/list.rb +10 -0
  62. data/scaffold/new/project/lib/namespace/accounts/list/control.rb +26 -0
  63. data/scaffold/new/project/lib/namespace/accounts/list/denormalizer.rb +37 -0
  64. data/scaffold/new/project/lib/namespace/accounts/list/normalizer.rb +58 -0
  65. data/scaffold/new/project/lib/namespace/accounts/list/validator.rb +24 -0
  66. data/scaffold/new/project/lib/namespace/accounts/model.rb +49 -0
  67. data/scaffold/new/project/lib/namespace/accounts/null.rb +11 -0
  68. data/scaffold/new/project/lib/namespace/accounts/presenter.rb +40 -0
  69. data/scaffold/new/project/lib/namespace/accounts/show.rb +10 -0
  70. data/scaffold/new/project/lib/namespace/accounts/show/control.rb +31 -0
  71. data/scaffold/new/project/lib/namespace/accounts/show/denormalizer.rb +22 -0
  72. data/scaffold/new/project/lib/namespace/accounts/show/normalizer.rb +37 -0
  73. data/scaffold/new/project/lib/namespace/accounts/show/validator.rb +21 -0
  74. data/scaffold/new/project/lib/namespace/accounts/update.rb +11 -0
  75. data/scaffold/new/project/lib/namespace/accounts/update/authorizer.rb +21 -0
  76. data/scaffold/new/project/lib/namespace/accounts/update/control.rb +37 -0
  77. data/scaffold/new/project/lib/namespace/accounts/update/denormalizer.rb +35 -0
  78. data/scaffold/new/project/lib/namespace/accounts/update/normalizer.rb +52 -0
  79. data/scaffold/new/project/lib/namespace/accounts/update/validator.rb +47 -0
  80. data/scaffold/new/project/lib/namespace/errors.rb +8 -0
  81. data/scaffold/new/project/lib/namespace/errors/denormalizer.rb +24 -0
  82. data/scaffold/new/project/lib/namespace/errors/presenter.rb +16 -0
  83. data/scaffold/new/project/lib/namespace/server.rb +54 -0
  84. data/scaffold/new/project/lib/namespace/sessions.rb +11 -0
  85. data/scaffold/new/project/lib/namespace/sessions/create.rb +11 -0
  86. data/scaffold/new/project/lib/namespace/sessions/create/authorizer.rb +19 -0
  87. data/scaffold/new/project/lib/namespace/sessions/create/control.rb +26 -0
  88. data/scaffold/new/project/lib/namespace/sessions/create/denormalizer.rb +30 -0
  89. data/scaffold/new/project/lib/namespace/sessions/create/normalizer.rb +31 -0
  90. data/scaffold/new/project/lib/namespace/sessions/create/validator.rb +21 -0
  91. data/scaffold/new/project/lib/namespace/sessions/destroy.rb +10 -0
  92. data/scaffold/new/project/lib/namespace/sessions/destroy/control.rb +32 -0
  93. data/scaffold/new/project/lib/namespace/sessions/destroy/denormalizer.rb +29 -0
  94. data/scaffold/new/project/lib/namespace/sessions/destroy/normalizer.rb +20 -0
  95. data/scaffold/new/project/lib/namespace/sessions/destroy/validator.rb +16 -0
  96. data/scaffold/new/project/lib/namespace/sessions/endpoint.rb +13 -0
  97. data/scaffold/new/project/lib/namespace/sessions/model.rb +25 -0
  98. data/scaffold/new/project/lib/namespace/sessions/presenter.rb +40 -0
  99. data/scaffold/new/project/spec/lib/namespace/accounts/create/control_spec.rb +1 -0
  100. data/scaffold/new/project/spec/lib/namespace/accounts/create/denormalizer_spec.rb +1 -0
  101. data/scaffold/new/project/spec/lib/namespace/accounts/create/normalizer_spec.rb +1 -0
  102. data/scaffold/new/project/spec/lib/namespace/accounts/create/validator_spec.rb +1 -0
  103. data/scaffold/new/project/spec/lib/namespace/accounts/destroy/control_spec.rb +1 -0
  104. data/scaffold/new/project/spec/lib/namespace/accounts/destroy/denormalizer_spec.rb +1 -0
  105. data/scaffold/new/project/spec/lib/namespace/accounts/destroy/normalizer_spec.rb +1 -0
  106. data/scaffold/new/project/spec/lib/namespace/accounts/destroy/validator_spec.rb +1 -0
  107. data/scaffold/new/project/spec/lib/namespace/accounts/endpoint_spec.rb +1 -0
  108. data/scaffold/new/project/spec/lib/namespace/accounts/list/control_spec.rb +1 -0
  109. data/scaffold/new/project/spec/lib/namespace/accounts/list/denormalizer_spec.rb +1 -0
  110. data/scaffold/new/project/spec/lib/namespace/accounts/list/normalizer_spec.rb +1 -0
  111. data/scaffold/new/project/spec/lib/namespace/accounts/list/validator_spec.rb +1 -0
  112. data/scaffold/new/project/spec/lib/namespace/accounts/model_spec.rb +1 -0
  113. data/scaffold/new/project/spec/lib/namespace/accounts/presenter_spec.rb +1 -0
  114. data/scaffold/new/project/spec/lib/namespace/accounts/show/control_spec.rb +1 -0
  115. data/scaffold/new/project/spec/lib/namespace/accounts/show/denormalizer_spec.rb +1 -0
  116. data/scaffold/new/project/spec/lib/namespace/accounts/show/normalizer_spec.rb +1 -0
  117. data/scaffold/new/project/spec/lib/namespace/accounts/show/validator_spec.rb +1 -0
  118. data/scaffold/new/project/spec/lib/namespace/accounts/update/control_spec.rb +1 -0
  119. data/scaffold/new/project/spec/lib/namespace/accounts/update/denormalizer_spec.rb +1 -0
  120. data/scaffold/new/project/spec/lib/namespace/accounts/update/normalizer_spec.rb +1 -0
  121. data/scaffold/new/project/spec/lib/namespace/accounts/update/validator_spec.rb +1 -0
  122. data/scaffold/new/project/spec/lib/namespace/errors/denormalizer_spec.rb +1 -0
  123. data/scaffold/new/project/spec/lib/namespace/errors/presenter_spec.rb +1 -0
  124. data/scaffold/new/project/spec/lib/namespace/errors/presenters_spec.rb +1 -0
  125. data/scaffold/new/project/spec/lib/namespace/model_spec.rb +1 -0
  126. data/scaffold/new/project/spec/lib/namespace/server_spec.rb +1 -0
  127. data/scaffold/new/project/spec/lib/namespace/sessions/create/control_spec.rb +1 -0
  128. data/scaffold/new/project/spec/lib/namespace/sessions/create/denormalizer_spec.rb +1 -0
  129. data/scaffold/new/project/spec/lib/namespace/sessions/create/normalizer_spec.rb +1 -0
  130. data/scaffold/new/project/spec/lib/namespace/sessions/create/validator_spec.rb +1 -0
  131. data/scaffold/new/project/spec/lib/namespace/sessions/destroy/control_spec.rb +1 -0
  132. data/scaffold/new/project/spec/lib/namespace/sessions/destroy/denormalizer_spec.rb +1 -0
  133. data/scaffold/new/project/spec/lib/namespace/sessions/destroy/normalizer_spec.rb +1 -0
  134. data/scaffold/new/project/spec/lib/namespace/sessions/destroy/validator_spec.rb +1 -0
  135. data/scaffold/new/project/spec/lib/namespace/sessions/endpoint_spec.rb +1 -0
  136. data/scaffold/new/project/spec/lib/namespace/sessions/model_spec.rb +1 -0
  137. data/scaffold/new/project/spec/lib/namespace/sessions/presenter_spec.rb +1 -0
  138. data/scaffold/new/project/spec/lib/namespace_spec.rb +7 -0
  139. data/scaffold/new/project/spec/spec_helper.rb +3 -0
  140. metadata +138 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f356274d7c54f0cb104827d4d660b60f92ae669b
4
- data.tar.gz: ac7bd5cc1e1f0c199cfef9af934bfbb59775a5f8
3
+ metadata.gz: b911d9b9871b623aa87e07a5595d93c302e78757
4
+ data.tar.gz: c8f17acac6f2758f5a754573f2e8723eebabe841
5
5
  SHA512:
6
- metadata.gz: 9af314d1c7e1a54da5bbe3f66c2479bb8aa1cc4c2f5d4e82286bdbe8c676a0c699526e9396bf4da80ba8ba7e14682797b2ebd700b3728a1c922caace42e9eab5
7
- data.tar.gz: 7a18afdec16f5a52a8ae7af54fefb91318f8e64fa7aa5bfa3ecb491cf778e7b73f41252a6677da7c0db2bebec3b0b4cc8c215ffb9a4b95790a4922c1f0747ab9
6
+ metadata.gz: 4c06a16488a91d424fd701f3365677fe5026c71323be678161d8270839706378844dad7fe0318702dd86a10064a6ebbd3985509668779656fe125373f5c32045
7
+ data.tar.gz: 8c89b10d59e721c3cca403e5e48506212b9d034f4197c6b4ce6b74c6bddc6263c923947c60e5bb7649060bc9790a066b30be4a5af6b1d4236e6a8a7028aa51e6
@@ -1,3 +1,3 @@
1
1
  module Shogun
2
- VERSION = "6.2.1"
2
+ VERSION = "6.2.2"
3
3
  end
@@ -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,10 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Create
4
+ require_relative "create/control"
5
+ require_relative "create/denormalizer"
6
+ require_relative "create/normalizer"
7
+ require_relative "create/validator"
8
+ end
9
+ end
10
+ 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,14 @@
1
+ module {{namepsace_module}}
2
+ module {{resource_module}}
3
+ module Create
4
+ class Validator
5
+ include Shogun::Validator
6
+ include {{resource_module}}
7
+
8
+ def initialize(data:)
9
+ @verifiers = []
10
+ end
11
+ end
12
+ end
13
+ end
14
+ 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,10 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module List
4
+ require_relative "list/control"
5
+ require_relative "list/denormalizer"
6
+ require_relative "list/normalizer"
7
+ require_relative "list/validator"
8
+ end
9
+ end
10
+ 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