rest-sinatra 0.3.2 → 0.3.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/VERSION +1 -1
- data/lib/rest-sinatra.rb +287 -287
- data/rest-sinatra.gemspec +63 -63
- data/spec/unit/posts_and_comments_spec.rb +148 -148
- data/spec/unit/sources_spec.rb +94 -94
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
data/lib/rest-sinatra.rb
CHANGED
@@ -1,287 +1,287 @@
|
|
1
|
-
module RestSinatra
|
2
|
-
|
3
|
-
def self.included(includer)
|
4
|
-
includer.extend(ClassMethods)
|
5
|
-
end
|
6
|
-
|
7
|
-
module ClassMethods
|
8
|
-
|
9
|
-
attr_reader :config
|
10
|
-
|
11
|
-
def resource(name, &block)
|
12
|
-
_resource(name, :regular, &block)
|
13
|
-
end
|
14
|
-
|
15
|
-
def nestable_resource(name, &block)
|
16
|
-
_resource(name, :nestable, &block)
|
17
|
-
end
|
18
|
-
|
19
|
-
protected
|
20
|
-
|
21
|
-
def _resource(name, resource_type, &block)
|
22
|
-
config = evaluate_block(name, resource_type, &block)
|
23
|
-
validate(config)
|
24
|
-
build_resource(config)
|
25
|
-
config
|
26
|
-
end
|
27
|
-
|
28
|
-
def evaluate_block(name, resource_type, &block)
|
29
|
-
scope = Object.new
|
30
|
-
scope.extend(ResourceMethods)
|
31
|
-
scope.instance_eval do
|
32
|
-
@c = {
|
33
|
-
:name => name,
|
34
|
-
:resource_type => resource_type,
|
35
|
-
:model => nil,
|
36
|
-
:read_only => [],
|
37
|
-
:permission => nil,
|
38
|
-
:callbacks => {},
|
39
|
-
:nested_resources => []
|
40
|
-
}
|
41
|
-
end
|
42
|
-
scope.instance_eval(&block)
|
43
|
-
scope.instance_variable_get("@c")
|
44
|
-
end
|
45
|
-
|
46
|
-
def validate(c)
|
47
|
-
raise "name required" unless c[:name]
|
48
|
-
raise "model required" unless c[:model]
|
49
|
-
c[:nested_resources].each do |resource|
|
50
|
-
unless resource[:association]
|
51
|
-
raise "association required for #{resource[:class]}"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def build_resource(config)
|
57
|
-
case config[:resource_type]
|
58
|
-
when :regular
|
59
|
-
build_parent_resource(config)
|
60
|
-
build_nested_resources(config)
|
61
|
-
when :nestable
|
62
|
-
save_nestable_config(config)
|
63
|
-
else
|
64
|
-
raise "Unexpected resource_type"
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def build_parent_resource(config)
|
69
|
-
callbacks = config[:callbacks]
|
70
|
-
model = config[:model]
|
71
|
-
name = config[:name]
|
72
|
-
read_only = config[:read_only]
|
73
|
-
|
74
|
-
get '/?' do
|
75
|
-
require_at_least(:basic)
|
76
|
-
validate_before_find_all(params, model)
|
77
|
-
@documents = find_with_filters(params, model)
|
78
|
-
@documents.
|
79
|
-
end
|
80
|
-
|
81
|
-
get '/:id/?' do |id|
|
82
|
-
require_at_least(:basic)
|
83
|
-
id = params.delete("id")
|
84
|
-
validate_before_find_one(params, model)
|
85
|
-
@document = find_document!(model, id)
|
86
|
-
@document.
|
87
|
-
end
|
88
|
-
|
89
|
-
post '/?' do
|
90
|
-
require_at_least(:curator)
|
91
|
-
validate_before_create(params, model, read_only)
|
92
|
-
callback(callbacks[:before_save])
|
93
|
-
callback(callbacks[:before_create])
|
94
|
-
@document = model.new(params)
|
95
|
-
unless @document.valid?
|
96
|
-
error 400, { "errors" => @document.errors.errors }.to_json
|
97
|
-
end
|
98
|
-
@document.save
|
99
|
-
callback(callbacks[:after_create])
|
100
|
-
callback(callbacks[:after_save])
|
101
|
-
response.status = 201
|
102
|
-
response.headers['Location'] = full_uri "/#{name}/#{@document.id}"
|
103
|
-
@document.
|
104
|
-
end
|
105
|
-
|
106
|
-
put '/:id/?' do
|
107
|
-
require_at_least(:curator)
|
108
|
-
id = params.delete("id")
|
109
|
-
@document = find_document!(model, id)
|
110
|
-
validate_before_update(params, model, read_only)
|
111
|
-
callback(callbacks[:before_save])
|
112
|
-
callback(callbacks[:before_update])
|
113
|
-
@document = model.update(id, params)
|
114
|
-
unless @document.valid?
|
115
|
-
error 400, { "errors" => @document.errors.errors }.to_json
|
116
|
-
end
|
117
|
-
callback(callbacks[:after_update])
|
118
|
-
callback(callbacks[:after_save])
|
119
|
-
@document.
|
120
|
-
end
|
121
|
-
|
122
|
-
delete '/:id/?' do
|
123
|
-
require_at_least(:curator)
|
124
|
-
id = params.delete("id")
|
125
|
-
@document = find_document!(model, id)
|
126
|
-
callback(callbacks[:before_destroy])
|
127
|
-
@document.destroy
|
128
|
-
callback(callbacks[:after_destroy])
|
129
|
-
{ "id" => id }.to_json
|
130
|
-
end
|
131
|
-
|
132
|
-
helpers do
|
133
|
-
def find_document!(model, id)
|
134
|
-
document = model.find_by_id(id)
|
135
|
-
error 404, [].to_json unless document
|
136
|
-
document
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
|
142
|
-
def build_nested_resources(parent_config)
|
143
|
-
parent_config[:nested_resources].each do |resource|
|
144
|
-
nested_res_class = resource[:class]
|
145
|
-
assoc = resource[:association]
|
146
|
-
nested_config = restore_nestable_config(nested_res_class)
|
147
|
-
build_nested_resource(nested_res_class, assoc, parent_config, nested_config)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
# klass : nested resource class
|
152
|
-
# association : a method on the parent model that will return child models
|
153
|
-
def build_nested_resource(klass, association, parent_config, child_config)
|
154
|
-
callbacks = child_config[:callbacks]
|
155
|
-
child_model = child_config[:model]
|
156
|
-
child_name = child_config[:name]
|
157
|
-
permission = child_config[:permission]
|
158
|
-
read_only = child_config[:read_only]
|
159
|
-
|
160
|
-
parent_model = parent_config[:model]
|
161
|
-
parent_name = parent_config[:name]
|
162
|
-
|
163
|
-
get "/:parent_id/#{child_name}/?" do
|
164
|
-
parent_id = params.delete("parent_id")
|
165
|
-
permission_check(:basic, permission, parent_id)
|
166
|
-
@parent_document = find_parent!(parent_model, parent_id)
|
167
|
-
all_child_documents = @parent_document.send(association)
|
168
|
-
validate_before_find_all(params, child_model) # ?
|
169
|
-
@child_documents = nested_find_with_filters(all_child_documents, params, parent_model)
|
170
|
-
@child_documents.
|
171
|
-
end
|
172
|
-
|
173
|
-
get "/:parent_id/#{child_name}/:child_id/?" do
|
174
|
-
parent_id = params.delete("parent_id")
|
175
|
-
permission_check(:basic, permission, parent_id)
|
176
|
-
child_id = params.delete("child_id")
|
177
|
-
validate_before_find_one(params, child_model) # ?
|
178
|
-
@parent_document, @child_document = find_documents!(parent_model, parent_id, association, child_id)
|
179
|
-
@child_document.
|
180
|
-
end
|
181
|
-
|
182
|
-
post "/:parent_id/#{child_name}/?" do
|
183
|
-
parent_id = params.delete("parent_id")
|
184
|
-
permission_check(:curator, permission, parent_id)
|
185
|
-
@parent_document = find_parent!(parent_model, parent_id)
|
186
|
-
validate_before_create(params, child_model, read_only)
|
187
|
-
callback(callbacks[:before_save])
|
188
|
-
callback(callbacks[:before_create])
|
189
|
-
@child_document = child_model.new(params)
|
190
|
-
@parent_document.send(association) << @child_document
|
191
|
-
error 500, [].to_json unless @parent_document.save
|
192
|
-
callback(callbacks[:after_create])
|
193
|
-
callback(callbacks[:after_save])
|
194
|
-
response.status = 201
|
195
|
-
response.headers['Location'] = full_uri(
|
196
|
-
"/#{parent_name}/#{parent_id}/#{child_name}/#{@child_document.id}"
|
197
|
-
)
|
198
|
-
@child_document.
|
199
|
-
end
|
200
|
-
|
201
|
-
put "/:parent_id/#{child_name}/:child_id/?" do
|
202
|
-
parent_id = params.delete("parent_id")
|
203
|
-
permission_check(:curator, permission, parent_id)
|
204
|
-
child_id = params.delete("child_id")
|
205
|
-
@parent_document, @child_document = find_documents!(parent_model, parent_id, association, child_id)
|
206
|
-
validate_before_update(params, child_model, read_only)
|
207
|
-
callback(callbacks[:before_save])
|
208
|
-
callback(callbacks[:before_update])
|
209
|
-
@child_document.attributes = params
|
210
|
-
child_index = @parent_document.send(association).index(@child_document)
|
211
|
-
@parent_document.send(association)[child_index] = @child_document
|
212
|
-
error 500, [].to_json unless @parent_document.save
|
213
|
-
callback(callbacks[:after_update])
|
214
|
-
callback(callbacks[:after_save])
|
215
|
-
@child_document.
|
216
|
-
end
|
217
|
-
|
218
|
-
delete "/:parent_id/#{child_name}/:child_id/?" do
|
219
|
-
parent_id = params.delete("parent_id")
|
220
|
-
permission_check(:curator, permission, parent_id)
|
221
|
-
child_id = params.delete("child_id")
|
222
|
-
@parent_document, @child_document = find_documents!(parent_model, parent_id, association, child_id)
|
223
|
-
callback(callbacks[:before_destroy])
|
224
|
-
@parent_document.send(association).delete(@child_document)
|
225
|
-
callback(callbacks[:after_destroy])
|
226
|
-
error 500, [].to_json unless @parent_document.save
|
227
|
-
{ "id" => child_id }.to_json
|
228
|
-
end
|
229
|
-
|
230
|
-
helpers do
|
231
|
-
def find_parent!(parent_model, parent_id)
|
232
|
-
parent_document = parent_model.find_by_id(parent_id)
|
233
|
-
error 404, [].to_json unless parent_document
|
234
|
-
parent_document
|
235
|
-
end
|
236
|
-
|
237
|
-
def find_child!(parent_document, association, child_id)
|
238
|
-
child_document = parent_document.send(association).detect { |x| x.id == child_id }
|
239
|
-
error 404, [].to_json unless child_document
|
240
|
-
child_document
|
241
|
-
end
|
242
|
-
|
243
|
-
def find_documents!(parent_model, parent_id, association, child_id)
|
244
|
-
parent_document = find_parent!(parent_model, parent_id)
|
245
|
-
child_document = find_child!(parent_document, association, child_id)
|
246
|
-
[parent_document, child_document]
|
247
|
-
end
|
248
|
-
end
|
249
|
-
end
|
250
|
-
|
251
|
-
def save_nestable_config(config)
|
252
|
-
@nestable_resource_config = config
|
253
|
-
end
|
254
|
-
|
255
|
-
def restore_nestable_config(klass)
|
256
|
-
klass.instance_variable_get("@nestable_resource_config")
|
257
|
-
end
|
258
|
-
|
259
|
-
end
|
260
|
-
|
261
|
-
module ResourceMethods
|
262
|
-
|
263
|
-
def model(model)
|
264
|
-
raise "model already declared" if @c[:model]
|
265
|
-
@c[:model] = model
|
266
|
-
end
|
267
|
-
|
268
|
-
def read_only(attribute)
|
269
|
-
@c[:read_only] << attribute
|
270
|
-
end
|
271
|
-
|
272
|
-
def permission(level)
|
273
|
-
raise "permission already declared" if @c[:permission]
|
274
|
-
@c[:permission] = level
|
275
|
-
end
|
276
|
-
|
277
|
-
def callback(name, &block)
|
278
|
-
@c[:callbacks][name] = block
|
279
|
-
end
|
280
|
-
|
281
|
-
def nested_resource(klass, options)
|
282
|
-
@c[:nested_resources] << options.merge({:class => klass})
|
283
|
-
end
|
284
|
-
|
285
|
-
end
|
286
|
-
|
287
|
-
end
|
1
|
+
module RestSinatra
|
2
|
+
|
3
|
+
def self.included(includer)
|
4
|
+
includer.extend(ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
|
9
|
+
attr_reader :config
|
10
|
+
|
11
|
+
def resource(name, &block)
|
12
|
+
_resource(name, :regular, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
def nestable_resource(name, &block)
|
16
|
+
_resource(name, :nestable, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def _resource(name, resource_type, &block)
|
22
|
+
config = evaluate_block(name, resource_type, &block)
|
23
|
+
validate(config)
|
24
|
+
build_resource(config)
|
25
|
+
config
|
26
|
+
end
|
27
|
+
|
28
|
+
def evaluate_block(name, resource_type, &block)
|
29
|
+
scope = Object.new
|
30
|
+
scope.extend(ResourceMethods)
|
31
|
+
scope.instance_eval do
|
32
|
+
@c = {
|
33
|
+
:name => name,
|
34
|
+
:resource_type => resource_type,
|
35
|
+
:model => nil,
|
36
|
+
:read_only => [],
|
37
|
+
:permission => nil,
|
38
|
+
:callbacks => {},
|
39
|
+
:nested_resources => []
|
40
|
+
}
|
41
|
+
end
|
42
|
+
scope.instance_eval(&block)
|
43
|
+
scope.instance_variable_get("@c")
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate(c)
|
47
|
+
raise "name required" unless c[:name]
|
48
|
+
raise "model required" unless c[:model]
|
49
|
+
c[:nested_resources].each do |resource|
|
50
|
+
unless resource[:association]
|
51
|
+
raise "association required for #{resource[:class]}"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def build_resource(config)
|
57
|
+
case config[:resource_type]
|
58
|
+
when :regular
|
59
|
+
build_parent_resource(config)
|
60
|
+
build_nested_resources(config)
|
61
|
+
when :nestable
|
62
|
+
save_nestable_config(config)
|
63
|
+
else
|
64
|
+
raise "Unexpected resource_type"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_parent_resource(config)
|
69
|
+
callbacks = config[:callbacks]
|
70
|
+
model = config[:model]
|
71
|
+
name = config[:name]
|
72
|
+
read_only = config[:read_only]
|
73
|
+
|
74
|
+
get '/?' do
|
75
|
+
require_at_least(:basic)
|
76
|
+
validate_before_find_all(params, model)
|
77
|
+
@documents = find_with_filters(params, model)
|
78
|
+
@documents.render
|
79
|
+
end
|
80
|
+
|
81
|
+
get '/:id/?' do |id|
|
82
|
+
require_at_least(:basic)
|
83
|
+
id = params.delete("id")
|
84
|
+
validate_before_find_one(params, model)
|
85
|
+
@document = find_document!(model, id)
|
86
|
+
@document.render
|
87
|
+
end
|
88
|
+
|
89
|
+
post '/?' do
|
90
|
+
require_at_least(:curator)
|
91
|
+
validate_before_create(params, model, read_only)
|
92
|
+
callback(callbacks[:before_save])
|
93
|
+
callback(callbacks[:before_create])
|
94
|
+
@document = model.new(params)
|
95
|
+
unless @document.valid?
|
96
|
+
error 400, { "errors" => @document.errors.errors }.to_json
|
97
|
+
end
|
98
|
+
error 500, [].to_json unless @document.save
|
99
|
+
callback(callbacks[:after_create])
|
100
|
+
callback(callbacks[:after_save])
|
101
|
+
response.status = 201
|
102
|
+
response.headers['Location'] = full_uri "/#{name}/#{@document.id}"
|
103
|
+
@document.render
|
104
|
+
end
|
105
|
+
|
106
|
+
put '/:id/?' do
|
107
|
+
require_at_least(:curator)
|
108
|
+
id = params.delete("id")
|
109
|
+
@document = find_document!(model, id)
|
110
|
+
validate_before_update(params, model, read_only)
|
111
|
+
callback(callbacks[:before_save])
|
112
|
+
callback(callbacks[:before_update])
|
113
|
+
@document = model.update(id, params)
|
114
|
+
unless @document.valid?
|
115
|
+
error 400, { "errors" => @document.errors.errors }.to_json
|
116
|
+
end
|
117
|
+
callback(callbacks[:after_update])
|
118
|
+
callback(callbacks[:after_save])
|
119
|
+
@document.render
|
120
|
+
end
|
121
|
+
|
122
|
+
delete '/:id/?' do
|
123
|
+
require_at_least(:curator)
|
124
|
+
id = params.delete("id")
|
125
|
+
@document = find_document!(model, id)
|
126
|
+
callback(callbacks[:before_destroy])
|
127
|
+
@document.destroy
|
128
|
+
callback(callbacks[:after_destroy])
|
129
|
+
{ "id" => id }.to_json
|
130
|
+
end
|
131
|
+
|
132
|
+
helpers do
|
133
|
+
def find_document!(model, id)
|
134
|
+
document = model.find_by_id(id)
|
135
|
+
error 404, [].to_json unless document
|
136
|
+
document
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
end
|
141
|
+
|
142
|
+
def build_nested_resources(parent_config)
|
143
|
+
parent_config[:nested_resources].each do |resource|
|
144
|
+
nested_res_class = resource[:class]
|
145
|
+
assoc = resource[:association]
|
146
|
+
nested_config = restore_nestable_config(nested_res_class)
|
147
|
+
build_nested_resource(nested_res_class, assoc, parent_config, nested_config)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
# klass : nested resource class
|
152
|
+
# association : a method on the parent model that will return child models
|
153
|
+
def build_nested_resource(klass, association, parent_config, child_config)
|
154
|
+
callbacks = child_config[:callbacks]
|
155
|
+
child_model = child_config[:model]
|
156
|
+
child_name = child_config[:name]
|
157
|
+
permission = child_config[:permission]
|
158
|
+
read_only = child_config[:read_only]
|
159
|
+
|
160
|
+
parent_model = parent_config[:model]
|
161
|
+
parent_name = parent_config[:name]
|
162
|
+
|
163
|
+
get "/:parent_id/#{child_name}/?" do
|
164
|
+
parent_id = params.delete("parent_id")
|
165
|
+
permission_check(:basic, permission, parent_id)
|
166
|
+
@parent_document = find_parent!(parent_model, parent_id)
|
167
|
+
all_child_documents = @parent_document.send(association)
|
168
|
+
validate_before_find_all(params, child_model) # ?
|
169
|
+
@child_documents = nested_find_with_filters(all_child_documents, params, parent_model)
|
170
|
+
@child_documents.render
|
171
|
+
end
|
172
|
+
|
173
|
+
get "/:parent_id/#{child_name}/:child_id/?" do
|
174
|
+
parent_id = params.delete("parent_id")
|
175
|
+
permission_check(:basic, permission, parent_id)
|
176
|
+
child_id = params.delete("child_id")
|
177
|
+
validate_before_find_one(params, child_model) # ?
|
178
|
+
@parent_document, @child_document = find_documents!(parent_model, parent_id, association, child_id)
|
179
|
+
@child_document.render
|
180
|
+
end
|
181
|
+
|
182
|
+
post "/:parent_id/#{child_name}/?" do
|
183
|
+
parent_id = params.delete("parent_id")
|
184
|
+
permission_check(:curator, permission, parent_id)
|
185
|
+
@parent_document = find_parent!(parent_model, parent_id)
|
186
|
+
validate_before_create(params, child_model, read_only)
|
187
|
+
callback(callbacks[:before_save])
|
188
|
+
callback(callbacks[:before_create])
|
189
|
+
@child_document = child_model.new(params)
|
190
|
+
@parent_document.send(association) << @child_document
|
191
|
+
error 500, [].to_json unless @parent_document.save
|
192
|
+
callback(callbacks[:after_create])
|
193
|
+
callback(callbacks[:after_save])
|
194
|
+
response.status = 201
|
195
|
+
response.headers['Location'] = full_uri(
|
196
|
+
"/#{parent_name}/#{parent_id}/#{child_name}/#{@child_document.id}"
|
197
|
+
)
|
198
|
+
@child_document.render
|
199
|
+
end
|
200
|
+
|
201
|
+
put "/:parent_id/#{child_name}/:child_id/?" do
|
202
|
+
parent_id = params.delete("parent_id")
|
203
|
+
permission_check(:curator, permission, parent_id)
|
204
|
+
child_id = params.delete("child_id")
|
205
|
+
@parent_document, @child_document = find_documents!(parent_model, parent_id, association, child_id)
|
206
|
+
validate_before_update(params, child_model, read_only)
|
207
|
+
callback(callbacks[:before_save])
|
208
|
+
callback(callbacks[:before_update])
|
209
|
+
@child_document.attributes = params
|
210
|
+
child_index = @parent_document.send(association).index(@child_document)
|
211
|
+
@parent_document.send(association)[child_index] = @child_document
|
212
|
+
error 500, [].to_json unless @parent_document.save
|
213
|
+
callback(callbacks[:after_update])
|
214
|
+
callback(callbacks[:after_save])
|
215
|
+
@child_document.render
|
216
|
+
end
|
217
|
+
|
218
|
+
delete "/:parent_id/#{child_name}/:child_id/?" do
|
219
|
+
parent_id = params.delete("parent_id")
|
220
|
+
permission_check(:curator, permission, parent_id)
|
221
|
+
child_id = params.delete("child_id")
|
222
|
+
@parent_document, @child_document = find_documents!(parent_model, parent_id, association, child_id)
|
223
|
+
callback(callbacks[:before_destroy])
|
224
|
+
@parent_document.send(association).delete(@child_document)
|
225
|
+
callback(callbacks[:after_destroy])
|
226
|
+
error 500, [].to_json unless @parent_document.save
|
227
|
+
{ "id" => child_id }.to_json
|
228
|
+
end
|
229
|
+
|
230
|
+
helpers do
|
231
|
+
def find_parent!(parent_model, parent_id)
|
232
|
+
parent_document = parent_model.find_by_id(parent_id)
|
233
|
+
error 404, [].to_json unless parent_document
|
234
|
+
parent_document
|
235
|
+
end
|
236
|
+
|
237
|
+
def find_child!(parent_document, association, child_id)
|
238
|
+
child_document = parent_document.send(association).detect { |x| x.id == child_id }
|
239
|
+
error 404, [].to_json unless child_document
|
240
|
+
child_document
|
241
|
+
end
|
242
|
+
|
243
|
+
def find_documents!(parent_model, parent_id, association, child_id)
|
244
|
+
parent_document = find_parent!(parent_model, parent_id)
|
245
|
+
child_document = find_child!(parent_document, association, child_id)
|
246
|
+
[parent_document, child_document]
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def save_nestable_config(config)
|
252
|
+
@nestable_resource_config = config
|
253
|
+
end
|
254
|
+
|
255
|
+
def restore_nestable_config(klass)
|
256
|
+
klass.instance_variable_get("@nestable_resource_config")
|
257
|
+
end
|
258
|
+
|
259
|
+
end
|
260
|
+
|
261
|
+
module ResourceMethods
|
262
|
+
|
263
|
+
def model(model)
|
264
|
+
raise "model already declared" if @c[:model]
|
265
|
+
@c[:model] = model
|
266
|
+
end
|
267
|
+
|
268
|
+
def read_only(attribute)
|
269
|
+
@c[:read_only] << attribute
|
270
|
+
end
|
271
|
+
|
272
|
+
def permission(level)
|
273
|
+
raise "permission already declared" if @c[:permission]
|
274
|
+
@c[:permission] = level
|
275
|
+
end
|
276
|
+
|
277
|
+
def callback(name, &block)
|
278
|
+
@c[:callbacks][name] = block
|
279
|
+
end
|
280
|
+
|
281
|
+
def nested_resource(klass, options)
|
282
|
+
@c[:nested_resources] << options.merge({:class => klass})
|
283
|
+
end
|
284
|
+
|
285
|
+
end
|
286
|
+
|
287
|
+
end
|
data/rest-sinatra.gemspec
CHANGED
@@ -1,63 +1,63 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{rest-sinatra}
|
8
|
-
s.version = "0.3.
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["David James"]
|
12
|
-
s.date = %q{2009-10-
|
13
|
-
s.description = %q{Provides a DSL for making RESTful Sinatra actions with MongoMapper models.}
|
14
|
-
s.email = %q{djames@sunlightfoundation.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.md"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"LICENSE",
|
23
|
-
"README.md",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"lib/rest-sinatra.rb",
|
27
|
-
"rest-sinatra.gemspec",
|
28
|
-
"spec/spec_helper.rb",
|
29
|
-
"spec/unit/helpers/comments.rb",
|
30
|
-
"spec/unit/helpers/posts.rb",
|
31
|
-
"spec/unit/helpers/sinatra_stubs.rb",
|
32
|
-
"spec/unit/helpers/sources.rb",
|
33
|
-
"spec/unit/posts_and_comments_spec.rb",
|
34
|
-
"spec/unit/sources_spec.rb"
|
35
|
-
]
|
36
|
-
s.homepage = %q{http://github.com/djsun/rest-sinatra}
|
37
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
38
|
-
s.require_paths = ["lib"]
|
39
|
-
s.rubygems_version = %q{1.3.5}
|
40
|
-
s.summary = %q{Easily write RESTful actions with Sinatra and MongoMapper}
|
41
|
-
s.test_files = [
|
42
|
-
"spec/spec_helper.rb",
|
43
|
-
"spec/unit/helpers/comments.rb",
|
44
|
-
"spec/unit/helpers/posts.rb",
|
45
|
-
"spec/unit/helpers/sinatra_stubs.rb",
|
46
|
-
"spec/unit/helpers/sources.rb",
|
47
|
-
"spec/unit/posts_and_comments_spec.rb",
|
48
|
-
"spec/unit/sources_spec.rb"
|
49
|
-
]
|
50
|
-
|
51
|
-
if s.respond_to? :specification_version then
|
52
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
53
|
-
s.specification_version = 3
|
54
|
-
|
55
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
56
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
57
|
-
else
|
58
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
59
|
-
end
|
60
|
-
else
|
61
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
62
|
-
end
|
63
|
-
end
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{rest-sinatra}
|
8
|
+
s.version = "0.3.3"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["David James"]
|
12
|
+
s.date = %q{2009-10-11}
|
13
|
+
s.description = %q{Provides a DSL for making RESTful Sinatra actions with MongoMapper models.}
|
14
|
+
s.email = %q{djames@sunlightfoundation.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.md"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.md",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"lib/rest-sinatra.rb",
|
27
|
+
"rest-sinatra.gemspec",
|
28
|
+
"spec/spec_helper.rb",
|
29
|
+
"spec/unit/helpers/comments.rb",
|
30
|
+
"spec/unit/helpers/posts.rb",
|
31
|
+
"spec/unit/helpers/sinatra_stubs.rb",
|
32
|
+
"spec/unit/helpers/sources.rb",
|
33
|
+
"spec/unit/posts_and_comments_spec.rb",
|
34
|
+
"spec/unit/sources_spec.rb"
|
35
|
+
]
|
36
|
+
s.homepage = %q{http://github.com/djsun/rest-sinatra}
|
37
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
38
|
+
s.require_paths = ["lib"]
|
39
|
+
s.rubygems_version = %q{1.3.5}
|
40
|
+
s.summary = %q{Easily write RESTful actions with Sinatra and MongoMapper}
|
41
|
+
s.test_files = [
|
42
|
+
"spec/spec_helper.rb",
|
43
|
+
"spec/unit/helpers/comments.rb",
|
44
|
+
"spec/unit/helpers/posts.rb",
|
45
|
+
"spec/unit/helpers/sinatra_stubs.rb",
|
46
|
+
"spec/unit/helpers/sources.rb",
|
47
|
+
"spec/unit/posts_and_comments_spec.rb",
|
48
|
+
"spec/unit/sources_spec.rb"
|
49
|
+
]
|
50
|
+
|
51
|
+
if s.respond_to? :specification_version then
|
52
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
53
|
+
s.specification_version = 3
|
54
|
+
|
55
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
56
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
59
|
+
end
|
60
|
+
else
|
61
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
62
|
+
end
|
63
|
+
end
|
@@ -1,148 +1,148 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/helpers/posts.rb')
|
3
|
-
require File.expand_path(File.dirname(__FILE__) + '/helpers/comments.rb')
|
4
|
-
|
5
|
-
describe "Posts" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@config = Posts.instance_variable_get("@r")
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "DSL methods" do
|
12
|
-
it "resource should be 'posts'" do
|
13
|
-
@config[:name].should == "posts"
|
14
|
-
end
|
15
|
-
|
16
|
-
it "model should be Post" do
|
17
|
-
@config[:model].should == Post
|
18
|
-
end
|
19
|
-
|
20
|
-
it "read_only should be correct" do
|
21
|
-
@config[:read_only].should == [:created_at, :updated_at]
|
22
|
-
end
|
23
|
-
|
24
|
-
it "callback :before_create should be correct" do
|
25
|
-
@config[:callbacks][:before_save].call.should == "before saving posts"
|
26
|
-
end
|
27
|
-
|
28
|
-
it "callback :before_update should return nil" do
|
29
|
-
@config[:callbacks][:before_update].should == nil
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "actions" do
|
34
|
-
before do
|
35
|
-
@actions = Posts.actions
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "get" do
|
39
|
-
before do
|
40
|
-
@acts = @actions[:get]
|
41
|
-
end
|
42
|
-
|
43
|
-
it "get /?" do
|
44
|
-
@acts.should include("/?")
|
45
|
-
end
|
46
|
-
|
47
|
-
it "get /:id/?" do
|
48
|
-
@acts.should include("/:id/?")
|
49
|
-
end
|
50
|
-
|
51
|
-
it "get /:parent_id/comments/?" do
|
52
|
-
@acts.should include("/:parent_id/comments/?")
|
53
|
-
end
|
54
|
-
|
55
|
-
it "get /:parent_id/comments/:child_id/?" do
|
56
|
-
@acts.should include("/:parent_id/comments/:child_id/?")
|
57
|
-
end
|
58
|
-
|
59
|
-
it "exactly 4 actions" do
|
60
|
-
@acts.length.should == 4
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "post" do
|
65
|
-
before do
|
66
|
-
@acts = @actions[:post]
|
67
|
-
end
|
68
|
-
|
69
|
-
it "post /?" do
|
70
|
-
@acts.should include("/?")
|
71
|
-
end
|
72
|
-
|
73
|
-
it "post /:parent_id/comments/?" do
|
74
|
-
@acts.should include("/:parent_id/comments/?")
|
75
|
-
end
|
76
|
-
|
77
|
-
it "exactly 2 actions" do
|
78
|
-
@acts.length.should == 2
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "put" do
|
83
|
-
before do
|
84
|
-
@acts = @actions[:put]
|
85
|
-
end
|
86
|
-
|
87
|
-
it "put /:id/?" do
|
88
|
-
@acts.should include("/:id/?")
|
89
|
-
end
|
90
|
-
|
91
|
-
it "put /:parent_id/comments/:child_id/?" do
|
92
|
-
@acts.should include("/:parent_id/comments/:child_id/?")
|
93
|
-
end
|
94
|
-
|
95
|
-
it "exactly 2 actions" do
|
96
|
-
@acts.length.should == 2
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe "delete" do
|
101
|
-
before do
|
102
|
-
@acts = @actions[:delete]
|
103
|
-
end
|
104
|
-
|
105
|
-
it "delete /:id/?" do
|
106
|
-
@acts.should include("/:id/?")
|
107
|
-
end
|
108
|
-
|
109
|
-
it "delete /:parent_id/comments/:child_id/?" do
|
110
|
-
@acts.should include("/:parent_id/comments/:child_id/?")
|
111
|
-
end
|
112
|
-
|
113
|
-
it "exactly 2 actions" do
|
114
|
-
@acts.length.should == 2
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
describe "Comments" do
|
122
|
-
|
123
|
-
before do
|
124
|
-
@config = Comments.instance_variable_get("@r")
|
125
|
-
end
|
126
|
-
|
127
|
-
describe "DSL methods" do
|
128
|
-
it "resource should be 'comments'" do
|
129
|
-
@config[:name].should == "comments"
|
130
|
-
end
|
131
|
-
|
132
|
-
it "model should be Comment" do
|
133
|
-
@config[:model].should == Comment
|
134
|
-
end
|
135
|
-
|
136
|
-
it "read_only should be correct" do
|
137
|
-
@config[:read_only].should == [:created_at]
|
138
|
-
end
|
139
|
-
|
140
|
-
it "callback :before_create should be correct" do
|
141
|
-
@config[:callbacks][:before_save].call.should == "before saving comments"
|
142
|
-
end
|
143
|
-
|
144
|
-
it "callback :before_update should return nil" do
|
145
|
-
@config[:callbacks][:before_update].should == nil
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/helpers/posts.rb')
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/helpers/comments.rb')
|
4
|
+
|
5
|
+
describe "Posts" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@config = Posts.instance_variable_get("@r")
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "DSL methods" do
|
12
|
+
it "resource should be 'posts'" do
|
13
|
+
@config[:name].should == "posts"
|
14
|
+
end
|
15
|
+
|
16
|
+
it "model should be Post" do
|
17
|
+
@config[:model].should == Post
|
18
|
+
end
|
19
|
+
|
20
|
+
it "read_only should be correct" do
|
21
|
+
@config[:read_only].should == [:created_at, :updated_at]
|
22
|
+
end
|
23
|
+
|
24
|
+
it "callback :before_create should be correct" do
|
25
|
+
@config[:callbacks][:before_save].call.should == "before saving posts"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "callback :before_update should return nil" do
|
29
|
+
@config[:callbacks][:before_update].should == nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "actions" do
|
34
|
+
before do
|
35
|
+
@actions = Posts.actions
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "get" do
|
39
|
+
before do
|
40
|
+
@acts = @actions[:get]
|
41
|
+
end
|
42
|
+
|
43
|
+
it "get /?" do
|
44
|
+
@acts.should include("/?")
|
45
|
+
end
|
46
|
+
|
47
|
+
it "get /:id/?" do
|
48
|
+
@acts.should include("/:id/?")
|
49
|
+
end
|
50
|
+
|
51
|
+
it "get /:parent_id/comments/?" do
|
52
|
+
@acts.should include("/:parent_id/comments/?")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "get /:parent_id/comments/:child_id/?" do
|
56
|
+
@acts.should include("/:parent_id/comments/:child_id/?")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "exactly 4 actions" do
|
60
|
+
@acts.length.should == 4
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "post" do
|
65
|
+
before do
|
66
|
+
@acts = @actions[:post]
|
67
|
+
end
|
68
|
+
|
69
|
+
it "post /?" do
|
70
|
+
@acts.should include("/?")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "post /:parent_id/comments/?" do
|
74
|
+
@acts.should include("/:parent_id/comments/?")
|
75
|
+
end
|
76
|
+
|
77
|
+
it "exactly 2 actions" do
|
78
|
+
@acts.length.should == 2
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "put" do
|
83
|
+
before do
|
84
|
+
@acts = @actions[:put]
|
85
|
+
end
|
86
|
+
|
87
|
+
it "put /:id/?" do
|
88
|
+
@acts.should include("/:id/?")
|
89
|
+
end
|
90
|
+
|
91
|
+
it "put /:parent_id/comments/:child_id/?" do
|
92
|
+
@acts.should include("/:parent_id/comments/:child_id/?")
|
93
|
+
end
|
94
|
+
|
95
|
+
it "exactly 2 actions" do
|
96
|
+
@acts.length.should == 2
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "delete" do
|
101
|
+
before do
|
102
|
+
@acts = @actions[:delete]
|
103
|
+
end
|
104
|
+
|
105
|
+
it "delete /:id/?" do
|
106
|
+
@acts.should include("/:id/?")
|
107
|
+
end
|
108
|
+
|
109
|
+
it "delete /:parent_id/comments/:child_id/?" do
|
110
|
+
@acts.should include("/:parent_id/comments/:child_id/?")
|
111
|
+
end
|
112
|
+
|
113
|
+
it "exactly 2 actions" do
|
114
|
+
@acts.length.should == 2
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "Comments" do
|
122
|
+
|
123
|
+
before do
|
124
|
+
@config = Comments.instance_variable_get("@r")
|
125
|
+
end
|
126
|
+
|
127
|
+
describe "DSL methods" do
|
128
|
+
it "resource should be 'comments'" do
|
129
|
+
@config[:name].should == "comments"
|
130
|
+
end
|
131
|
+
|
132
|
+
it "model should be Comment" do
|
133
|
+
@config[:model].should == Comment
|
134
|
+
end
|
135
|
+
|
136
|
+
it "read_only should be correct" do
|
137
|
+
@config[:read_only].should == [:created_at]
|
138
|
+
end
|
139
|
+
|
140
|
+
it "callback :before_create should be correct" do
|
141
|
+
@config[:callbacks][:before_save].call.should == "before saving comments"
|
142
|
+
end
|
143
|
+
|
144
|
+
it "callback :before_update should return nil" do
|
145
|
+
@config[:callbacks][:before_update].should == nil
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
data/spec/unit/sources_spec.rb
CHANGED
@@ -1,94 +1,94 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/helpers/sources')
|
3
|
-
|
4
|
-
describe "Sources" do
|
5
|
-
|
6
|
-
describe "DSL methods" do
|
7
|
-
before do
|
8
|
-
@config = Sources.instance_variable_get("@r")
|
9
|
-
end
|
10
|
-
|
11
|
-
it "name should be 'sources'" do
|
12
|
-
@config[:name].should == "sources"
|
13
|
-
end
|
14
|
-
|
15
|
-
it "model should be Source" do
|
16
|
-
@config[:model].should == Source
|
17
|
-
end
|
18
|
-
|
19
|
-
it "read_only should be empty" do
|
20
|
-
@config[:read_only].should == []
|
21
|
-
end
|
22
|
-
|
23
|
-
it "callbacks should be empty" do
|
24
|
-
@config[:callbacks].should == {}
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "actions" do
|
29
|
-
before do
|
30
|
-
@actions = Sources.actions
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "get" do
|
34
|
-
before do
|
35
|
-
@acts = @actions[:get]
|
36
|
-
end
|
37
|
-
|
38
|
-
it "get /?" do
|
39
|
-
@acts.should include("/?")
|
40
|
-
end
|
41
|
-
|
42
|
-
it "get /:id/?" do
|
43
|
-
@acts.should include("/:id/?")
|
44
|
-
end
|
45
|
-
|
46
|
-
it "exactly 2 actions" do
|
47
|
-
@acts.length.should == 2
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "post" do
|
52
|
-
before do
|
53
|
-
@acts = @actions[:post]
|
54
|
-
end
|
55
|
-
|
56
|
-
it "post /?" do
|
57
|
-
@acts.should include("/?")
|
58
|
-
end
|
59
|
-
|
60
|
-
it "exactly 1 action" do
|
61
|
-
@acts.length.should == 1
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "put" do
|
66
|
-
before do
|
67
|
-
@acts = @actions[:put]
|
68
|
-
end
|
69
|
-
|
70
|
-
it "put /:id/?" do
|
71
|
-
@acts.should include("/:id/?")
|
72
|
-
end
|
73
|
-
|
74
|
-
it "exactly 1 action" do
|
75
|
-
@acts.length.should == 1
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe "delete" do
|
80
|
-
before do
|
81
|
-
@acts = @actions[:delete]
|
82
|
-
end
|
83
|
-
|
84
|
-
it "delete /:id/?" do
|
85
|
-
@acts.should include("/:id/?")
|
86
|
-
end
|
87
|
-
|
88
|
-
it "exactly 1 action" do
|
89
|
-
@acts.length.should == 1
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/helpers/sources')
|
3
|
+
|
4
|
+
describe "Sources" do
|
5
|
+
|
6
|
+
describe "DSL methods" do
|
7
|
+
before do
|
8
|
+
@config = Sources.instance_variable_get("@r")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "name should be 'sources'" do
|
12
|
+
@config[:name].should == "sources"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "model should be Source" do
|
16
|
+
@config[:model].should == Source
|
17
|
+
end
|
18
|
+
|
19
|
+
it "read_only should be empty" do
|
20
|
+
@config[:read_only].should == []
|
21
|
+
end
|
22
|
+
|
23
|
+
it "callbacks should be empty" do
|
24
|
+
@config[:callbacks].should == {}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "actions" do
|
29
|
+
before do
|
30
|
+
@actions = Sources.actions
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "get" do
|
34
|
+
before do
|
35
|
+
@acts = @actions[:get]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "get /?" do
|
39
|
+
@acts.should include("/?")
|
40
|
+
end
|
41
|
+
|
42
|
+
it "get /:id/?" do
|
43
|
+
@acts.should include("/:id/?")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "exactly 2 actions" do
|
47
|
+
@acts.length.should == 2
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "post" do
|
52
|
+
before do
|
53
|
+
@acts = @actions[:post]
|
54
|
+
end
|
55
|
+
|
56
|
+
it "post /?" do
|
57
|
+
@acts.should include("/?")
|
58
|
+
end
|
59
|
+
|
60
|
+
it "exactly 1 action" do
|
61
|
+
@acts.length.should == 1
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "put" do
|
66
|
+
before do
|
67
|
+
@acts = @actions[:put]
|
68
|
+
end
|
69
|
+
|
70
|
+
it "put /:id/?" do
|
71
|
+
@acts.should include("/:id/?")
|
72
|
+
end
|
73
|
+
|
74
|
+
it "exactly 1 action" do
|
75
|
+
@acts.length.should == 1
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "delete" do
|
80
|
+
before do
|
81
|
+
@acts = @actions[:delete]
|
82
|
+
end
|
83
|
+
|
84
|
+
it "delete /:id/?" do
|
85
|
+
@acts.should include("/:id/?")
|
86
|
+
end
|
87
|
+
|
88
|
+
it "exactly 1 action" do
|
89
|
+
@acts.length.should == 1
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest-sinatra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David James
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-11 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|