shaf 1.5.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/iana_link_relations.csv.gz +0 -0
  5. data/lib/shaf.rb +6 -0
  6. data/lib/shaf/alps/attribute_serializer.rb +41 -0
  7. data/lib/shaf/alps/json_serializer.rb +50 -0
  8. data/lib/shaf/alps/relation_serializer.rb +70 -0
  9. data/lib/shaf/api_doc/link_relations.rb +77 -0
  10. data/lib/shaf/app.rb +12 -5
  11. data/lib/shaf/authenticator.rb +56 -0
  12. data/lib/shaf/authenticator/base.rb +161 -0
  13. data/lib/shaf/authenticator/basic_auth.rb +25 -0
  14. data/lib/shaf/authenticator/challenge.rb +32 -0
  15. data/lib/shaf/authenticator/parameter.rb +31 -0
  16. data/lib/shaf/authenticator/request.rb +17 -0
  17. data/lib/shaf/command/console.rb +1 -1
  18. data/lib/shaf/command/generate.rb +5 -2
  19. data/lib/shaf/command/new.rb +20 -7
  20. data/lib/shaf/command/templates/Gemfile.erb +1 -0
  21. data/{templates/config/settings.yml → lib/shaf/command/templates/config/settings.yml.erb} +1 -5
  22. data/lib/shaf/errors.rb +11 -0
  23. data/lib/shaf/extensions.rb +3 -3
  24. data/lib/shaf/extensions/api_routes.rb +60 -0
  25. data/lib/shaf/extensions/authorize.rb +11 -9
  26. data/lib/shaf/extensions/log.rb +1 -1
  27. data/lib/shaf/extensions/resource_uris.rb +139 -63
  28. data/lib/shaf/extensions/symbolic_routes.rb +22 -19
  29. data/lib/shaf/formable.rb +1 -2
  30. data/lib/shaf/formable/form.rb +1 -1
  31. data/lib/shaf/generator.rb +2 -0
  32. data/lib/shaf/generator/base.rb +2 -3
  33. data/lib/shaf/generator/controller.rb +11 -7
  34. data/lib/shaf/generator/doc.rb +17 -0
  35. data/lib/shaf/generator/forms.rb +1 -0
  36. data/lib/shaf/generator/helper.rb +2 -1
  37. data/lib/shaf/generator/migration/base.rb +7 -3
  38. data/lib/shaf/generator/migration/type.rb +4 -26
  39. data/lib/shaf/generator/migration/types.rb +45 -16
  40. data/lib/shaf/generator/model.rb +1 -2
  41. data/lib/shaf/generator/profile.rb +52 -0
  42. data/lib/shaf/generator/serializer.rb +38 -73
  43. data/lib/shaf/generator/templates/api/policy.rb.erb +2 -2
  44. data/lib/shaf/generator/templates/api/profile.rb.erb +16 -0
  45. data/lib/shaf/generator/templates/api/serializer.rb.erb +2 -2
  46. data/lib/shaf/generator/templates/spec/integration_spec.rb.erb +1 -2
  47. data/lib/shaf/generator/templates/spec/serializer_spec.rb.erb +5 -5
  48. data/lib/shaf/helpers.rb +4 -0
  49. data/lib/shaf/helpers/authentication.rb +79 -0
  50. data/lib/shaf/helpers/cache_control.rb +1 -2
  51. data/lib/shaf/helpers/json_html.rb +58 -18
  52. data/lib/shaf/helpers/payload.rb +26 -41
  53. data/lib/shaf/helpers/vary.rb +8 -0
  54. data/lib/shaf/logger.rb +12 -0
  55. data/lib/shaf/parser.rb +65 -0
  56. data/lib/shaf/parser/base.rb +44 -0
  57. data/lib/shaf/parser/form_data.rb +15 -0
  58. data/lib/shaf/parser/json.rb +26 -0
  59. data/lib/shaf/profile.rb +115 -0
  60. data/lib/shaf/profile/attribute.rb +29 -0
  61. data/lib/shaf/profile/evaluator.rb +46 -0
  62. data/lib/shaf/profile/relation.rb +29 -0
  63. data/lib/shaf/profile/unique_id.rb +58 -0
  64. data/lib/shaf/profiles.rb +46 -0
  65. data/lib/shaf/profiles/shaf_basic.rb +20 -0
  66. data/lib/shaf/profiles/shaf_error.rb +49 -0
  67. data/lib/shaf/profiles/shaf_form.rb +110 -0
  68. data/lib/shaf/responder.rb +41 -2
  69. data/lib/shaf/responder/alps_json.rb +25 -0
  70. data/lib/shaf/responder/base.rb +20 -17
  71. data/lib/shaf/responder/hal.rb +63 -8
  72. data/lib/shaf/responder/html.rb +65 -9
  73. data/lib/shaf/responder/problem_json.rb +1 -1
  74. data/lib/shaf/serializer.rb +35 -0
  75. data/lib/shaf/settings.rb +25 -12
  76. data/lib/shaf/spec.rb +1 -0
  77. data/lib/shaf/spec/authenticator.rb +13 -0
  78. data/lib/shaf/spec/base.rb +1 -1
  79. data/lib/shaf/spec/http_method_utils.rb +1 -1
  80. data/lib/shaf/spec/integration_spec.rb +25 -13
  81. data/lib/shaf/spec/payload_utils.rb +2 -2
  82. data/lib/shaf/supported_http_methods.rb +15 -0
  83. data/lib/shaf/tasks/api_doc_task.rb +24 -3
  84. data/lib/shaf/tasks/routes_task.rb +14 -17
  85. data/lib/shaf/upgrade/manifest.rb +11 -2
  86. data/lib/shaf/upgrade/package.rb +78 -49
  87. data/lib/shaf/upgrade/version.rb +11 -10
  88. data/lib/shaf/utils.rb +19 -5
  89. data/lib/shaf/version.rb +3 -1
  90. data/lib/shaf/yard.rb +34 -0
  91. data/lib/shaf/yard/attribute_method_handler.rb +19 -0
  92. data/lib/shaf/yard/attribute_object.rb +30 -0
  93. data/lib/shaf/yard/base_method_handler.rb +30 -0
  94. data/lib/shaf/yard/link_method_handler.rb +39 -0
  95. data/lib/shaf/yard/link_object.rb +60 -0
  96. data/lib/shaf/yard/nested_attributes.rb +37 -0
  97. data/lib/shaf/yard/parser.rb +64 -0
  98. data/lib/shaf/yard/profile_method_handler.rb +51 -0
  99. data/lib/shaf/yard/profile_object.rb +21 -0
  100. data/lib/shaf/yard/resource_object.rb +55 -0
  101. data/lib/shaf/yard/serializer_handler.rb +27 -0
  102. data/templates/api/controllers/base_controller.rb +0 -10
  103. data/templates/api/controllers/docs_controller.rb +5 -3
  104. data/templates/api/controllers/root_controller.rb +7 -1
  105. data/templates/api/policies/base_policy.rb +2 -0
  106. data/templates/api/serializers/base_serializer.rb +1 -3
  107. data/templates/api/serializers/error_serializer.rb +1 -5
  108. data/templates/api/serializers/form_serializer.rb +1 -5
  109. data/templates/api/serializers/validation_error_serializer.rb +1 -5
  110. data/templates/config.ru +1 -1
  111. data/templates/config/bootstrap.rb +1 -2
  112. data/templates/config/directories.rb +52 -44
  113. data/templates/config/helpers.rb +1 -1
  114. data/templates/config/initializers.rb +52 -8
  115. data/templates/config/initializers/authentication.rb +18 -0
  116. data/templates/config/initializers/db_migrations.rb +2 -2
  117. data/templates/config/initializers/logging.rb +2 -2
  118. data/templates/frontend/assets/css/main.css +33 -1
  119. data/templates/frontend/views/headers.erb +20 -0
  120. data/templates/frontend/views/layout.erb +7 -1
  121. data/templates/frontend/views/payload.erb +1 -0
  122. data/templates/spec/spec_helper.rb +2 -0
  123. data/upgrades/0.5.0.tar.gz +0 -0
  124. data/upgrades/1.0.4.tar.gz +0 -0
  125. data/upgrades/1.1.0.tar.gz +0 -0
  126. data/upgrades/1.6.0.tar.gz +0 -0
  127. data/upgrades/1.6.1.tar.gz +0 -0
  128. data/upgrades/2.0.0.tar.gz +0 -0
  129. data/yard_templates/api_doc/doc_index/html/body.erb +3 -0
  130. data/yard_templates/api_doc/doc_index/setup.rb +8 -0
  131. data/yard_templates/api_doc/html/css/api-doc.css +222 -0
  132. data/yard_templates/api_doc/html/favicon.ico +0 -0
  133. data/yard_templates/api_doc/html/js/switch_tab.js +17 -0
  134. data/yard_templates/api_doc/html/setup.rb +59 -0
  135. data/yard_templates/api_doc/layout/html/footer.erb +3 -0
  136. data/yard_templates/api_doc/layout/html/header.erb +7 -0
  137. data/yard_templates/api_doc/layout/html/layout.erb +13 -0
  138. data/yard_templates/api_doc/layout/setup.rb +24 -0
  139. data/yard_templates/api_doc/profile/html/attributes.erb +10 -0
  140. data/yard_templates/api_doc/profile/html/profile.erb +6 -0
  141. data/yard_templates/api_doc/profile/html/relations.erb +10 -0
  142. data/yard_templates/api_doc/profile/setup.rb +38 -0
  143. data/yard_templates/api_doc/profile_attribute/html/attribute.erb +23 -0
  144. data/yard_templates/api_doc/profile_attribute/setup.rb +21 -0
  145. data/yard_templates/api_doc/profile_relation/html/relation.erb +37 -0
  146. data/yard_templates/api_doc/profile_relation/setup.rb +41 -0
  147. data/yard_templates/api_doc/resource/html/attributes.erb +10 -0
  148. data/yard_templates/api_doc/resource/html/profile.erb +14 -0
  149. data/yard_templates/api_doc/resource/html/relations.erb +10 -0
  150. data/yard_templates/api_doc/resource/html/resource.erb +5 -0
  151. data/yard_templates/api_doc/resource/setup.rb +56 -0
  152. data/yard_templates/api_doc/resource_attribute/html/attribute.erb +23 -0
  153. data/yard_templates/api_doc/resource_attribute/setup.rb +20 -0
  154. data/yard_templates/api_doc/resource_relation/html/relation.erb +47 -0
  155. data/yard_templates/api_doc/resource_relation/setup.rb +80 -0
  156. data/yard_templates/api_doc/setup.rb +31 -0
  157. data/yard_templates/api_doc/sidebar/html/profile_list.erb +8 -0
  158. data/yard_templates/api_doc/sidebar/html/search.erb +7 -0
  159. data/yard_templates/api_doc/sidebar/html/serializer_list.erb +8 -0
  160. data/yard_templates/api_doc/sidebar/html/sidebar.erb +13 -0
  161. data/yard_templates/api_doc/sidebar/setup.rb +56 -0
  162. metadata +140 -30
  163. metadata.gz.sig +0 -0
  164. data/lib/shaf/extensions/current_user.rb +0 -48
  165. data/lib/shaf/responder/hal_serializable.rb +0 -54
