json-crud-api 0.0.8 → 0.0.9
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.
- checksums.yaml +4 -4
- data/lib/json-crud-api/crud.rb +8 -5
- data/lib/json-crud-api/service.rb +5 -0
- data/spec/unit/crud_extension_spec.rb +76 -0
- data/spec/unit/crud_spec.rb +35 -1
- data/spec/unit/service_spec.rb +6 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 783895fbee97ba45427d51d8f0220e3aee4a60b9
|
4
|
+
data.tar.gz: 311de6db45e1d3db7bd3ac7108577d5f8fba1577
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77dab5ab969c0a1450baa4933bddd00222cf5967cc2fd46d9ef6337d9d1935f2baccbc5fcd20f3b9e29dd6d2a1f318ce7705586cd4b430f10ef4c25ad34913af
|
7
|
+
data.tar.gz: 7d4bb5bedaaab7decf7876b8cdd846457ea669bdf820af2c889dff24c8842e20e1c541042bd5c13f2972d3e9e7a5c81e8b34ca8cb9d85357ac8abb291a3d3da4
|
data/lib/json-crud-api/crud.rb
CHANGED
@@ -26,8 +26,9 @@ module JsonCrudApi
|
|
26
26
|
service = settings.services[key]
|
27
27
|
presenter = settings.presenters[key]
|
28
28
|
return fail_unauthorized unless service.user_authorized_for? :create
|
29
|
-
|
30
|
-
|
29
|
+
post_data = presenter.parse @payload, :post
|
30
|
+
return fail_with_errors unless service.is_valid? post_data, :create, self
|
31
|
+
entity = service.create post_data
|
31
32
|
JSON.fast_generate presenter.render(entity, :post)
|
32
33
|
end
|
33
34
|
|
@@ -35,8 +36,10 @@ module JsonCrudApi
|
|
35
36
|
service = settings.services[key]
|
36
37
|
presenter = settings.presenters[key]
|
37
38
|
return fail_unauthorized unless service.user_authorized_for? :update
|
38
|
-
|
39
|
-
|
39
|
+
put_data = presenter.parse @payload, :put
|
40
|
+
return fail_with_errors unless service.is_valid? put_data, :update, self
|
41
|
+
return fail_not_found unless service.update params["id"], put_data
|
42
|
+
entity = service.get params["id"]
|
40
43
|
JSON.fast_generate presenter.render(entity, :put)
|
41
44
|
end
|
42
45
|
|
@@ -44,7 +47,7 @@ module JsonCrudApi
|
|
44
47
|
service = settings.services[key]
|
45
48
|
presenter = settings.presenters[key]
|
46
49
|
return fail_unauthorized unless service.user_authorized_for? :delete
|
47
|
-
return fail_not_found unless service.delete
|
50
|
+
return fail_not_found unless service.delete params["id"]
|
48
51
|
204
|
49
52
|
end
|
50
53
|
end
|
@@ -62,6 +62,11 @@ module JsonCrudApi
|
|
62
62
|
@user_scopes = user_scopes
|
63
63
|
end
|
64
64
|
|
65
|
+
# Find if the params are valid for an operation (defaults to true)
|
66
|
+
def valid_for?(params, operation, api_instance)
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
65
70
|
# Determine if the current user is authorized for the given operation
|
66
71
|
def user_authorized_for?(operation)
|
67
72
|
# Auth is disabled if scope map is nil
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe JsonCrudApi::CrudExtension do
|
4
|
+
before(:each) do
|
5
|
+
class CrudTest
|
6
|
+
attr_accessor :test_settings, :test_params, :payload
|
7
|
+
include JsonCrudApi::CrudExtension
|
8
|
+
|
9
|
+
def settings
|
10
|
+
@test_settings
|
11
|
+
end
|
12
|
+
|
13
|
+
def params
|
14
|
+
@test_params
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
@test = CrudTest.new
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#crud_api' do
|
22
|
+
it 'should enable get_all if configured' do
|
23
|
+
expect(@test).to receive(:get).with('/test')
|
24
|
+
|
25
|
+
expect(@test).not_to receive(:get)
|
26
|
+
expect(@test).not_to receive(:post)
|
27
|
+
expect(@test).not_to receive(:put)
|
28
|
+
expect(@test).not_to receive(:delete)
|
29
|
+
|
30
|
+
@test.crud_api('/test',:one, [:disable_write,:disable_get])
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should enable get if configured' do
|
34
|
+
expect(@test).to receive(:get).with('/test/:id')
|
35
|
+
|
36
|
+
expect(@test).not_to receive(:get).with('/test')
|
37
|
+
expect(@test).not_to receive(:post)
|
38
|
+
expect(@test).not_to receive(:put)
|
39
|
+
expect(@test).not_to receive(:delete)
|
40
|
+
|
41
|
+
@test.crud_api('/test',:one, [:disable_write,:disable_get_all])
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'should enable post if configured' do
|
45
|
+
expect(@test).to receive(:post).with('/test')
|
46
|
+
|
47
|
+
expect(@test).not_to receive(:get)
|
48
|
+
expect(@test).not_to receive(:post)
|
49
|
+
expect(@test).not_to receive(:put)
|
50
|
+
expect(@test).not_to receive(:delete)
|
51
|
+
|
52
|
+
@test.crud_api('/test',:one, [:disable_put,:disable_delete,:disable_read])
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'should enable put if configured' do
|
56
|
+
expect(@test).to receive(:put).with('/test/:id')
|
57
|
+
|
58
|
+
expect(@test).not_to receive(:get)
|
59
|
+
expect(@test).not_to receive(:post)
|
60
|
+
expect(@test).not_to receive(:delete)
|
61
|
+
|
62
|
+
@test.crud_api('/test',:one, [:disable_post,:disable_delete,:disable_read])
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should enable delete if configured' do
|
66
|
+
expect(@test).to receive(:delete).with('/test/:id')
|
67
|
+
|
68
|
+
expect(@test).not_to receive(:get)
|
69
|
+
expect(@test).not_to receive(:post)
|
70
|
+
expect(@test).not_to receive(:put)
|
71
|
+
|
72
|
+
@test.crud_api('/test',:one, [:disable_post,:disable_put,:disable_read])
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
data/spec/unit/crud_spec.rb
CHANGED
@@ -143,6 +143,7 @@ describe JsonCrudApi::AuthClient do
|
|
143
143
|
expect(@test.test_settings.presenters).to receive(:[]).with('thekey').and_return(@presenter)
|
144
144
|
|
145
145
|
expect(@service).to receive(:user_authorized_for?).with(:create).and_return(true)
|
146
|
+
expect(@service).to receive(:is_valid?).with({ :test_output => 12398}, :create, @test).and_return(true)
|
146
147
|
expect(@service).to receive(:create).with({ :test_output => 12398}).and_return({ :test_output => 77234})
|
147
148
|
|
148
149
|
expect(@presenter).to receive(:parse).with(@test.payload, :post).and_return({ :test_output => 12398})
|
@@ -151,6 +152,23 @@ describe JsonCrudApi::AuthClient do
|
|
151
152
|
expect(@test.send(:crud_post,'thekey')).to eq '{"test_output":12313}'
|
152
153
|
end
|
153
154
|
|
155
|
+
it 'should fail with 422 if service is_valid? fails' do
|
156
|
+
expect(@test.test_settings.services).to receive(:[]).with('thekey').and_return(@service)
|
157
|
+
expect(@test.test_settings.presenters).to receive(:[]).with('thekey').and_return(@presenter)
|
158
|
+
|
159
|
+
expect(@service).to receive(:user_authorized_for?).with(:create).and_return(true)
|
160
|
+
expect(@service).to receive(:is_valid?).with({ :test_output => 12398}, :create, @test).and_return(false)
|
161
|
+
|
162
|
+
expect(@presenter).to receive(:parse).with(@test.payload, :post).and_return({ :test_output => 12398})
|
163
|
+
|
164
|
+
expect(@test).to receive(:fail_with_errors)
|
165
|
+
|
166
|
+
expect(@service).not_to receive(:create)
|
167
|
+
expect(@presenter).not_to receive(:render)
|
168
|
+
|
169
|
+
@test.send(:crud_post,'thekey')
|
170
|
+
end
|
171
|
+
|
154
172
|
it 'should fail_unauthorized if not authorized for create' do
|
155
173
|
expect(@test.test_settings.services).to receive(:[]).with('thekey').and_return(@service)
|
156
174
|
expect(@test.test_settings.presenters).to receive(:[]).with('thekey').and_return(@presenter)
|
@@ -184,20 +202,36 @@ describe JsonCrudApi::AuthClient do
|
|
184
202
|
expect(@test.test_settings.presenters).to receive(:[]).with('thekey').and_return(@presenter)
|
185
203
|
|
186
204
|
expect(@service).to receive(:user_authorized_for?).with(:update).and_return(true)
|
205
|
+
expect(@presenter).to receive(:parse).with(@test.payload, :put).and_return({ :test_output => 12398})
|
206
|
+
expect(@service).to receive(:is_valid?).with({ :test_output => 12398},:update,@test).and_return(true)
|
187
207
|
expect(@service).to receive(:update).with(7345, { :test_output => 12398}).and_return(true)
|
188
208
|
expect(@service).to receive(:get).with(7345).and_return({ :test_output => 77234})
|
189
209
|
|
190
|
-
expect(@presenter).to receive(:parse).with(@test.payload, :put).and_return({ :test_output => 12398})
|
191
210
|
expect(@presenter).to receive(:render).with({ :test_output => 77234}, :put).and_return({ :test_output => 12313})
|
192
211
|
|
193
212
|
expect(@test.send(:crud_put,'thekey')).to eq '{"test_output":12313}'
|
194
213
|
end
|
195
214
|
|
215
|
+
it 'should fail_with_errors if service is_valid? fails' do
|
216
|
+
expect(@test.test_settings.services).to receive(:[]).with('thekey').and_return(@service)
|
217
|
+
expect(@test.test_settings.presenters).to receive(:[]).with('thekey').and_return(@presenter)
|
218
|
+
|
219
|
+
expect(@service).to receive(:user_authorized_for?).with(:update).and_return(true)
|
220
|
+
expect(@presenter).to receive(:parse).with(@test.payload, :put).and_return({ :test_output => 12398})
|
221
|
+
expect(@service).to receive(:is_valid?).with({ :test_output => 12398},:update,@test).and_return(false)
|
222
|
+
expect(@presenter).not_to receive(:render)
|
223
|
+
|
224
|
+
expect(@test).to receive(:fail_with_errors)
|
225
|
+
|
226
|
+
expect(@test.send(:crud_put,'thekey'))
|
227
|
+
end
|
228
|
+
|
196
229
|
it 'should fail_not_found if service update returned false' do
|
197
230
|
expect(@test.test_settings.services).to receive(:[]).with('thekey').and_return(@service)
|
198
231
|
expect(@test.test_settings.presenters).to receive(:[]).with('thekey').and_return(@presenter)
|
199
232
|
|
200
233
|
expect(@service).to receive(:user_authorized_for?).with(:update).and_return(true)
|
234
|
+
expect(@service).to receive(:is_valid?).with({ :test_output => 12398},:update,@test).and_return(true)
|
201
235
|
expect(@service).to receive(:update).with(7345, { :test_output => 12398}).and_return(false)
|
202
236
|
|
203
237
|
expect(@test).to receive(:fail_not_found)
|
data/spec/unit/service_spec.rb
CHANGED
@@ -160,6 +160,12 @@ describe JsonCrudApi::Service do
|
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
|
+
describe '#valid_for?' do
|
164
|
+
it 'should return true' do
|
165
|
+
expect(@service.valid_for?(nil,nil,nil)).to be true
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
163
169
|
describe '#user_authorized_for?' do
|
164
170
|
it 'should return true if scope_map is nil' do
|
165
171
|
@service.scope_map = nil
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-crud-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Cully
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -159,6 +159,7 @@ files:
|
|
159
159
|
- spec/spec_helper.rb
|
160
160
|
- spec/unit/api_spec.rb
|
161
161
|
- spec/unit/auth_client_spec.rb
|
162
|
+
- spec/unit/crud_extension_spec.rb
|
162
163
|
- spec/unit/crud_spec.rb
|
163
164
|
- spec/unit/json_errors_spec.rb
|
164
165
|
- spec/unit/json_payload_spec.rb
|
@@ -193,6 +194,7 @@ test_files:
|
|
193
194
|
- spec/spec_helper.rb
|
194
195
|
- spec/unit/api_spec.rb
|
195
196
|
- spec/unit/auth_client_spec.rb
|
197
|
+
- spec/unit/crud_extension_spec.rb
|
196
198
|
- spec/unit/crud_spec.rb
|
197
199
|
- spec/unit/json_errors_spec.rb
|
198
200
|
- spec/unit/json_payload_spec.rb
|