crud-service 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +8 -8
  2. data/lib/api.rb +102 -61
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YTdkNzU4YzU3MDNhODcxOWY5NzI5ZjUyMTMzZGE1Mzg5YjdhOGEyNA==
4
+ Mzc4NzcyMDZkZjYyNmY1NDcwMjVmMDI2NWVhMGEwN2ZiN2QyOGViZA==
5
5
  data.tar.gz: !binary |-
6
- MmI4YTUwMjRhZWRjZDEzMWQ5OTA1Mjg0ZThjNTY2Mzg3Y2ZhODc3Nw==
6
+ YTk5OTkyYzY3YmQ5MmEzYTc3YmZhN2VjM2JiM2Q1MGEzYjRhMDBjYg==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OTNlZDM5N2Y5NjI2ZTRiMzI0YjgzMjI1YTU2MTkxM2RlMGNhYmY5Zjg2N2Vh
10
- ZmM1ZDZlMjllNjdmODE3OTdkMjk4MjAzNDFjNjhhY2YzZWNjYjUwNTVkMjdm
11
- ZTcwZmI2M2NiODBiODRhZjY5OTM4ZjAwYjc2OWMzYWI2ODg4MWM=
9
+ Y2RmY2NjNGU2MDMwNjZlNzA3ODhjZjlhN2MxMmNlMmI5MjQ3ZmU4ODdlZmVm
10
+ ZTRjN2Q2MTJkNWU0YmVlNjVmY2I4M2Y0NGUxOTIwODJkNGEzODg1NzBhOWQy
11
+ ZWI0OWEyYjU5ZTFkNDZiNzlkN2M0ZjkxZWEyYzUzNjI2MzExZWE=
12
12
  data.tar.gz: !binary |-
13
- ZGIwZGFkZDJlOThlYzUzNGFkYjQ3MjJlM2FhYjVkYmE5Yjg0MWU2OGM5Nzhm
14
- MjQ4OTdiZTMzYTRkODI3MDIzOWIxZWEwN2M4ZmMyM2NjMWIzNWMxNmM2ODA0
15
- NjA5MDI5OTQyMDc1YmFlNmZhODk4ODNhYTAyNGQwOTBhOTM4YzY=
13
+ OGZiNGMyZmE0MDYxNWU3MDhjYTYyNmFmNTgyNjYwZTU1Y2RiODY3NGEyZTRi
14
+ YjYzMGY1YTM5MjZmOTZhNWNhNjNlMDkwYmUyYTliZTAyZGRlZjBjYTJkMzEz
15
+ MDk2MzZiM2YxMDk1ZTMyMDQyNDQwYjJlMmI2OWYzY2Q2MTkzYzk=
data/lib/api.rb CHANGED
@@ -1,87 +1,128 @@
1
1
  module CrudService
2
- # This class provides a static method, crud_api, to configure a sinatra class with the
3
- # provided service, resource and primary key.
4
- class Api
5
- def self.crud_api(sinatra, service_name, name, primary_key_name)
6
-
7
- sinatra.options '/'+name do
8
- 204
2
+ module Api
3
+ # This mixin provides a static method, crud_api, to configure a sinatra class with the
4
+ # provided resource name, service and api_options
5
+ def crud_api(resource_name, service_name, primary_key_name, api_options = {})
6
+
7
+ defaults = {
8
+ :enable_read => true,
9
+ :enable_write => true,
10
+ :enable_options => true,
11
+ :enable_get_all => true,
12
+ :enable_get => true,
13
+ :enable_post => true,
14
+ :enable_put => true,
15
+ :enable_delete => true,
16
+ }
17
+ api_options.merge!(defaults) { |key, v1, v2| v1 }
18
+
19
+ if api_options[:enable_options]
20
+ options '/'+resource_name do
21
+ 204
22
+ end
9
23
  end
10
24
 
11
- sinatra.post '/'+name do
12
- # Get The data
13
- begin
14
- data = JSON.parse(request.body.read)
15
- rescue Exception => e
16
- return 400
17
- end
25
+ if api_options[:enable_write]
18
26
 
19
- # Valid POST?
20
- return 400 unless settings.send(service_name).valid_insert?(data)
27
+ if api_options[:enable_post]
28
+ post '/'+resource_name do
29
+ service = settings.send(service_name)
21
30
 
22
- # Already Exists?
23
- return 409 if settings.send(service_name).exists_by_primary_key?(data['code'])
31
+ # Get The data
32
+ begin
33
+ data = JSON.parse(request.body.read)
34
+ rescue Exception => e
35
+ return 400
36
+ end
24
37
 