@@ -0,0 +1,13 @@
1
+ <div class="sidebar">
2
+ <div class="sidebar-tabs">
3
+ <button class="sidebar-tab-btn<%= ' active' if resource? || index? %>" onclick="openTab(event, 'serializer-list')">
4
+ Resources
5
+ </button>
6
+ <button class="sidebar-tab-btn<%= ' active' if profile? %>" onclick="openTab(event, 'profile-list')">
7
+ Profiles
8
+ </button>
9
+ </div>
10
+ <div class="sidebar-container">
11
+ <%= yieldall %>
12
+ </div>
13
+ </div>
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ def init
6
+ super
7
+
8
+ @resources = resources
9
+ @profiles = profiles
10
+
11
+ sections :sidebar, %i[serializer_list profile_list]
12
+ end
13
+
14
+ def resources
15
+ options.resources.map do |resource|
16
+ path = resource.path.sub(/Serializers::/, '')
17
+
18
+ {
19
+ name: resource.resource_name,
20
+ path: "/api_doc/#{path}.html"
21
+ }
22
+ end.sort_by { |h| h[:name] }
23
+ end
24
+
25
+ def profiles
26
+ options.profiles.map do |profile|
27
+ path = profile.path.sub(/Profiles::/, '')
28
+
29
+ {
30
+ name: profile.profile_name,
31
+ path: "/api_doc/#{path}.html"
32
+ }
33
+ end.sort_by { |h| h[:name] }
34
+ end
35
+
36
+ def profile?
37
+ object.is_a? Shaf::Yard::ProfileObject
38
+ end
39
+
40
+ def resource?
41
+ object.is_a? Shaf::Yard::ResourceObject
42
+ end
43
+
44
+ def index?
45
+ object.type == :doc_index
46
+ end
47
+
48
+ def resource_active?(name)
49
+ return false unless resource?
50
+ object.resource_name == name
51
+ end
52
+
53
+ def profile_active?(name)
54
+ return false unless profile?
55
+ object.profile_name == name
56
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sammy Henningsson
@@ -10,28 +10,41 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDXjCCAkagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFzYW1t
14
- eS5oZW5uaW5nc3Nvbi9EQz1nbWFpbC9EQz1jb20wHhcNMTgwNzE2MTYzNTMzWhcN
15
- MjAwNzE2MTYzNTMzWjAsMSowKAYDVQQDDCFzYW1teS5oZW5uaW5nc3Nvbi9EQz1n
16
- bWFpbC9EQz1jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvkgwt
17
- Zn8obnCelWttayB1BrHBLUK3b8gasRRtbNk4DzAL+EW6sHSVT2u5I7Wws7JQA5VB
18
- NaK7tgvq3CbDLVRl9NrpDCDx09To08stPxDKi6kst1nkSPAD8g0sQlW3voeQTH98
19
- 2Z2H3XUegHhu5Z9PU9T/7V/vZUzHPiPg1tX1JUIGOPAjVGsr7SUetbL171zK4S4Y
20
- tvUkIoNaph+maHttvyYB/ptiZLD53WORKd4Knw3OiJsLtrxr5hhKyQ+txQdF0P8G
21
- +FlR+Je7B0Ek3yg6fEiJgrdcajYCMo8Oe/GRtoHhi6J3LsYA620P1BSCddZQ2XeL
22
- y3rzIZyMU0iaT69nAgMBAAGjgYowgYcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
23
- HQYDVR0OBBYEFLpI49QndnmuiDhwy2XtMps7No1pMCYGA1UdEQQfMB2BG3NhbW15
24
- Lmhlbm5pbmdzc29uQGdtYWlsLmNvbTAmBgNVHRIEHzAdgRtzYW1teS5oZW5uaW5n
25
- c3NvbkBnbWFpbC5jb20wDQYJKoZIhvcNAQELBQADggEBAFJZqH6sgeiTLvMLpxaK
26
- K1GaYSCyZbMutf5C3tIAgkmU5UD6B8R0bw6gTM1deM5NJ60LjzqY7rlK3YKDIbTn
27
- iXMCe9vd4yE/jb5Zi8Wk//9n8CMG68dQpBvmcQ58/M4gTtgsx+lIgXuI5dPQMmRi
28
- bhWQqqWqxT9X6njjfXFk4xn3z6mfFQNPAYqRVeTHUpXBQZPt+bYXRwHPFZGWkx4l
29
- BnuuhYKt3CR7YIgvnsQWlTAcU1Ipdayj6UfYqUtlc6cF3CL96NOx7mgZXV8URFiX
30
- ZMhjYR7sRczGJx+GxGU2EaR0bjRsPVlC4ywtFxoOfRG3WaJcpWGEoAoMJX6Z0bRv
31
- M40=
13
+ MIIDVjCCAj6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAqMSgwJgYDVQQDDB9zYW1t
14
+ eS5oZW5uaW5nc3Nvbi9EQz1oZXkvREM9Y29tMB4XDTIxMDIwMjEzNTY1OFoXDTIy
15
+ MDIwMjEzNTY1OFowKjEoMCYGA1UEAwwfc2FtbXkuaGVubmluZ3Nzb24vREM9aGV5
16
+ L0RDPWNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+SDC1mfyhu
17
+ cJ6Va21rIHUGscEtQrdvyBqxFG1s2TgPMAv4RbqwdJVPa7kjtbCzslADlUE1oru2
18
+ C+rcJsMtVGX02ukMIPHT1OjTyy0/EMqLqSy3WeRI8APyDSxCVbe+h5BMf3zZnYfd
19
+ dR6AeG7ln09T1P/tX+9lTMc+I+DW1fUlQgY48CNUayvtJR61svXvXMrhLhi29SQi
20
+ g1qmH6Zoe22/JgH+m2JksPndY5Ep3gqfDc6Imwu2vGvmGErJD63FB0XQ/wb4WVH4
21
+ l7sHQSTfKDp8SImCt1xqNgIyjw578ZG2geGLoncuxgDrbQ/UFIJ11lDZd4vLevMh
22
+ nIxTSJpPr2cCAwEAAaOBhjCBgzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
23
+ HQ4EFgQUukjj1Cd2ea6IOHDLZe0ymzs2jWkwJAYDVR0RBB0wG4EZc2FtbXkuaGVu
24
+ bmluZ3Nzb25AaGV5LmNvbTAkBgNVHRIEHTAbgRlzYW1teS5oZW5uaW5nc3NvbkBo
25
+ ZXkuY29tMA0GCSqGSIb3DQEBCwUAA4IBAQBt310FZ56E/fp/y5Wym1xb4C0owfnI
26
+ LzUqOjXWZTO7RezlBJV/qIwqt6bEjYDQR56zULJFSp4YdoDsratmQ+/kwtbHF7xf
27
+ WYkSE36mhLP2ggQFH9fXtX6XdyIlwFqwEfNW73ZrkBXGjMxLVKIS9uHdN7PoNhbS
28
+ 0YjOZZD/rq1Jf+klwl/G7bBDPjn58DWlUmwzoj49goGS/UBG37RssQxRwPelKHZh
29
+ 5ZlcHq9h5CxVt380OKaU6wMg95RJBd/kUJqmPxxlxMH8QDQinTwZmmFA9wW7PJdy
30
+ wAx8px9LkSjTs0GVLH7VtVRWAELllsswCJktz63Adelx9fmIMgrTYgZM
32
31
  -----END CERTIFICATE-----
