Skip to content

Commit b356c94

Browse files
author
Tenyo Grozev
committed
add patch http method
1 parent 4684a1e commit b356c94

File tree

6 files changed

+34
-32
lines changed

6 files changed

+34
-32
lines changed

lib/angelo.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,15 @@
1111
module Angelo
1212

1313
GET = 'GET'
14+
PATCH = 'PATCH'
1415
POST = 'POST'
1516
PUT = 'PUT'
1617
DELETE = 'DELETE'
1718
OPTIONS = 'OPTIONS'
1819

19-
HTTPABLE = [:get, :post, :put, :delete, :options]
20+
HTTPABLE = [:get, :patch, :post, :put, :delete, :options]
2021
STATICABLE = [:get, :head]
21-
POST_OVERRIDABLE = [:put, :delete]
22+
POST_OVERRIDABLE = [:patch, :put, :delete]
2223

2324
ACCEPT_REQUEST_HEADER_KEY = 'Accept'
2425

lib/angelo/base.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ def params
242242
@params ||= case request.method
243243
when GET, DELETE, OPTIONS
244244
parse_query_string
245-
when POST, PUT
245+
when PATCH, POST, PUT
246246
parse_query_string_and_post_body
247247
end.merge mustermann.params(request.path)
248248
end

lib/angelo/minitest/helpers.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def http_req method, path, params = {}, headers = {}
6565
end
6666
private :http_req
6767

68-
[:get, :post, :put, :delete, :options, :head].each do |m|
68+
[:get, :patch, :post, :put, :delete, :options, :head].each do |m|
6969
define_method m do |path, params = {}, headers = {}, &block|
7070
hc_req m, path, params, headers, &block
7171
end

test/angelo/filter_spec.rb

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
@set_by_before = params
1313
end
1414

15-
[:get, :post, :put].each do |m|
15+
[:get, :patch, :post, :put].each do |m|
1616
__send__ m, '/before' do
1717
content_type :json
1818
@set_by_before
@@ -26,7 +26,7 @@
2626
get '/before', obj
2727
last_response_must_be_json obj_s
2828

29-
[:post, :put].each do |m|
29+
[:patch, :post, :put].each do |m|
3030
__send__ m, '/before', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
3131
last_response_must_be_json obj
3232
end
@@ -51,7 +51,7 @@
5151
@bat = params[:bat] if @bar
5252
end
5353

54-
[:get, :post, :put].each do |m|
54+
[:get, :patch, :post, :put].each do |m|
5555
__send__ m, '/before' do
5656
content_type :json
5757
{ foo: @foo, bar: @bar, bat: @bat }
@@ -65,7 +65,7 @@
6565
get '/before', obj
6666
last_response_must_be_json obj_s
6767

68-
[:post, :put].each do |m|
68+
[:patch, :post, :put].each do |m|
6969
__send__ m, '/before', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
7070
last_response_must_be_json obj
7171
end
@@ -94,7 +94,7 @@
9494
@id = params[:id].to_i
9595
end
9696

97-
[:get, :post, :put].each do |m|
97+
[:get, :patch, :post, :put].each do |m|
9898

9999
__send__ m, '/before' do
100100
content_type :json
@@ -124,7 +124,7 @@
124124
get '/before', obj
125125
last_response_must_be_json obj_s.select {|k,v| k == 'foo'}
126126

127-
[:post, :put].each do |m|
127+
[:patch, :post, :put].each do |m|
128128
__send__ m, '/before', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
129129
last_response_must_be_json obj.select {|k,v| k == 'foo'}
130130
end
@@ -136,23 +136,23 @@
136136
get '/before_bar', obj
137137
last_response_must_be_json obj_s.select {|k,v| ['foo','bar'].include? k}
138138

139-
[:post, :put].each do |m|
139+
[:patch, :post, :put].each do |m|
140140
__send__ m, '/before_bar', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
141141
last_response_must_be_json obj.select {|k,v| ['foo','bar'].include? k}
142142
end
143143

144144
get '/before_bat', obj
145145
last_response_must_be_json obj_s.select {|k,v| ['foo','bat'].include? k}
146146

147-
[:post, :put].each do |m|
147+
[:patch, :post, :put].each do |m|
148148
__send__ m, '/before_bat', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
149149
last_response_must_be_json obj.select {|k,v| ['foo','bat'].include? k}
150150
end
151151

152152
end
153153

154154
it 'matches regexes' do
155-
[:get, :post, :put].each do |m|
155+
[:get, :patch, :post, :put].each do |m|
156156
id = rand 1000
157157
__send__ m, "/before/#{id}"
158158
last_response_must_be_json({'id' => id})
@@ -188,8 +188,8 @@
188188
end
189189

190190
it 'runs after filters after routes' do
191-
a = %w[2 6 14 30 62]
192-
b = [4, 12, 28, 60, 124]
191+
a = %w[2 6 14 30 62 126]
192+
b = [4, 12, 28, 60, 124, 252]
193193