25
- # Do Insert
26
- record = settings.send(service_name).insert(data)
38
+ # Valid POST?
39
+ return 400 unless service.valid_insert?(data)
27
40
 
28
- # Other Error
29
- return 500 if record == false
41
+ # Already Exists?
42
+ return 409 if service.exists_by_primary_key?(data['code'])
30
43
 
31
- # Output new record
32
- JSON.fast_generate record
33
- end
44
+ # Do Insert
45
+ record = service.insert(data)
34
46
 
35
- sinatra.get '/'+name do
36
- sanitize_params(params)
37
- # Check query validity
38
- return 400 unless settings.send(service_name).valid_query?(params)
47
+ # Other Error
48
+ return 500 if record == false
39
49
 
40
- # Return Regions on Query
41
- JSON.fast_generate settings.send(service_name).get_all_by_query(params)
42
- end
50
+ # Output new record
51
+ JSON.fast_generate record
52
+ end
53
+ end
43
54
 
44
- sinatra.get '/'+name+'/:'+primary_key_name do
45
- sanitize_params(params)
46
- return 400 unless settings.send(service_name).valid_query?(params)
55
+ if api_options[:enable_put]
56
+ put '/'+resource_name+'/:'+primary_key_name do
57
+ service = settings.send(service_name)
47
58
 
48
- record = settings.send(service_name).get_one_by_query(params)
49
- return 404 if record.nil?
50
- JSON.fast_generate record
51
- end
59
+ # Must Exist
60
+ return 404 unless service.exists_by_primary_key?(params[:code])
61
+
62
+ # Get The Data
63
+ begin
64
+ data = JSON.parse(request.body.read)
65
+ rescue Exception => e
66
+ return 400
67
+ end
68
+
69
+ # Valid Update?
70
+ return 400 unless service.valid_update?(data)
52
71
 
53
- sinatra.put '/'+name+'/:'+primary_key_name do
54
- # Must Exist
55
- return 404 unless settings.send(service_name).exists_by_primary_key?(params[:code])
72
+ # Do Update
73
+ record = service.update_by_primary_key(params[:code],data)
56
74
 
57
- # Get The Data
58
- begin
59
- data = JSON.parse(request.body.read)
60
- rescue Exception => e
61
- return 400
75
+ # Other Error
76
+ return 500 if record.nil?
77
+
78
+ # Return new Region
79
+ JSON.fast_generate record
80
+ end
62
81
  end
63
82
 
64
- # Valid Update?
65
- return 400 unless settings.send(service_name).valid_update?(data)
83
+ if api_options[:enable_delete]
84
+ delete '/'+resource_name+'/:'+primary_key_name do
85
+ service = settings.send(service_name)
86
+
87
+ # Must Exist
88
+ return 404 unless service.exists_by_primary_key?(params[:code])
66
89
 
67
- # Do Update
68
- record = settings.send(service_name).update_by_primary_key(params[:code],data)
90
+ # Do Delete
91
+ return 400 unless service.delete_by_primary_key(params[:code])
69
92
 
70
- # Other Error
71
- return 500 if record.nil?
93
+ 204
94
+ end
95
+ end
72
96
 
73
- # Return new Region
74
- JSON.fast_generate record
75
97
  end
76
98
 
77
- sinatra.delete '/'+name+'/:'+primary_key_name do
78
- # Must Exist
79
- return 404 unless settings.send(service_name).exists_by_primary_key?(params[:code])
99
+ if api_options[:enable_read]
80
100
 
81
- # Do Delete
82
- return 400 unless settings.send(service_name).delete_by_primary_key(params[:code])
101
+ if api_options[:enable_get]
102
+ get '/'+resource_name do
103
+ service = settings.send(service_name)
83
104
 
84
- 204
105
+ sanitize_params(params)
106
+ # Check query validity
107
+ return 400 unless service.valid_query?(params)
108
+
109
+ # Return Regions on Query
110
+ JSON.fast_generate service.get_all_by_query(params)
111
+ end
112
+ end
113
+
114
+ if api_options[:enable_get_all]
115
+ get '/'+resource_name+'/:'+primary_key_name do
116
+ service = self.settings.send(service_name)
117
+
118
+ sanitize_params(params)
119
+ return 400 unless service.valid_query?(params)
120
+
121
+ record = service.get_one_by_query(params)
122
+ return 404 if record.nil?
123
+ JSON.fast_generate record
124
+ end
125
+ end
85
126
  end
86
127
  end
87
128
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crud-service
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Cully