rack-autocrud 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.md +23 -11
  2. data/lib/rack/autocrud.rb +14 -10
  3. metadata +1 -1
data/README.md CHANGED
@@ -63,7 +63,7 @@ _config.ru_. This middleware will dynamically create a _Sinatra::Base_ subclass
63
63
  | Route | Action | HTTP Response Code |
64
64
  | ----------- | -------------------------------| ------------------ |
65
65
  | get / | List all _Person_ entries | 403 |
66
- | post / | Create a new _Person_ | 201 / 402 |
66
+ | post / | Create a new _Person_ | 201 / 403 |
67
67
  | get /:id | Retrieve a _Person_ | 200 |
68
68
  | put /:id | Update a _Person_ | 201 / 403 |
69
69
  | delete /:id | Destroy a _Person_ | 204 |
@@ -98,16 +98,16 @@ CRUD Processing Hooks
98
98
 
99
99
  There are some basic processing hooks you can define in your endpoint:
100
100
 
101
- | Hook | Description |
102
- | ------------------------------ | ---------------------------------------------------------------- |
103
- | pre_create(env,request) | Called before the record is created |
104
- | post_create(env,request,obj) | Called after the record is saved, if it was saved successfully |
105
- | pre_retrieve(env,request) | Called before the record is fetched |
106
- | post_retrieve(env,request,obj) | Called after the record is fetched |
107
- | pre_update(env,request) | Called before the record is updated |
108
- | post_update(env,request) | Called after the record is updated, if it was saved successfully |
109
- | pre_destroy(env,request) | Called before the record is destroyed |
110
- | post_destroy(env,request,obj) | Called after the record is destroyed |
101
+ | Hook | Description |
102
+ | -------------------------------- | ---------------------------------------------------------------- |
103
+ | pre_create(env,request,params) | Called before the record is created |
104
+ | post_create(env,request,obj) | Called after the record is saved, if it was saved successfully |
105
+ | pre_retrieve(env,request,params) | Called before the record is fetched |
106
+ | post_retrieve(env,request,obj) | Called after the record is fetched |
107
+ | pre_update(env,request,params) | Called before the record is updated |
108
+ | post_update(env,request,params) | Called after the record is updated, if it was saved successfully |
109
+ | pre_destroy(env,request,params) | Called before the record is destroyed |
110
+ | post_destroy(env,request,obj) | Called after the record is destroyed |
111
111
 
112
112
  Parameters:
113
113
 
@@ -132,3 +132,15 @@ def set_request_body(new_body,content_type='text/json')
132
132
 
133
133
  where *new_body* is expected to be a string.
134
134
 
135
+ Auto-Inclusion of Other Modules
136
+ ===============================
137
+
138
+ This middleware also takes an option _:includes_ which can be used to automatically
139
+ include other modules (e.g. helpers) when creating and/or patching endpoints.
140
+
141
+ For example:
142
+
143
+ ```ruby
144
+ use Rack::AutoCRUD, :model_namespace => 'Models', :endpoint_namespace => 'Endpoints', :includes => [ Your::HelperModule ]
145
+ ```
146
+
data/lib/rack/autocrud.rb CHANGED
@@ -20,6 +20,7 @@ module Rack
20
20
  @app = app
21
21
  @model_namespace = options[:model_namespace]
22
22
  @endpoint_namespace = options[:endpoint_namespace]
23
+ @includes = options[:includes]
23
24
  @endpoint_mod = nil
24
25
  end
25
26
 
@@ -57,6 +58,9 @@ module Rack
57
58
  @endpoint_mod.const_set(endpoint.capitalize,endpoint_klass)
58
59
  end
59
60
 
61
+ # Add in any specified helpers
62
+ @includes.each { |inc| endpoint_klass.send(:include,inc) } unless @includes.nil?
63
+
60
64
  # Patch in the routes
61
65
  endpoint_klass.class_exec(model_klass,endpoint,env) { |model,endpoint,env|
62
66
  def set_request_body(new_body,content_type='text/json')
@@ -67,13 +71,13 @@ module Rack
67
71
  end
68
72
 
69
73
  get '/' do
70
- halt [403, '{ "error": "Access Denied" }']
74
+ halt [ 403, '{ "error": "Access Denied" }' ]
71
75
  end
72
76
 
73
77
  post '/' do
74
78
  # Call the pre-create hook
75
79
  if self.respond_to?(:pre_create)
76
- ret = pre_create(env,request)
80
+ ret = pre_create(env,request,params)
77
81
  return ret unless ret.nil?
78
82
  end
79
83
 
@@ -84,7 +88,7 @@ module Rack
84
88
  obj = nil
85
89
  begin
86
90
  obj = model.create(JSON.parse(request.body.read))
87
- halt [402, '{ "error": "Failed to save ' + endpoint + '" }'] unless obj && obj.saved?
91
+ halt [ 403, '{ "error": "Failed to save ' + endpoint + '" }' ] unless obj && obj.saved?
88
92
  rescue JSON::ParserError
89
93
  halt [ 400, { 'error' => 'Invalid JSON in request body.', 'details' => $! }.to_json ]
90
94
  end
@@ -101,7 +105,7 @@ module Rack
101
105
  get '/:id' do
102
106
  # Call the pre-retrieve hook
103
107
  if self.respond_to?(:pre_retrieve)
104
- ret = pre_retrieve(env,request)
108
+ ret = pre_retrieve(env,request,params)
105
109
  return ret unless ret.nil?
106
110
  end
107
111
 
@@ -119,7 +123,7 @@ module Rack
119
123
  put '/:id' do
120
124
  # Call the pre-update hook
121
125
  if self.respond_to?(:pre_update)
122
- ret = pre_update(env,request)
126
+ ret = pre_update(env,request,params)
123
127
  return ret unless ret.nil?
124
128
  end
125
129
 
@@ -128,15 +132,15 @@ module Rack
128
132
 
129
133
  # Attempt to update the model
130
134
  begin
131
- saved = model.update(JSON.parse(request.body.read))
132
- halt [403, 'Access Denied'] unless saved
135
+ saved = model.update(JSON.parse(request.body.read).merge(:id => params[:id]))
136
+ halt [ 403, '{ "error": "Access Denied" }' ] unless saved
133
137
  rescue JSON::ParserError
134
138
  halt [ 400, { 'error' => 'Invalid JSON in request body.', 'details' => $! }.to_json ]
135
139
  end
136
140
 
137
141
  # Call the post-update hook
138
142
  if self.respond_to?(:post_update)
139
- ret = post_update(env,request)
143
+ ret = post_update(env,request,params)
140
144
  return ret unless ret.nil?
141
145
  end
142
146
 
@@ -146,12 +150,12 @@ module Rack
146
150
  delete '/:id' do
147
151
  # Call the pre-destroy hook
148
152
  if self.respond_to?(:pre_destroy)
149
- ret = pre_destroy(env,request)
153
+ ret = pre_destroy(env,request,params)
150
154
  return ret unless ret.nil?
151
155
  end
152
156
 
153
157
  obj = model.get(params[:id])
154
- obj.destroy if obj
158
+ obj.destroy! if obj
155
159
 
156
160
  # Call the post-destroy hook
157
161
  if self.respond_to?(:post_destroy)
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.6
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: