crud-service 0.0.7 → 0.0.8

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.
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