33
- date: 2020-02-09 00:00:00.000000000 Z
32
+ date: 2021-04-07 00:00:00.000000000 Z
34
33
  dependencies:
34
+ - !ruby/object:Gem::Dependency
35
+ name: file_transactions
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
35
48
  - !ruby/object:Gem::Dependency
36
49
  name: minitest
37
50
  requirement: !ruby/object:Gem::Requirement
@@ -39,9 +52,9 @@ dependencies:
39
52
  - - "~>"
40
53
  - !ruby/object:Gem::Version
41
54
  version: '5'
42
- - - ">="
55
+ - - "~>"
43
56
  - !ruby/object:Gem::Version
44
- version: '5.11'
57
+ version: '5.14'
45
58
  type: :development
46
59
  prerelease: false
47
60
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,9 +62,9 @@ dependencies:
49
62
  - - "~>"
50
63
  - !ruby/object:Gem::Version
51
64
  version: '5'
52
- - - ">="
65
+ - - "~>"
53
66
  - !ruby/object:Gem::Version
54
- version: '5.11'
67
+ version: '5.14'
55
68
  - !ruby/object:Gem::Dependency
56
69
  name: rack-test
57
70
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +135,20 @@ dependencies:
122
135
  - - "~>"
123
136
  - !ruby/object:Gem::Version
