lotus-controller 0.4.5 → 0.4.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04ae3ccf09d545e91ee49d06a52dd18ea196871f
4
- data.tar.gz: 645e47bc4dacb1147cf01007668bd73ece973169
3
+ metadata.gz: cac7b8bf14852940993b526910f912f4c8a84398
4
+ data.tar.gz: 0d1987258f25f24b2e3b797441e557d76e704184
5
5
  SHA512:
6
- metadata.gz: cc76f8ea93416a106fb491bdd3168df82722386b85306eabdf73fca31fa20dff7c38f38ebb317b8393f849a54ec56a3c08e774780691a92289bcf2848af70487
7
- data.tar.gz: 923df9fa385da1b3358ebfc46ed386665e6f3f0814f901a39b960603e32dfead3f1f04e90fcf323d56f9401cbbd2e236d52bd5a3ef1a4d1f61f2659322502090
6
+ metadata.gz: 17ef726ad1e57674ef8215aa9cb1aa4277f8ef29518d89e893f66dc8a631e7f9387f118f77d6dcacfdbc8ff8595e46798455ef6d2175ca12a6a365b33396b2e5
7
+ data.tar.gz: 4acdfbe61468ee74824894b1c060b8068a612c619acfab62c283284214e17c694a43c3c940ae46d3c17548ffbc2c98d48740a04b6396f1407467afc37ff7c2c7
data/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Lotus::Controller
2
2
  Complete, fast and testable actions for Rack
3
3
 
4
+ ## v0.4.6 - 2015-12-04
5
+ ### Added
6
+ - [Luca Guidi] Allow to force custom headers for responses that shouldn't include them (eg 204). Override `#keep_response_header?(header)` in action
7
+
4
8
  ## v0.4.5 - 2015-09-30
5
9
  ### Added
6
10
  - [Theo Felippe] Added configuration entries: `#default_request_format` and `default_response_format`.
@@ -50,7 +50,7 @@ module Lotus
50
50
 
51
51
  if _requires_no_body?
52
52
  @_body = nil
53
- @headers.reject! { |header,_| !ENTITY_HEADERS.include?(header) }
53
+ @headers.reject! {|header,_| !keep_response_header?(header) }
54
54
  end
55
55
  end
56
56
 
@@ -60,6 +60,63 @@ module Lotus
60
60
  def _requires_no_body?
61
61
  HTTP_STATUSES_WITHOUT_BODY.include?(@_status) || head?
62
62
  end
63
+
64
+ private
65
+ # According to RFC 2616, when a response MUST have an empty body, it only
66
+ # allows Entity Headers.
67
+ #
68
+ # For instance, a <tt>204</tt> doesn't allow <tt>Content-Type</tt> or any
69
+ # other custom header.
70
+ #
71
+ # This restriction is enforced by <tt>Lotus::Action::Head#finish</tt>.
72
+ #
73
+ # However, there are cases that demand to bypass this rule to set meta
74
+ # informations via headers.
75
+ #
76
+ # An example is a <tt>DELETE</tt> request for a JSON API application.
77
+ # It returns a <tt>204</tt> but still wants to specify the rate limit
78
+ # quota via <tt>X-Rate-Limit</tt>.
79
+ #
80
+ # @since x.x.x
81
+ # @api public
82
+ #
83
+ # @see Lotus::Action::HEAD#finish
84
+ #
85
+ # @example
86
+ # require 'lotus/controller'
87
+ #
88
+ # module Books
89
+ # class Destroy
90
+ # include Lotus::Action
91
+ #
92
+ # def call(params)
93
+ # # ...
94
+ # self.headers.merge!(
95
+ # 'Last-Modified' => 'Fri, 27 Nov 2015 13:32:36 GMT',
96
+ # 'X-Rate-Limit' => '4000',
97
+ # 'Content-Type' => 'application/json',
98
+ # 'X-No-Pass' => 'true'
99
+ # )
100
+ #
101
+ # self.status = 204
102
+ # end
103
+ #
104
+ # private
105
+ #
106
+ # def keep_response_header?(header)
107
+ # super || header == 'X-Rate-Limit'
108
+ # end
109
+ # end
110
+ # end
111
+ #
112
+ # # Only the following headers will be sent:
113
+ # # * Last-Modified - because we used `super' in the method that respects the HTTP RFC
114
+ # # * X-Rate-Limit - because we explicitely allow it
115
+ #
116
+ # # Both Content-Type and X-No-Pass are removed because they're not allowed
117
+ def keep_response_header?(header)
118
+ ENTITY_HEADERS.include?(header)
119
+ end
63
120
  end
64
121
  end
65
122
  end
@@ -3,6 +3,6 @@ module Lotus
3
3
  # Defines the version
4
4
  #
5
5
  # @since 0.1.0
6
- VERSION = '0.4.5'.freeze
6
+ VERSION = '0.4.6'.freeze
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lotus-controller
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.5
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-09-30 00:00:00.000000000 Z
13
+ date: 2015-12-04 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack