shogun 6.2.1 → 6.2.2

Sign up to get free protection for your applications and to get access to all the features.
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