124
137
  version: '1.3'
138
+ - !ruby/object:Gem::Dependency
139
+ name: yard
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.9'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.9'
125
152
  - !ruby/object:Gem::Dependency
126
153
  name: redcarpet
127
154
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +211,14 @@ dependencies:
184
211
  requirements:
185
212
  - - "~>"
186
213
  - !ruby/object:Gem::Version
187
- version: '1.5'
214
+ version: '1.6'
188
215
  type: :development
189
216
  prerelease: false
190
217
  version_requirements: !ruby/object:Gem::Requirement
191
218
  requirements:
192
219
  - - "~>"
193
220
  - !ruby/object:Gem::Version
194
- version: '1.5'
221
+ version: '1.6'
195
222
  description: A framework for building hypermedia driven APIs with sinatra and sequel.
196
223
  email: sammy.henningsson@gmail.com
197
224
  executables:
@@ -200,10 +227,21 @@ extensions: []
200
227
  extra_rdoc_files: []
201
228
  files:
202
229
  - bin/shaf
230
+ - iana_link_relations.csv.gz
203
231
  - lib/shaf.rb
232
+ - lib/shaf/alps/attribute_serializer.rb
233
+ - lib/shaf/alps/json_serializer.rb
234
+ - lib/shaf/alps/relation_serializer.rb
204
235
  - lib/shaf/api_doc/comment.rb