194194
Angelo::HTTPABLE.each_with_index do |m,i|
195195
__send__ m, '/after', obj
@@ -227,8 +227,8 @@
227227
end
228228

229229
it 'runs after filters in order' do
230-
a = %w[0 2 6 14 30]
231-
b = [2, 6, 14, 30, 62]
230+
a = %w[0 2 6 14 30 62]
231+
b = [2, 6, 14, 30, 62, 126]
232232

233233
Angelo::HTTPABLE.each_with_index do |m,i|
234234
__send__ m, '/after', obj
@@ -275,26 +275,27 @@
275275

276276
it 'runs default and specific after filters' do
277277

278-
a = %w[0 2 4 6 8]
279-
b = [2, 4, 6, 8, 10]
278+
a = %w[0 2 4 6 8 10]
279+
b = [2, 4, 6, 8, 10, 12]
280280

281281
Angelo::HTTPABLE.each_with_index do |m,i|
282282
__send__ m, '/after', obj
283283
last_response_must_be_html a[i]
284284
invoked.must_equal b[i]
285285
end
286286

287-
c = %w[10 24 52 108 220]
288-
d = [24, 52, 108, 220, 444]
287+
c = %w[12 28 60 124 252 508]
288+
d = [28, 60, 124, 252, 508, 1020]
289+
289290

290291
Angelo::HTTPABLE.each_with_index do |m,i|
291292
__send__ m, '/after_bar', obj
292293
last_response_must_be_html c[i]
293294
invoked.must_equal d[i]
294295
end
295296

296-
e = %w[444 442 440 438 436]
297-
f = [442, 440, 438, 436, 434]
297+
e = %w[1020 1018 1016 1014 1012 1010]
298+
f = [1018, 1016, 1014, 1012, 1010, 1008]
298299

299300
Angelo::HTTPABLE.each_with_index do |m,i|
300301
__send__ m, '/after_bat', obj

test/angelo/mustermann_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
params
1717
end
1818

19-
[:post, :put].each do |m|
19+
[:patch, :post, :put].each do |m|
2020
__send__ m, pattern do
2121
params
2222
end
@@ -39,7 +39,7 @@
3939
it 'overrides post body params' do
4040
path = '/some/things/are_good'
4141
headers = {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
42-
[:post, :put].each do |m|
42+
[:patch, :post, :put].each do |m|
4343
__send__ m, path, {foo: 'other', bar: 'are_bad'}.to_json, headers
4444
last_response_must_be_json mm_pattern.params(path)
4545
end
@@ -101,7 +101,7 @@
101101

102102
content_type :json
103103

104-
[:get, :post, :put].each do |m|
104+
[:get, :patch, :post, :put].each do |m|
105105
__send__ m, '/before/:bar' do
106106
{ bar: params[:bar], foo: params[:foo], foo_from_before: @foo }
107107
end
@@ -110,7 +110,7 @@
110110
end
111111

112112
it 'does not infect route block params with filter pattern params' do
113-
[:get, :post, :put].each do |m|
113+
[:get, :patch, :post, :put].each do |m|
114114
__send__ m, '/before/hi'
115115
last_response_must_be_json 'bar' => 'hi', 'foo' => nil, 'foo_from_before' => 'hi'
116116
end
@@ -131,7 +131,7 @@
131131
@bat = params[:bat] if @foo
132132
end
133133

134-
[:get, :post, :put].each do |m|
134+
[:get, :patch, :post, :put].each do |m|
135135

136136
__send__ m, '/before' do
137137
content_type :json
@@ -156,15 +156,15 @@
156156
get '/before_bar', obj
157157
last_response_must_be_json obj_s
158158

159-
[:post, :put].each do |m|
159+
[:patch, :post, :put].each do |m|
160160
__send__ m, '/before_bar', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
161161
last_response_must_be_json obj
162162
end
163163

164164
get '/before_bat', obj
165165
last_response_must_be_json obj_s
166166

167-
[:post, :put].each do |m|
167+
[:patch, :post, :put].each do |m|
168168
__send__ m, '/before_bat', obj.to_json, {Angelo::CONTENT_TYPE_HEADER_KEY => Angelo::JSON_TYPE}
169169
last_response_must_be_json obj
170170
end

test/angelo_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
end
9595

9696
it 'does not crash when receiving unknown http request type' do
97-
r = HTTP.patch(url('/'))
97+
r = HTTP.trace(url('/'))
9898
assert @server.alive?
9999
r.status.must_equal 404
100100
end
@@ -350,7 +350,7 @@
350350
last_response_must_be_json({})
351351
end
352352

353-
(Angelo::HTTPABLE - [:post, :put]).each do |m|
353+
(Angelo::HTTPABLE - [:patch, :post, :put]).each do |m|
354354
it "returns a populated hash for #{m.to_s.upcase} requests" do
355355
send m, '/json?foo=bar'
356356
last_response_must_be_json('foo' => 'bar')

0 commit comments

Comments
 (0)