rack-autocrud 0.1.15 → 0.1.16
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 +48 -12
- data/lib/rack/autocrud.rb +25 -2
- metadata +2 -2
data/README.md
CHANGED
@@ -74,7 +74,7 @@ option to this middleware.
|
|
74
74
|
For example:
|
75
75
|
|
76
76
|
```ruby
|
77
|
-
use Rack::AutoCRUD, :model_namespace => 'Models', :endpoint_namespace => 'Endpoints', :sinatra_opts => { :sessions =>
|
77
|
+
use Rack::AutoCRUD, :model_namespace => 'Models', :endpoint_namespace => 'Endpoints', :sinatra_opts => { :sessions => true }
|
78
78
|
```
|
79
79
|
|
80
80
|
Which can be extremely useful if you're handling sessions at a higher level than the
|
@@ -89,7 +89,7 @@ _config.ru_. This middleware will dynamically create a _Sinatra::Base_ subclass
|
|
89
89
|
|
90
90
|
| Route | Action | HTTP Response Code |
|
91
91
|
| ----------- | -------------------------------| ------------------ |
|
92
|
-
| get / | List all _Person_ entries | 403
|
92
|
+
| get / | List all _Person_ entries | 200 / 403 |
|
93
93
|
| post / | Create a new _Person_ | 201 / 402 |
|
94
94
|
| get /:id | Retrieve a _Person_ | 200 |
|
95
95
|
| put /:id | Update a _Person_ | 201 / 402 |
|
@@ -125,26 +125,62 @@ CRUD Processing Hooks
|
|
125
125
|
|
126
126
|
There are some basic processing hooks you can define in your endpoint:
|
127
127
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
| pre_create(env,request,params)
|
131
|
-
| post_create(env,request,obj)
|
132
|
-
| pre_retrieve(env,request,params)
|
133
|
-
| post_retrieve(env,request,obj)
|
134
|
-
| pre_update(env,request,params)
|
135
|
-
| post_update(env,request,params)
|
136
|
-
| pre_destroy(env,request,params)
|
137
|
-
| post_destroy(env,request,obj)
|
128
|
+
| Hook | Description |
|
129
|
+
| --------------------------------------- | ---------------------------------------------------------------- |
|
130
|
+
| pre_create(env,request,params) | Called before the record is created |
|
131
|
+
| post_create(env,request,obj) | Called after the record is saved, if it was saved successfully |
|
132
|
+
| pre_retrieve(env,request,params) | Called before the record is fetched |
|
133
|
+
| post_retrieve(env,request,obj) | Called after the record is fetched |
|
134
|
+
| pre_update(env,request,params) | Called before the record is updated |
|
135
|
+
| post_update(env,request,params) | Called after the record is updated, if it was saved successfully |
|
136
|
+
| pre_destroy(env,request,params) | Called before the record is destroyed |
|
137
|
+
| post_destroy(env,request,obj) | Called after the record is destroyed |
|
138
|
+
| pre_collect(env,request,params) | Called before the record is collected |
|
139
|
+
| post_collect(env,request,collection) | Called after the record is collected |
|
140
|
+
|
138
141
|
|
139
142
|
Parameters:
|
140
143
|
|
141
144
|
* *env* is the current Rack environment
|
142
145
|
* *request* is the current request object
|
143
146
|
* *obj* is the ORM object corresponding to the record in question
|
147
|
+
* *collection* is the collection returned by the ORM
|
144
148
|
|
145
149
|
If any of these hooks returns anything other than _nil_, it is assumed to be a response object, which
|
146
150
|
is returned immediately, and no further processing is performed.
|
147
151
|
|
152
|
+
Collections
|
153
|
+
===========
|
154
|
+
|
155
|
+
All models in the namespace are *not* collectable by default. To enable collections,
|
156
|
+
you need to set the _COLLECTABLE_ constant in the model:
|
157
|
+
|
158
|
+
```ruby
|
159
|
+
module Models
|
160
|
+
class Person
|
161
|
+
include DataMapper::Resource
|
162
|
+
|
163
|
+
property :id, Serial
|
164
|
+
property :name, String
|
165
|
+
|
166
|
+
# Enable collection
|
167
|
+
COLLECTABLE = 1
|
168
|
+
end
|
169
|
+
end
|
170
|
+
```
|
171
|
+
|
172
|
+
You can set this constant to 0 to disable it. If you want to enable collections
|
173
|
+
on all models in your namespace, simply specify the constant there:
|
174
|
+
|
175
|
+
If you want to *not* expose all models by default, simply define the constant as part of the _Models_ module:
|
176
|
+
|
177
|
+
```ruby
|
178
|
+
module Models
|
179
|
+
# Enable collections on all models by default
|
180
|
+
COLLECTABLE = 1
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
148
184
|
Selective Exposure
|
149
185
|
==================
|
150
186
|
|
data/lib/rack/autocrud.rb
CHANGED
@@ -64,6 +64,11 @@ module Rack
|
|
64
64
|
model_klass.const_set(:EXPOSE,@model_mod.const_get(:EXPOSE))
|
65
65
|
end
|
66
66
|
|
67
|
+
# Make sure we copy the :COLLECTABLE constant if it's defined upstream
|
68
|
+
if !model_klass.nil? && !model_klass.const_defined?(:COLLECTABLE) && @model_mod.const_defined?(:COLLECTABLE)
|
69
|
+
model_klass.const_set(:COLLECTABLE,@model_mod.const_get(:COLLECTABLE))
|
70
|
+
end
|
71
|
+
|
67
72
|
# Now, if we've got something, do our magic.
|
68
73
|
if !model_klass.nil? && (!model_klass.const_defined?(:EXPOSE) || model_klass.const_get(:EXPOSE))
|
69
74
|
# If we don't have an endpoint class, make one
|
@@ -88,7 +93,24 @@ module Rack
|
|
88
93
|
end
|
89
94
|
|
90
95
|
get '/' do
|
91
|
-
halt [ 403, '{ "error": "Access Denied" }' ]
|
96
|
+
halt [ 403, '{ "error": "Access Denied" }' ] unless model_klass.const_defined?(:COLLECTABLE) && model.const_get(:COLLECTABLE)
|
97
|
+
|
98
|
+
# Call the pre-create hook
|
99
|
+
if self.respond_to?(:pre_collect)
|
100
|
+
ret = pre_collect(env,request,params)
|
101
|
+
return ret unless ret.nil?
|
102
|
+
end
|
103
|
+
|
104
|
+
# Get the collection
|
105
|
+
collection = model.all
|
106
|
+
|
107
|
+
# Call the post-collect hook
|
108
|
+
if self.respond_to?(:post_collect)
|
109
|
+
ret = post_collect(env,request,collection)
|
110
|
+
return ret unless ret.nil?
|
111
|
+
end
|
112
|
+
|
113
|
+
collection.to_json
|
92
114
|
end
|
93
115
|
|
94
116
|
post '/' do
|
@@ -185,7 +207,8 @@ module Rack
|
|
185
207
|
}
|
186
208
|
|
187
209
|
# Now, call the endpoint class (assuming it will return a response)
|
188
|
-
env['PATH_INFO']
|
210
|
+
env['PATH_INFO'] = '/' + uri.join('/')
|
211
|
+
env['CONTENT_TYPE'] = 'text/json'
|
189
212
|
return endpoint_klass.call(env)
|
190
213
|
end
|
191
214
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-autocrud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.16
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|