205
236
  - lib/shaf/api_doc/document.rb
237
+ - lib/shaf/api_doc/link_relations.rb
206
238
  - lib/shaf/app.rb
239
+ - lib/shaf/authenticator.rb
240
+ - lib/shaf/authenticator/base.rb
241
+ - lib/shaf/authenticator/basic_auth.rb
242
+ - lib/shaf/authenticator/challenge.rb
243
+ - lib/shaf/authenticator/parameter.rb
244
+ - lib/shaf/authenticator/request.rb
207
245
  - lib/shaf/command.rb
208
246
  - lib/shaf/command/base.rb
209
247
  - lib/shaf/command/console.rb
@@ -211,6 +249,7 @@ files:
211
249
  - lib/shaf/command/new.rb
212
250
  - lib/shaf/command/server.rb
213
251
  - lib/shaf/command/templates/Gemfile.erb
252
+ - lib/shaf/command/templates/config/settings.yml.erb
214
253
  - lib/shaf/command/test.rb
215
254
  - lib/shaf/command/test/filter.rb
216
255
  - lib/shaf/command/test/runnable_method.rb
@@ -219,9 +258,9 @@ files:
219
258
  - lib/shaf/command/version.rb
220
259
  - lib/shaf/errors.rb
221
260
  - lib/shaf/extensions.rb
