hanami-controller 1.3.3 → 2.0.0.alpha1

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 +4 -4
  2. data/CHANGELOG.md +46 -7
  3. data/README.md +295 -537
  4. data/hanami-controller.gemspec +3 -3
  5. data/lib/hanami/action.rb +653 -38
  6. data/lib/hanami/action/base_params.rb +2 -2
  7. data/lib/hanami/action/cache.rb +1 -139
  8. data/lib/hanami/action/cache/cache_control.rb +4 -4
  9. data/lib/hanami/action/cache/conditional_get.rb +4 -5
  10. data/lib/hanami/action/cache/directives.rb +1 -1
  11. data/lib/hanami/action/cache/expires.rb +3 -3
  12. data/lib/hanami/action/cookie_jar.rb +3 -3
  13. data/lib/hanami/action/cookies.rb +3 -62
  14. data/lib/hanami/action/flash.rb +2 -2
  15. data/lib/hanami/action/glue.rb +5 -31
  16. data/lib/hanami/action/halt.rb +12 -0
  17. data/lib/hanami/action/mime.rb +77 -491
  18. data/lib/hanami/action/params.rb +3 -3
  19. data/lib/hanami/action/rack/file.rb +1 -1
  20. data/lib/hanami/action/request.rb +30 -20
  21. data/lib/hanami/action/response.rb +174 -0
  22. data/lib/hanami/action/session.rb +8 -117
  23. data/lib/hanami/action/validatable.rb +2 -2
  24. data/lib/hanami/controller.rb +0 -210
  25. data/lib/hanami/controller/configuration.rb +51 -506
  26. data/lib/hanami/controller/version.rb +1 -1
  27. metadata +12 -21
  28. data/lib/hanami/action/callable.rb +0 -92
  29. data/lib/hanami/action/callbacks.rb +0 -214
  30. data/lib/hanami/action/configurable.rb +0 -50
  31. data/lib/hanami/action/exposable.rb +0 -126
  32. data/lib/hanami/action/exposable/guard.rb +0 -104
  33. data/lib/hanami/action/head.rb +0 -121
  34. data/lib/hanami/action/rack.rb +0 -411
  35. data/lib/hanami/action/rack/callable.rb +0 -47
  36. data/lib/hanami/action/rack/errors.rb +0 -53
  37. data/lib/hanami/action/redirect.rb +0 -59
  38. data/lib/hanami/action/throwable.rb +0 -169
@@ -3,6 +3,6 @@ module Hanami
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '1.3.3'.freeze
6
+ VERSION = '2.0.0.alpha1'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 2.0.0.alpha1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2019-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.3'
33
+ version: 2.0.alpha
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.3'
40
+ version: 2.0.alpha
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '13'
81
+ version: '12'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '13'
88
+ version: '12'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -119,26 +119,17 @@ files:
119
119
  - lib/hanami/action/cache/conditional_get.rb
120
120
  - lib/hanami/action/cache/directives.rb
121
121
  - lib/hanami/action/cache/expires.rb
122
- - lib/hanami/action/callable.rb
123
- - lib/hanami/action/callbacks.rb
124
- - lib/hanami/action/configurable.rb
125
122
  - lib/hanami/action/cookie_jar.rb
126
123
  - lib/hanami/action/cookies.rb
127
- - lib/hanami/action/exposable.rb
128
- - lib/hanami/action/exposable/guard.rb
129
124
  - lib/hanami/action/flash.rb
130
125
  - lib/hanami/action/glue.rb
131
- - lib/hanami/action/head.rb
126
+ - lib/hanami/action/halt.rb
132
127
  - lib/hanami/action/mime.rb
133
128
  - lib/hanami/action/params.rb
134
- - lib/hanami/action/rack.rb
135
- - lib/hanami/action/rack/callable.rb
136
- - lib/hanami/action/rack/errors.rb
137
129
  - lib/hanami/action/rack/file.rb
