rack-backend-api 0.2.2 → 0.2.3
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.
- data/README.md +1 -0
- data/lib/backend_api.rb +10 -5
- data/rack-backend-api.gemspec +1 -1
- data/test/spec_backend_api.rb +16 -0
- metadata +4 -4
data/README.md
CHANGED
@@ -294,6 +294,7 @@ CHANGE LOG
|
|
294
294
|
0.2.0 Control what you send on 201 responses
|
295
295
|
0.2.1 Have a title in forms + Only use `_method` if not POST
|
296
296
|
0.2.2 Backend form should accept a block for populating the fields
|
297
|
+
0.2.3 Send a 404 if the entry does not exist
|
297
298
|
|
298
299
|
COPYRIGHT
|
299
300
|
=========
|
data/lib/backend_api.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
class BackendAPI
|
2
|
-
VERSION = [0,2,
|
2
|
+
VERSION = [0,2,3]
|
3
3
|
WRAP = <<-EOT
|
4
4
|
<!doctype html>
|
5
5
|
<html>
|
@@ -81,16 +81,21 @@ class BackendAPI
|
|
81
81
|
def build_model_vars
|
82
82
|
@model_class_name = camel_case(@model_name)
|
83
83
|
if !@model_name.nil? && ::Object.const_defined?(@model_class_name)
|
84
|
-
@model_class =
|
84
|
+
@model_class = Kernel.const_get(@model_class_name)
|
85
85
|
@model_instance = @model_class.backend_get(@id.to_i) unless @id.nil?
|
86
86
|
@req['model'] ||= {}
|
87
|
+
send_404 if @model_instance.nil?&&!@id.nil?
|
87
88
|
else
|
88
|
-
|
89
|
-
@res.headers['X-Cascade']='pass'
|
90
|
-
@res.write 'Not Found'
|
89
|
+
send_404
|
91
90
|
end
|
92
91
|
end
|
93
92
|
|
93
|
+
def send_404
|
94
|
+
@res.status=404 # Not Found
|
95
|
+
@res.headers['X-Cascade']='pass'
|
96
|
+
@res.write 'Not Found'
|
97
|
+
end
|
98
|
+
|
94
99
|
def camel_case(s)
|
95
100
|
return if s.nil?
|
96
101
|
c = s[0]
|
data/rack-backend-api.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'rack-backend-api'
|
3
|
-
s.version = "0.2.
|
3
|
+
s.version = "0.2.3"
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.summary = "A Rack middleware that provides a simple API for your Admin section"
|
6
6
|
s.description = "The purpose of this Rack Middleware is to provide an API that interfaces with database actions in order to build a CMS."
|
data/test/spec_backend_api.rb
CHANGED
@@ -94,6 +94,10 @@ describe 'API Post' do
|
|
94
94
|
Haiku.filter(:title => 'Summer is not new !!!').first.id.should==4
|
95
95
|
end
|
96
96
|
|
97
|
+
should "Send a 404 if the entry does not exist" do
|
98
|
+
req_lint(BackendAPI.new).post('/haiku/0', :params => {'model' => {'title' => 'Summer is not new !!!'}}).status.should==404
|
99
|
+
end
|
100
|
+
|
97
101
|
should "Accept a new entry with no attributes as long as it is valid" do
|
98
102
|
res = req_lint(BackendAPI.new).post('/haiku')
|
99
103
|
res.status.should==201
|
@@ -162,6 +166,10 @@ describe 'API Get' do
|
|
162
166
|
req_lint(BackendAPI.new).get('/haiku/3').body.should==wrap('Haiku', Haiku[3].backend_form('/haiku/3'))
|
163
167
|
end
|
164
168
|
|
169
|
+
should "Send a 404 if the entry does not exist" do
|
170
|
+
req_lint(BackendAPI.new).get('/haiku/0').status.should==404
|
171
|
+
end
|
172
|
+
|
165
173
|
should "Be able to send a form with selected set of fields" do
|
166
174
|
req_lint(BackendAPI.new).get('/haiku', :params => {'fields' => ['title']}).body.should==wrap('Haiku', Haiku.new.backend_form('/haiku', ['title']))
|
167
175
|
req_lint(BackendAPI.new).get('/haiku/3', :params => {'fields' => ['title']}).body.should==wrap('Haiku', Haiku[3].backend_form('/haiku/3', ['title']))
|
@@ -190,6 +198,10 @@ describe 'API Put' do
|
|
190
198
|
haiku.title.should=='Spring'
|
191
199
|
end
|
192
200
|
|
201
|
+
should "Send a 404 if the entry does not exist" do
|
202
|
+
req_lint(BackendAPI.new).put('/haiku/0', :params => {'model' => {'body' => "Maybe I have no inspiration\nBut at least\nIt should be on three lines"}}).status.should==404
|
203
|
+
end
|
204
|
+
|
193
205
|
should "Work with MethodOverride" do
|
194
206
|
req_lint(BackendAPI.new).post('/haiku/3', :params => {'_method' => 'PUT', 'model' => {'title' => 'Spring Wow !!!'}})
|
195
207
|
Haiku[3].title.should=='Spring Wow !!!'
|
@@ -266,6 +278,10 @@ describe 'API Delete' do
|
|
266
278
|
Haiku[1].should==nil
|
267
279
|
end
|
268
280
|
|
281
|
+
should "Send a 404 if the entry does not exist" do
|
282
|
+
req_lint(BackendAPI.new).delete('/haiku/0').status.should==404
|
283
|
+
end
|
284
|
+
|
269
285
|
should "Work with MethodOverride" do
|
270
286
|
req_lint(BackendAPI.new(dummy_app)).post('/haiku/2', :params => {'_method' => 'DELETE'})
|
271
287
|
Haiku[2].should==nil
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-backend-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 3
|
10
|
+
version: 0.2.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Mickael Riga
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-08-
|
18
|
+
date: 2011-08-19 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|