261
+ - lib/shaf/extensions/api_routes.rb
222
262
  - lib/shaf/extensions/authorize.rb
223
263
  - lib/shaf/extensions/controller_hooks.rb
224
- - lib/shaf/extensions/current_user.rb
225
264
  - lib/shaf/extensions/log.rb
226
265
  - lib/shaf/extensions/resource_uris.rb
227
266
  - lib/shaf/extensions/symbolic_routes.rb
@@ -232,6 +271,7 @@ files:
232
271
  - lib/shaf/generator.rb
233
272
  - lib/shaf/generator/base.rb
234
273
  - lib/shaf/generator/controller.rb
274
+ - lib/shaf/generator/doc.rb
235
275
  - lib/shaf/generator/forms.rb
236
276
  - lib/shaf/generator/helper.rb
237
277
  - lib/shaf/generator/migration.rb
@@ -246,39 +286,59 @@ files:
246
286
  - lib/shaf/generator/migration/types.rb
247
287
  - lib/shaf/generator/model.rb
248
288
  - lib/shaf/generator/policy.rb
289
+ - lib/shaf/generator/profile.rb
249
290
  - lib/shaf/generator/scaffold.rb
250
291
  - lib/shaf/generator/serializer.rb
251
292
  - lib/shaf/generator/templates/api/controller.rb.erb
252
293
  - lib/shaf/generator/templates/api/forms.rb.erb
253
294
  - lib/shaf/generator/templates/api/model.rb.erb
254
295
  - lib/shaf/generator/templates/api/policy.rb.erb
296
+ - lib/shaf/generator/templates/api/profile.rb.erb
255
297
  - lib/shaf/generator/templates/api/serializer.rb.erb
256
298
  - lib/shaf/generator/templates/spec/integration_spec.rb.erb
257
299
  - lib/shaf/generator/templates/spec/model.rb.erb
258
300
  - lib/shaf/generator/templates/spec/serializer_spec.rb.erb
259
301
  - lib/shaf/helpers.rb
302
+ - lib/shaf/helpers/authentication.rb
260
303
  - lib/shaf/helpers/cache_control.rb
261
304
  - lib/shaf/helpers/http_header.rb
262
305
  - lib/shaf/helpers/json_html.rb
263
306
  - lib/shaf/helpers/paginate.rb
264
307
  - lib/shaf/helpers/payload.rb
308
+ - lib/shaf/helpers/vary.rb
265
309
  - lib/shaf/immutable_attr.rb
310
+ - lib/shaf/logger.rb
266
311
  - lib/shaf/middleware.rb
267
312
  - lib/shaf/middleware/request_id.rb
313
+ - lib/shaf/parser.rb
314
+ - lib/shaf/parser/base.rb
315
+ - lib/shaf/parser/form_data.rb
316
+ - lib/shaf/parser/json.rb
317
+ - lib/shaf/profile.rb
318
+ - lib/shaf/profile/attribute.rb
319
+ - lib/shaf/profile/evaluator.rb
320
+ - lib/shaf/profile/relation.rb
321
+ - lib/shaf/profile/unique_id.rb
322
+ - lib/shaf/profiles.rb
323
+ - lib/shaf/profiles/shaf_basic.rb
324
+ - lib/shaf/profiles/shaf_error.rb
325
+ - lib/shaf/profiles/shaf_form.rb
268
326
  - lib/shaf/rake.rb
269
327
  - lib/shaf/rake/db.rb
270
328
  - lib/shaf/rake/test.rb
271
329
  - lib/shaf/registrable_factory.rb
272
330
  - lib/shaf/resource_doc.rb
273
331
  - lib/shaf/responder.rb
332
+ - lib/shaf/responder/alps_json.rb
274
333
  - lib/shaf/responder/base.rb
275
334
  - lib/shaf/responder/hal.rb