138
- - lib/hanami/action/redirect.rb
139
130
  - lib/hanami/action/request.rb
131
+ - lib/hanami/action/response.rb
140
132
  - lib/hanami/action/session.rb
141
- - lib/hanami/action/throwable.rb
142
133
  - lib/hanami/action/validatable.rb
143
134
  - lib/hanami/controller.rb
144
135
  - lib/hanami/controller/configuration.rb
@@ -157,14 +148,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
157
148
  requirements:
158
149
  - - ">="
159
150
  - !ruby/object:Gem::Version
160
- version: 2.3.0
151
+ version: 2.5.0
161
152
  required_rubygems_version: !ruby/object:Gem::Requirement
162
153
  requirements:
163
- - - ">="
154
+ - - ">"
164
155
  - !ruby/object:Gem::Version
165
- version: '0'
156
+ version: 1.3.1
166
157
  requirements: []
167
- rubygems_version: 3.1.2
158
+ rubygems_version: 3.0.2
168
159
  signing_key:
169
160
  specification_version: 4
170
161
  summary: Complete, fast and testable actions for Rack and Hanami
@@ -1,92 +0,0 @@
1
- module Hanami
2
- module Action
3
- module Callable
4
- # Execute application logic.
5
- # It implements the Rack protocol.
6
- #
7
- # The request params are passed as an argument to the `#call` method.
8
- #
9
- # If routed with Hanami::Router, it extracts the relevant bits from the
10
- # Rack `env` (eg the requested `:id`).
11
- #
12
- # Otherwise everything it's passed as it is: the full Rack `env`
13
- # in production, and the given `Hash` for unit tests. See the examples
14
- # below.
15
- #
16
- # Application developers are forced to implement this method in their
17
- # actions.
18
- #
19
- # @param env [Hash] the full Rack env or the params. This value may vary,
20
- # see the examples below.
21
- #
22
- # @return [Array] a serialized Rack response (eg. `[200, {}, ["Hi!"]]`)
23
- #
24
- # @since 0.1.0
25
- #
26
- # @example with Hanami::Router
27
- # require 'hanami/controller'
28
- #
29
- # class Show
30
- # include Hanami::Action
31
- #
32
- # def call(params)
33
- # # ...
34
- # puts params # => { id: 23 } extracted from Rack env
35
- # end
36
- # end
37
- #
38
- # @example Standalone
39
- # require 'hanami/controller'
40
- #
41
- # class Show
42
- # include Hanami::Action
43
- #
44
- # def call(params)
45
- # # ...
46
- # puts params
47
- # # => { :"rack.version"=>[1, 2],
48
- # # :"rack.input"=>#<StringIO:0x007fa563463948>, ... }
49
- # end
50
- # end
51
- #
52
- # @example Unit Testing
53
- # require 'hanami/controller'
54
- #
55
- # class Show
56
- # include Hanami::Action
57
- #
58
- # def call(params)
59
- # # ...
60
- # puts params # => { id: 23, key: 'value' } passed as it is from testing
61
- # end
62
- # end
63
- #
64
- # action = Show.new
65
- # response = action.call({ id: 23, key: 'value' })
66
- def call(env)
67
- _rescue do
68
- @_env = env
69
- @headers = ::Rack::Utils::HeaderHash.new(configuration.default_headers)
70
- @params = self.class.params_class.new(@_env)
71
- super @params
72
- end
73
-
74
- finish
75
- end
76
-
77
- private
78
-
79
- # Prepare the Rack response before the control is returned to the
80
- # webserver.
81
- #
82
- # @since 0.1.0
83
- # @api private
84
- #
85
- # @see Hanami::Action#finish
86
- def finish
87
- super
88
- response
89
- end
90
- end
91
- end
92
- end
@@ -1,214 +0,0 @@
1
- require 'hanami/utils/class_attribute'
2
- require 'hanami/utils/callbacks'
3
-
4
- module Hanami
5
- module Action
6
- # Before and after callbacks
7
- #
8
- # @since 0.1.0
9
- # @see Hanami::Action::ClassMethods#before
10
- # @see Hanami::Action::ClassMethods#after
11
- module Callbacks
12
- # Override Ruby's hook for modules.
13
- # It includes callbacks logic
14
- #
15
- # @param base [Class] the target action
16
- #
17
- # @since 0.1.0
18
- # @api private
19
- #
20
- # @see http://www.ruby-doc.org/core/Module.html#method-i-included
21
- def self.included(base)
22
- base.class_eval do
23
- extend ClassMethods
24
- prepend InstanceMethods
25
- end
26
- end
27
-
28
- # Callbacks API class methods
29
- #
30
- # @since 0.1.0
31
- # @api private
32
- module ClassMethods
33
- # Override Ruby's hook for modules.
34
- # It includes callbacks logic
35
- #
36
- # @param base [Class] the target action
37
- #
38
- # @since 0.1.0
39
- # @api private
40
- #
41
- # @see http://www.ruby-doc.org/core/Module.html#method-i-extended
42
- def self.extended(base)
43
- base.class_eval do
44
- include Utils::ClassAttribute
45
-
46
- class_attribute :before_callbacks
47
- self.before_callbacks = Utils::Callbacks::Chain.new
48
-
49
- class_attribute :after_callbacks
50
- self.after_callbacks = Utils::Callbacks::Chain.new
51
- end
52
- end
53
-
54
- # Define a callback for an Action.
55
- # The callback will be executed **before** the action is called, in the
56
- # order they are added.
57
- #
58
- # @param callbacks [Symbol, Array<Symbol>] a single or multiple symbol(s)
59
- # each of them is representing a name of a method available in the
60
- # context of the Action.
61
- #
62
- # @param blk [Proc] an anonymous function to be executed
63
- #
64
- # @return [void]
65
- #
66
- # @since 0.3.2
67
- #
68
- # @see Hanami::Action::Callbacks::ClassMethods#append_after
69
- #
70
- # @example Method names (symbols)
71
- # require 'hanami/controller'
72
- #
73
- # class Show
74
- # include Hanami::Action
75
- #
76
- # before :authenticate, :set_article
77
- #
78
- # def call(params)
79
- # end
80
- #
81
- # private
82
- # def authenticate
83
- # # ...
84
- # end
85
- #
86
- # # `params` in the method signature is optional
87
- # def set_article(params)
88
- # @article = Article.find params[:id]
89
- # end
90
- # end
91
- #
92
- # # The order of execution will be:
93
- # #
94
- # # 1. #authenticate
95
- # # 2. #set_article
96
- # # 3. #call
97
- #
98
- # @example Anonymous functions (Procs)
99
- # require 'hanami/controller'
100
- #
101
- # class Show
102
- # include Hanami::Action
103
- #
104
- # before { ... } # 1 do some authentication stuff
105
- # before {|params| @article = Article.find params[:id] } # 2
106
- #
107
- # def call(params)
108
- # end
109
- # end
110
- #
111
- # # The order of execution will be:
112
- # #
113
- # # 1. authentication
114
- # # 2. set the article
115
- # # 3. #call
116
- def append_before(*callbacks, &blk)
117
- before_callbacks.append(*callbacks, &blk)
118
- end
119
-
120
- # @since 0.1.0
121
- alias_method :before, :append_before
122
-
123
- # Define a callback for an Action.
124
- # The callback will be executed **after** the action is called, in the
125
- # order they are added.
126
- #
127
- # @param callbacks [Symbol, Array<Symbol>] a single or multiple symbol(s)
128
- # each of them is representing a name of a method available in the
129
- # context of the Action.
130
- #
131
- # @param blk [Proc] an anonymous function to be executed
132
- #
133
- # @return [void]
134
- #
135
- # @since 0.3.2
136
- #
137
- # @see Hanami::Action::Callbacks::ClassMethods#append_before
138
- def append_after(*callbacks, &blk)
139
- after_callbacks.append(*callbacks, &blk)
140
- end
141
-
142
- # @since 0.1.0
143
- alias_method :after, :append_after
144
-
145
- # Define a callback for an Action.
146
- # The callback will be executed **before** the action is called.
147
- # It will add the callback at the beginning of the callbacks' chain.
148
- #
149
- # @param callbacks [Symbol, Array<Symbol>] a single or multiple symbol(s)
150
- # each of them is representing a name of a method available in the
151
- # context of the Action.
152
- #
153
- # @param blk [Proc] an anonymous function to be executed
154
- #
155
- # @return [void]
156
- #
157
- # @since 0.3.2
158
- #
159
- # @see Hanami::Action::Callbacks::ClassMethods#prepend_after
160
- def prepend_before(*callbacks, &blk)
161
- before_callbacks.prepend(*callbacks, &blk)
162
- end
163
-
164
- # Define a callback for an Action.
165
- # The callback will be executed **after** the action is called.
166
- # It will add the callback at the beginning of the callbacks' chain.
167
- #
168
- # @param callbacks [Symbol, Array<Symbol>] a single or multiple symbol(s)
169
- # each of them is representing a name of a method available in the
170
- # context of the Action.
171
- #
172
- # @param blk [Proc] an anonymous function to be executed
173
- #
174
- # @return [void]
175
- #
176
- # @since 0.3.2
177
- #
178
- # @see Hanami::Action::Callbacks::ClassMethods#prepend_before
179
- def prepend_after(*callbacks, &blk)
180
- after_callbacks.prepend(*callbacks, &blk)
181
- end
182
- end
183
-
184
- # Callbacks API instance methods
185
- #
186
- # @since 0.1.0
187
- # @api private
188
- module InstanceMethods
189
- # Implements the Rack/Hanami::Action protocol
190
- #
191
- # @since 0.1.0
192
- # @api private
193
- def call(params)
194
- _run_before_callbacks(params)
195
- super
196
- _run_after_callbacks(params)
197
- end
198
-
199
- private
200
- # @since 0.1.0
201
- # @api private
202
- def _run_before_callbacks(params)
203
- self.class.before_callbacks.run(self, params)
204
- end
205
-
206
- # @since 0.1.0
207
- # @api private
208
- def _run_after_callbacks(params)
209
- self.class.after_callbacks.run(self, params)
210
- end
211
- end
212
- end
213
- end
214
- end
@@ -1,50 +0,0 @@
1
- require 'hanami/utils/class_attribute'
2
-
3
- module Hanami
4
- module Action
5
- # Configuration API
6
- #
7
- # @since 0.2.0
8
- #
9
- # @see Hanami::Controller::Configuration
10
- module Configurable
11
- # Override Ruby's hook for modules.
12
- # It includes configuration logic
13
- #
14
- # @param base [Class] the target action
15
- #
16
- # @since 0.2.0
17
- # @api private
18
- #
19
- # @see http://www.ruby-doc.org/core-2.1.2/Module.html#method-i-included
20
- #
21
- # @example
22
- # require 'hanami/controller'
23
- #
24
- # class Show
25
- # include Hanami::Action
26
- # end
27
- #
28
- # Show.configuration
29
- def self.included(base)
30
- config = Hanami::Controller::Configuration.for(base)
31
-
32
- base.class_eval do
33
- include Utils::ClassAttribute
34
-
35
- class_attribute :configuration
36
- self.configuration = config
37
- end
38
-
39
- config.copy!(base)
40
- end
41
-
42
- private
43
-
44
- # @since 0.2.0
45
- def configuration
46
- self.class.configuration
47
- end
48
- end
49
- end
50
- end