hanami-controller 1.3.3 → 2.0.0.alpha4

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 (50) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +299 -537
  5. data/hanami-controller.gemspec +4 -3
  6. data/lib/hanami/action/application_action.rb +131 -0
  7. data/lib/hanami/action/application_configuration/content_security_policy.rb +118 -0
  8. data/lib/hanami/action/application_configuration/cookies.rb +29 -0
  9. data/lib/hanami/action/application_configuration/sessions.rb +46 -0
  10. data/lib/hanami/action/application_configuration.rb +90 -0
  11. data/lib/hanami/action/base_params.rb +2 -2
  12. data/lib/hanami/action/cache/cache_control.rb +4 -4
  13. data/lib/hanami/action/cache/conditional_get.rb +3 -1
  14. data/lib/hanami/action/cache/directives.rb +1 -1
  15. data/lib/hanami/action/cache/expires.rb +3 -3
  16. data/lib/hanami/action/cache.rb +1 -139
  17. data/lib/hanami/action/configuration.rb +428 -0
  18. data/lib/hanami/action/cookie_jar.rb +3 -3
  19. data/lib/hanami/action/cookies.rb +3 -62
  20. data/lib/hanami/action/csrf_protection.rb +214 -0
  21. data/lib/hanami/action/flash.rb +102 -207
  22. data/lib/hanami/action/glue.rb +5 -31
  23. data/lib/hanami/action/halt.rb +12 -0
  24. data/lib/hanami/action/mime.rb +78 -485
  25. data/lib/hanami/action/params.rb +2 -2
  26. data/lib/hanami/action/rack/file.rb +1 -1
  27. data/lib/hanami/action/request.rb +30 -20
  28. data/lib/hanami/action/response.rb +193 -0
  29. data/lib/hanami/action/session.rb +11 -128
  30. data/lib/hanami/action/standalone_action.rb +578 -0
  31. data/lib/hanami/action/validatable.rb +1 -1
  32. data/lib/hanami/action/view_name_inferrer.rb +46 -0
  33. data/lib/hanami/action.rb +129 -73
  34. data/lib/hanami/controller/version.rb +1 -1
  35. data/lib/hanami/controller.rb +0 -227
  36. data/lib/hanami/http/status.rb +2 -2
  37. metadata +44 -26
  38. data/lib/hanami/action/callable.rb +0 -92
  39. data/lib/hanami/action/callbacks.rb +0 -214
  40. data/lib/hanami/action/configurable.rb +0 -50
  41. data/lib/hanami/action/exposable/guard.rb +0 -104
  42. data/lib/hanami/action/exposable.rb +0 -126
  43. data/lib/hanami/action/head.rb +0 -121
  44. data/lib/hanami/action/rack/callable.rb +0 -47
  45. data/lib/hanami/action/rack/errors.rb +0 -53
  46. data/lib/hanami/action/rack.rb +0 -411
  47. data/lib/hanami/action/redirect.rb +0 -59
  48. data/lib/hanami/action/throwable.rb +0 -169
  49. data/lib/hanami/controller/configuration.rb +0 -763
  50. data/lib/hanami-controller.rb +0 -1
