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
@@ -0,0 +1,58 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module List
4
+ class Normalizer
5
+ include Shogun::Normalizer
6
+ include {{resource_module}}
7
+
8
+ METADATA = %w|limit filters includes fields|
9
+ LIST_DELIMITER = /\s*,\s*/
10
+ DEFAULT_FIELD = "id"
11
+ AUTOMATIC_FIELDS = %w|id href meta links linked|
12
+
13
+ def initialize(raw:)
14
+ @limit = raw["limit"]
15
+ @filters = raw["filter"]
16
+ @includes = raw["include"]
17
+ @fields = raw["fields"]
18
+ end
19
+
20
+ def limit
21
+ Integer(@limit) rescue 10
22
+ end
23
+
24
+ def filters
25
+ if @filters.is_a?(Hash)
26
+ @filters
27
+ else
28
+ Hash.new
29
+ end
30
+ end
31
+
32
+ def includes
33
+ case @includes
34
+ when String
35
+ @includes.split(LIST_DELIMITER)
36
+ when Array
37
+ @includes
38
+ else
39
+ Array.new
40
+ end
41
+ end
42
+
43
+ def fields
44
+ case
45
+ when @fields.is_a?(Array)
46
+ @fields + AUTOMATIC_FIELDS
47
+ when @fields.is_a?(String) && @fields.match(LIST_DELIMITER)
48
+ @fields.split(LIST_DELIMITER) + AUTOMATIC_FIELDS
49
+ when @fields.is_a?(String)
50
+ [@fields.strip] + AUTOMATIC_FIELDS
51
+ else
52
+ [DEFAULT_FIELD]
53
+ end.uniq
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module List
4
+ class Validator
5
+ include Shogun::Validator
6
+ include {{resource_module}}
7
+
8
+ INCLUDES_ALLOWED = %w||
9
+ FIELDS_ALLOWED = %w|id created_at updated_at destroyed_at href meta links linked|
10
+ FILTERS_ALLOWED = %w|username signature created_at name|
11
+ LIMIT_RANGE = 1..100
12
+
13
+ def initialize(data:)
14
+ @verifiers = [
15
+ Shogun::Verifier::Range.new(data: data.limit, name: "limit", range: LIMIT_RANGE),
16
+ Shogun::Verifier::Allowed.new(data: data.filters.keys, name: "filters", list: FILTERS_ALLOWED),
17
+ Shogun::Verifier::Allowed.new(data: data.includes, name: "includes", list: INCLUDES_ALLOWED),
18
+ Shogun::Verifier::Allowed.new(data: data.fields, name: "fields", list: FIELDS_ALLOWED)
19
+ ]
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ class Model < ActiveRecord::Base
4
+ include {{resource_module}}
5
+
6
+ self.table_name = NAMESPACE
7
+
8
+ has_many :sessions, class_name: "{{namespace_module}}::Sessions::Model", foreign_key: "{{resource_singular}}_id", dependent: :destroy
9
+
10
+ def self.setup!
11
+ ActiveRecord::Migration.create_table table_name, force: true, id: :uuid do |table|
12
+ table.string :name, null: false, default: "", index: { unique: true }
13
+
14
+ table.datetime :created_at, null: false, index: true
15
+ table.datetime :updated_at, null: false, index: true
16
+ table.datetime :destroyed_at, index: true
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ class Null
4
+ attr_reader :attribute
5
+
6
+ def initialize
7
+ @attribute = nil
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ class Presenter
4
+ include Shogun::Presenter
5
+ include {{resource_module}}
6
+
7
+ def id
8
+ source.id
9
+ end
10
+
11
+ def created_at
12
+ source.created_at.to_datetime.rfc3339
13
+ end
14
+
15
+ def updated_at
16
+ source.updated_at.to_datetime.rfc3339
17
+ end
18
+
19
+ def destroyed_at
20
+ source.destroyed_at.to_datetime.rfc3339 if source.destroyed_at
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Show
4
+ require_relative "show/control"
5
+ require_relative "show/denormalizer"
6
+ require_relative "show/normalizer"
7
+ require_relative "show/validator"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Show
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,31 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Show
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.find_by(id: @normalizer.id)
14
+
15
+ if @model
16
+ @presenter = Presenter.new(resource: @model, meta: @normalizer.as_meta)
17
+ @denormalizer = Denormalizer.new(object: @presenter, fields: @normalizer.fields)
18
+ @status = OK
19
+ else
20
+ @status = NOT_FOUND
21
+ end
22
+ else
23
+ @presenters = Shogun::Presenters.new(resources: @validator.invalids, cast: Errors::Presenter)
24
+ @denormalizer = Errors::Denormalizer.new(object: @presenters)
25
+ @status = UNPROCESSABLE_ENTITY
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Show
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
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Show
4
+ class Normalizer
5
+ include Shogun::Normalizer
6
+ include {{resource_module}}
7
+
8
+ METADATA = %w|id fields|
9
+ LIST_DELIMITER = /\s*,\s*/
10
+ DEFAULT_FIELDS = %w|id created_at updated_at destroyed_at href|
11
+ AUTOMATIC_FIELDS = %w|id href|
12
+
13
+ def initialize(raw:)
14
+ @id = raw["id"]
15
+ @fields = raw["fields"]
16
+ end
17
+
18
+ def id
19
+ @id
20
+ end
21
+
22
+ def fields
23
+ case
24
+ when @fields.is_a?(String) && @fields.match(LIST_DELIMITER)
25
+ @fields.split(LIST_DELIMITER) + AUTOMATIC_FIELDS
26
+ when @fields.is_a?(Array)
27
+ @fields + AUTOMATIC_FIELDS
28
+ when @fields.is_a?(String)
29
+ [@fields.strip] + AUTOMATIC_FIELDS
30
+ else
31
+ DEFAULT_FIELDS
32
+ end.uniq
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Show
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
+ FIELDS_ALLOWED = %w|id created_at updated_at destroyed_at href|
10
+
11
+ def initialize(data:)
12
+ @verifiers = [
13
+ Shogun::Verifier::Presence.new(data: data.id, name: "id"),
14
+ Shogun::Verifier::Match.new(data: data.id, name: "id", comparison: ID_MATCH),
15
+ Shogun::Verifier::Allowed.new(data: data.fields, name: "fields", list: FIELDS_ALLOWED)
16
+ ]
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,11 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Update
4
+ require_relative "update/authorizer"
5
+ require_relative "update/control"
6
+ require_relative "update/denormalizer"
7
+ require_relative "update/normalizer"
8
+ require_relative "update/validator"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Update
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 Update
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.update(@normalizer.to_hash)
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 Update
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,37 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Update
4
+ class Normalizer
5
+ include Shogun::Normalizer
6
+ include {{resource_module}}
7
+
8
+ METADATA = %w|id|
9
+ ATTRIBUTES = %w|attirbute|
10
+
11
+ def initialize(raw:)
12
+ @id = raw["id"]
13
+
14
+ if raw["rack.authentication"] && raw["rack.authentication"]["sessions"]
15
+ @session = raw["rack.authentication"]["sessions"]["id"]
16
+ end
17
+
18
+ if raw[NAMESPACE]
19
+ @attribute = raw[namespace]["attribute"]
20
+ end
21
+ end
22
+
23
+ def id
24
+ @id
25
+ end
26
+
27
+ def session
28
+ @session
29
+ end
30
+
31
+ def attribute
32
+ @attribute.strip if @attribute.is_a?(String)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ module {{namespace_module}}
2
+ module {{resource_module}}
3
+ module Update
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