hanami-action 3.0.0.rc1

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 (38) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +985 -0
  3. data/LICENSE +20 -0
  4. data/README.md +873 -0
  5. data/hanami-action.gemspec +39 -0
  6. data/lib/hanami/action/body_parser/json.rb +20 -0
  7. data/lib/hanami/action/body_parser/multipart_form.rb +22 -0
  8. data/lib/hanami/action/body_parser.rb +109 -0
  9. data/lib/hanami/action/cache/cache_control.rb +84 -0
  10. data/lib/hanami/action/cache/conditional_get.rb +101 -0
  11. data/lib/hanami/action/cache/directives.rb +126 -0
  12. data/lib/hanami/action/cache/expires.rb +84 -0
  13. data/lib/hanami/action/cache.rb +29 -0
  14. data/lib/hanami/action/config/formats.rb +256 -0
  15. data/lib/hanami/action/config.rb +172 -0
  16. data/lib/hanami/action/constants.rb +283 -0
  17. data/lib/hanami/action/cookie_jar.rb +214 -0
  18. data/lib/hanami/action/cookies.rb +27 -0
  19. data/lib/hanami/action/csrf_protection.rb +217 -0
  20. data/lib/hanami/action/errors.rb +109 -0
  21. data/lib/hanami/action/flash.rb +176 -0
  22. data/lib/hanami/action/halt.rb +18 -0
  23. data/lib/hanami/action/mime/request_mime_weight.rb +66 -0
  24. data/lib/hanami/action/mime.rb +438 -0
  25. data/lib/hanami/action/params.rb +342 -0
  26. data/lib/hanami/action/rack/file.rb +41 -0
  27. data/lib/hanami/action/rack_utils.rb +11 -0
  28. data/lib/hanami/action/request/session.rb +68 -0
  29. data/lib/hanami/action/request.rb +141 -0
  30. data/lib/hanami/action/response.rb +481 -0
  31. data/lib/hanami/action/session.rb +47 -0
  32. data/lib/hanami/action/validatable.rb +166 -0
  33. data/lib/hanami/action/version.rb +13 -0
  34. data/lib/hanami/action/view_name_inferrer.rb +56 -0
  35. data/lib/hanami/action.rb +672 -0
  36. data/lib/hanami/http/status.rb +149 -0
  37. data/lib/hanami-action.rb +3 -0
  38. metadata +153 -0
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Hanami
4
+ class Action
5
+ # @since 2.0.0
6
+ # @api private
7
+ class ViewNameInferrer
8
+ # @since 2.0.0
9
+ # @api private
10
+ ALTERNATIVE_NAMES = {
11
+ "create" => "new",
12
+ "update" => "edit"
13
+ }.freeze
14
+
15
+ class << self
16
+ # @since 2.0.0
17
+ # @api private
18
+ def call(action_name:, provider:)
19
+ application = provider.respond_to?(:application) ? provider.application : Hanami.application
20
+
21
+ action_identifier_base = application.config.actions.name_inference_base
22
+ view_identifier_base = application.config.actions.view_name_inference_base
23
+
24
+ identifier = action_identifier_name(action_name, provider, action_identifier_base)
25
+
26
+ view_name = [view_identifier_base, identifier].compact.join(".")
27
+
28
+ [view_name, alternative_view_name(view_name)].compact
29
+ end
30
+
31
+ private
32
+
33
+ # @since 2.0.0
34
+ # @api private
35
+ def action_identifier_name(action_name, provider, name_base)
36
+ provider
37
+ .inflector
38
+ .underscore(action_name)
39
+ .sub(/^#{provider.namespace_path}\//, "")
40
+ .sub(/^#{name_base}\//, "")
41
+ .gsub("/", ".")
42
+ end
43
+
44
+ # @since 2.0.0
45
+ # @api private
46
+ def alternative_view_name(view_name)
47
+ parts = view_name.split(".")
48
+
49
+ alternative_name = ALTERNATIVE_NAMES[parts.last]
50
+
51
+ [parts[0..-2], alternative_name].join(".") if alternative_name
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end