276
- - lib/shaf/responder/hal_serializable.rb
277
335
  - lib/shaf/responder/html.rb
278
336
  - lib/shaf/responder/problem_json.rb
279
337
  - lib/shaf/router.rb
338
+ - lib/shaf/serializer.rb
280
339
  - lib/shaf/settings.rb
281
340
  - lib/shaf/spec.rb
341
+ - lib/shaf/spec/authenticator.rb
282
342
  - lib/shaf/spec/base.rb
283
343
  - lib/shaf/spec/fixture.rb
284
344
  - lib/shaf/spec/fixtures.rb
@@ -290,6 +350,7 @@ files:
290
350
  - lib/shaf/spec/payload_utils.rb
291
351
  - lib/shaf/spec/serializer_spec.rb
292
352
  - lib/shaf/spec/system_spec.rb
353
+ - lib/shaf/supported_http_methods.rb
293
354
  - lib/shaf/tasks.rb
294
355
  - lib/shaf/tasks/api_doc_task.rb
295
356
  - lib/shaf/tasks/db_task.rb
@@ -301,6 +362,18 @@ files:
301
362
  - lib/shaf/upgrade/version.rb
302
363
  - lib/shaf/utils.rb
303
364
  - lib/shaf/version.rb
365
+ - lib/shaf/yard.rb
366
+ - lib/shaf/yard/attribute_method_handler.rb
367
+ - lib/shaf/yard/attribute_object.rb
368
+ - lib/shaf/yard/base_method_handler.rb
369
+ - lib/shaf/yard/link_method_handler.rb
370
+ - lib/shaf/yard/link_object.rb
371
+ - lib/shaf/yard/nested_attributes.rb
372
+ - lib/shaf/yard/parser.rb
373
+ - lib/shaf/yard/profile_method_handler.rb
374
+ - lib/shaf/yard/profile_object.rb
375
+ - lib/shaf/yard/resource_object.rb
376
+ - lib/shaf/yard/serializer_handler.rb
304
377
  - templates/Rakefile
305
378
  - templates/api/controllers/base_controller.rb
306
379
  - templates/api/controllers/docs_controller.rb
@@ -320,14 +393,15 @@ files:
320
393
  - templates/config/directories.rb
321
394
  - templates/config/helpers.rb
322
395
  - templates/config/initializers.rb
396
+ - templates/config/initializers/authentication.rb
323
397
  - templates/config/initializers/db_migrations.rb
324
398
  - templates/config/initializers/hal_presenter.rb
325
399
  - templates/config/initializers/logging.rb
326
400
  - templates/config/initializers/sequel.rb
327
401
  - templates/config/paths.rb
328
- - templates/config/settings.yml
329
402
  - templates/frontend/assets/css/main.css
330
403
  - templates/frontend/views/form.erb
404
+ - templates/frontend/views/headers.erb
331
405
  - templates/frontend/views/layout.erb
332
406
  - templates/frontend/views/payload.erb
333
407
  - templates/spec/integration/root_spec.rb
@@ -345,6 +419,42 @@ files:
345
419
  - upgrades/1.3.0.tar.gz
346
420
  - upgrades/1.4.0.tar.gz
347
421
  - upgrades/1.5.0.tar.gz