@@ -1,169 +0,0 @@
1
- require 'hanami/utils/class_attribute'
2
- require 'hanami/http/status'
3
- require 'hanami/action/rack/errors'
4
-
5
- module Hanami
6
- module Action
7
- # Throw API
8
- #
9
- # @since 0.1.0
10
- #
11
- # @see Hanami::Action::Throwable::ClassMethods#handle_exception
12
- # @see Hanami::Action::Throwable#halt
13
- # @see Hanami::Action::Throwable#status
14
- module Throwable
15
- # @since 0.1.0
16
- # @api private
17
- def self.included(base)
18
- base.extend ClassMethods
19
- end
20
-
21
- # Throw API class methods
22
- #
23
- # @since 0.1.0
24
- # @api private
25
- module ClassMethods
26
- private
27
-
28
- # Handle the given exception with an HTTP status code.
29
- #
30
- # When the exception is raise during #call execution, it will be
31
- # translated into the associated HTTP status.
32
- #
33
- # This is a fine grained control, for a global configuration see
34
- # Hanami::Action.handled_exceptions
35
- #
36
- # @param exception [Hash] the exception class must be the key and the
37
- # HTTP status the value of the hash
38
- #
39
- # @since 0.1.0
40
- #
41
- # @see Hanami::Action.handled_exceptions
42
- #
43
- # @example
44
- # require 'hanami/controller'
45
- #
46
- # class Show
47
- # include Hanami::Action
48
- # handle_exception RecordNotFound => 404
49
- #
50
- # def call(params)
51
- # # ...
52
- # raise RecordNotFound.new
53
- # end
54
- # end
55
- #
56
- # Show.new.call({id: 1}) # => [404, {}, ['Not Found']]
57
- def handle_exception(exception)
58
- configuration.handle_exception(exception)
59
- end
60
- end
61
-
62
- protected
63
-
64
- # Halt the action execution with the given HTTP status code and message.
65
- #
66
- # When used, the execution of a callback or of an action is interrupted
67
- # and the control returns to the framework, that decides how to handle
68
- # the event.
69
- #
70
- # If a message is provided, it sets the response body with the message.
71
- # Otherwise, it sets the response body with the default message associated
72
- # to the code (eg 404 will set `"Not Found"`).
73
- #
74
- # @param code [Fixnum] a valid HTTP status code
75
- # @param message [String] the response body
76
- #
77
- # @since 0.2.0
78
- #
79
- # @see Hanami::Controller#handled_exceptions
80
- # @see Hanami::Action::Throwable#handle_exception
81
- # @see Hanami::Http::Status:ALL
82
- #
83
- # @example Basic usage
84
- # require 'hanami/controller'
85
- #
86
- # class Show
87
- # def call(params)
88
- # halt 404
89
- # end
90
- # end
91
- #
92
- # # => [404, {}, ["Not Found"]]
93
- #
94
- # @example Custom message
95
- # require 'hanami/controller'
96
- #
97
- # class Show
98
- # def call(params)
99
- # halt 404, "This is not the droid you're looking for."
100
- # end
101
- # end
102
- #
103
- # # => [404, {}, ["This is not the droid you're looking for."]]
104
- def halt(code, message = nil)
105
- message ||= Http::Status.message_for(code)
106
- status(code, message)
107
-
108
- throw :halt
109
- end
110
-
111
- # Sets the given code and message for the response
112
- #
113
- # @param code [Fixnum] a valid HTTP status code
114
- # @param message [String] the response body
115
- #
116
- # @since 0.1.0
117
- # @see Hanami::Http::Status:ALL
118
- def status(code, message)
119
- self.status = code
120
- self.body = message
121
- end
122
-
123
- private
124
- # @since 0.1.0
125
- # @api private
126
- def _rescue
127
- catch :halt do
128
- begin
129
- yield
130
- rescue => exception
131
- _reference_in_rack_errors(exception)
132
- _handle_exception(exception)
133
- end
134
- end
135
- end
136
-
137
- # @since 0.2.0
138
- # @api private
139
- def _reference_in_rack_errors(exception)
140
- return if configuration.handled_exception?(exception)
141
-
142
- Hanami::Action::Rack::Errors.set(@_env, exception)
143
- end
144
-
145
- # @since 0.1.0
146
- # @api private
147
- def _handle_exception(exception)
148
- raise unless configuration.handle_exceptions
149
-
150
- instance_exec(
151
- exception,
152
- &_exception_handler(exception)
153
- )
154
- end
155
-
156
- # @since 0.3.0
157
- # @api private
158
- def _exception_handler(exception)
159
- handler = configuration.exception_handler(exception)
160
-
161
- if respond_to?(handler.to_s, true)
162
- method(handler)
163
- else
164
- ->(ex) { halt handler }
165
- end
166
- end
167
- end
168
- end
169
- end