422
+ - upgrades/1.6.0.tar.gz
423
+ - upgrades/1.6.1.tar.gz
424
+ - upgrades/2.0.0.tar.gz
425
+ - yard_templates/api_doc/doc_index/html/body.erb
426
+ - yard_templates/api_doc/doc_index/setup.rb
427
+ - yard_templates/api_doc/html/css/api-doc.css
428
+ - yard_templates/api_doc/html/favicon.ico
429
+ - yard_templates/api_doc/html/js/switch_tab.js
430
+ - yard_templates/api_doc/html/setup.rb
431
+ - yard_templates/api_doc/layout/html/footer.erb
432
+ - yard_templates/api_doc/layout/html/header.erb
433
+ - yard_templates/api_doc/layout/html/layout.erb
434
+ - yard_templates/api_doc/layout/setup.rb
435
+ - yard_templates/api_doc/profile/html/attributes.erb
436
+ - yard_templates/api_doc/profile/html/profile.erb
437
+ - yard_templates/api_doc/profile/html/relations.erb
438
+ - yard_templates/api_doc/profile/setup.rb
439
+ - yard_templates/api_doc/profile_attribute/html/attribute.erb
440
+ - yard_templates/api_doc/profile_attribute/setup.rb
441
+ - yard_templates/api_doc/profile_relation/html/relation.erb
442
+ - yard_templates/api_doc/profile_relation/setup.rb
443
+ - yard_templates/api_doc/resource/html/attributes.erb
444
+ - yard_templates/api_doc/resource/html/profile.erb
445
+ - yard_templates/api_doc/resource/html/relations.erb
446
+ - yard_templates/api_doc/resource/html/resource.erb
447
+ - yard_templates/api_doc/resource/setup.rb
448
+ - yard_templates/api_doc/resource_attribute/html/attribute.erb
449
+ - yard_templates/api_doc/resource_attribute/setup.rb
450
+ - yard_templates/api_doc/resource_relation/html/relation.erb
451
+ - yard_templates/api_doc/resource_relation/setup.rb
452
+ - yard_templates/api_doc/setup.rb
453
+ - yard_templates/api_doc/sidebar/html/profile_list.erb
454
+ - yard_templates/api_doc/sidebar/html/search.erb
455
+ - yard_templates/api_doc/sidebar/html/serializer_list.erb
456
+ - yard_templates/api_doc/sidebar/html/sidebar.erb
457
+ - yard_templates/api_doc/sidebar/setup.rb
348
458
  homepage:
349
459
  licenses:
350
460
  - MIT
metadata.gz.sig CHANGED
Binary file
@@ -1,48 +0,0 @@
1
- require 'digest'
2
-
3
- module Shaf
4
- module CurrentUser
5
- def self.registered(settings)
6
- return unless settings.respond_to?(:current_user) && settings.current_user
7
-
8
- settings.log.info 'Using Shaf::CurrentUser'
9
- settings.helpers Helpers
10
- end
11
-
12
- def self.digest(token)
13
- Digest::SHA256.hexdigest(token) if token
14
- end
15
- end
16
-
17
- module Helpers
18
- ERR_MSG = 'The default Shaf implementation of #current_user requires a ' \
19
- 'User model with a column auth_token_digest'.freeze
20
-
21
- def auth_token
22
- header = Utils.rackify_header(settings.auth_token_header)
23
- request.env[header]
24
- end
25
-
26
- def current_user
27
- return @current_user if defined?(@current_user)
28
-
29
- return unless check_user_model
30
- digest = Shaf::CurrentUser.digest(auth_token) || return
31
- @current_user = User.where(auth_token_digest: digest).first
32
- end
33
-
34
- def authenticated?
35
- !current_user.nil?
36
- end
37
-
38
- def authenticate!
39
- authenticated? || raise(Shaf::Errors::UnauthorizedError)
40
- end
41
-
42
- def check_user_model
43
- return true if defined?(User) && User.columns.include?(:auth_token_digest)
44
- log.warn ERR_MSG
45
- false
46
- end
47
- end
48
- end
@@ -1,54 +0,0 @@
1
- require 'hal_presenter'
2
- require 'shaf/errors'
3
-
4
- module Shaf
5
- module Responder
6
- module HalSerializable
7
- def lookup_rel(rel, response)
8
- hal = response.serialized_hash
9
- return [] unless hal
10
-
11
- links = hal.dig(:_links, rel.to_sym)
12
- return [] unless links
13
-
14
- links = [links] unless links.is_a? Array
15
- links.map do |link|
16
- {
17
- href: link[:href],
18
- as: 'fetch',
19
- crossorigin: 'anonymous'
20
- }
21
- end
22
- end
23
-
24
- def collection?
25
- !!options.fetch(:collection, false)
26
- end
27
-
28
- def serializer
29
- @serializer ||= options[:serializer] || HALPresenter.lookup_presenter(resource)
30
- end
31
-
32
- def serialized_hash
33
- return {} unless serializer
34
-
35
- @serialized_hash ||=
36
- if collection?
37
- serializer.to_collection(resource, current_user: user, as_hash: true, **options)
38
- else
39
- serializer.to_hal(resource, current_user: user, as_hash: true, **options)
40
- end
41
-
42
- # hal_presenter versions before v1.5.0 does not understand the :as_hash
43
- # keyword argument and will always return a String from
44
- # to_hal/to_collection, thus we need to parse it if its a String.
45
- if @serialized_hash.is_a? String
46
- @body = @serialized_hash
47
- @serialized_hash = JSON.parse(@serialized_hash, symbolize_names: true)
48
- end
49
-
50
- @serialized_hash
51
- end
52
- end
53
- end
54
- end