dash_api 0.0.24 → 0.0.25
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/README.md +31 -1
- data/app/controllers/dash_api/api_controller.rb +18 -11
- data/app/services/dash_api/query.rb +25 -6
- data/app/services/dash_api/serializer.rb +1 -1
- data/lib/dash_api/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3166c565503b2ccd94b3beb84b0aa75097de7cd746bcd62a29fca359b53b7d3
|
4
|
+
data.tar.gz: 14c183d50bbe19b1ca7082a542ee25a1190707e966a21ac85958139d800fb240
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e8895ed01f5d98068301c2564a5528769929b65edd2ee7246647d4f5161b550185022814241d3e7613fe01a3b459e69045fbb9a699d31d435cd4e023e5f3b7e
|
7
|
+
data.tar.gz: 159f36163bd351307e91d4a11a3ad512d388445c495f4f65731326ba08021da67fd11a13327889509c3a65843c0afef9d7fc0e3372ca5c7b8d9ea6566053023c
|
data/README.md
CHANGED
@@ -14,6 +14,7 @@ DashAPI supports several features out of the box with little or no configuration
|
|
14
14
|
- Sorting
|
15
15
|
- Selects
|
16
16
|
- Associations
|
17
|
+
- Statistics
|
17
18
|
- Pagination
|
18
19
|
- JWT token authorization
|
19
20
|
- Firebase authorization
|
@@ -218,11 +219,40 @@ GET /dash/api/books?includes=reviews
|
|
218
219
|
```
|
219
220
|
|
220
221
|
To combine associations together comma seperate the included tables:
|
221
|
-
|
222
222
|
```
|
223
223
|
GET /dash/api/books?includes=author,reviews
|
224
224
|
```
|
225
225
|
|
226
|
+
### Statistics
|
227
|
+
|
228
|
+
You can perform calculations for the `minimum`, `maximum`, `average` or `count` of any field in a table.
|
229
|
+
You may also combine filters or other query parameters to refine results before performing the calculation.
|
230
|
+
|
231
|
+
Maxixum
|
232
|
+
```
|
233
|
+
max=<field>
|
234
|
+
```
|
235
|
+
|
236
|
+
Minimum
|
237
|
+
```
|
238
|
+
min=<field>
|
239
|
+
```
|
240
|
+
|
241
|
+
Average
|
242
|
+
```
|
243
|
+
avg=<field>
|
244
|
+
```
|
245
|
+
|
246
|
+
Count
|
247
|
+
```
|
248
|
+
count=<field>
|
249
|
+
```
|
250
|
+
|
251
|
+
Example:
|
252
|
+
```
|
253
|
+
GET /dash/api/books?avg=ratings
|
254
|
+
```
|
255
|
+
|
226
256
|
|
227
257
|
### Create
|
228
258
|
|
@@ -14,15 +14,21 @@ module DashApi
|
|
14
14
|
@filters.each{|filter| resources = resources.where(filter) }
|
15
15
|
resources = resources.pg_search(@keywords) if @keywords.present?
|
16
16
|
resources = resources.order(@order) if @order.present?
|
17
|
-
resources = resources.select(@select) if @select.present?
|
18
|
-
|
17
|
+
resources = resources.select(@select) if @select.present?
|
18
|
+
|
19
|
+
if @stats.present?
|
20
|
+
statistic, value = @stats.keys[0], @stats.values[0]&.to_sym
|
21
|
+
resources = resources.send(statistic, value)
|
22
|
+
else
|
23
|
+
resources = resources.page(@page).per(@per_page)
|
24
|
+
end
|
19
25
|
|
20
26
|
render json: {
|
21
|
-
data: DashApi::Serializer.
|
27
|
+
data: DashApi::Serializer.render(resources, includes: @includes),
|
22
28
|
meta: {
|
23
29
|
page: @page,
|
24
30
|
per_page: @per_page,
|
25
|
-
total_count: resources.total_count
|
31
|
+
total_count: resources.respond_to?(:total_count) ? resources.total_count : 1
|
26
32
|
}
|
27
33
|
}
|
28
34
|
end
|
@@ -31,7 +37,7 @@ module DashApi
|
|
31
37
|
resource = dash_scope.find(params[:id])
|
32
38
|
authorize resource, :show?
|
33
39
|
render json: {
|
34
|
-
data: DashApi::Serializer.
|
40
|
+
data: DashApi::Serializer.render(resource, includes: @includes)
|
35
41
|
}
|
36
42
|
end
|
37
43
|
|
@@ -39,7 +45,7 @@ module DashApi
|
|
39
45
|
resource = dash_scope.create!(dash_params)
|
40
46
|
authorize resource, :create?
|
41
47
|
render json: {
|
42
|
-
data: DashApi::Serializer.
|
48
|
+
data: DashApi::Serializer.render(resource)
|
43
49
|
}
|
44
50
|
end
|
45
51
|
|
@@ -48,7 +54,7 @@ module DashApi
|
|
48
54
|
authorize resource, :update?
|
49
55
|
if resource.update(dash_params)
|
50
56
|
render json: {
|
51
|
-
data: DashApi::Serializer.
|
57
|
+
data: DashApi::Serializer.render(resource)
|
52
58
|
}
|
53
59
|
else
|
54
60
|
render json: { error: resource.errors.full_messages }, status: 422
|
@@ -59,21 +65,21 @@ module DashApi
|
|
59
65
|
resource = dash_scope.find(params[:id])
|
60
66
|
authorize resource, :destroy?
|
61
67
|
resource.destroy
|
62
|
-
render json: { data: DashApi::Serializer.
|
68
|
+
render json: { data: DashApi::Serializer.render(resource) }
|
63
69
|
end
|
64
70
|
|
65
71
|
def update_many
|
66
72
|
resources = dash_scope.where(id: params[:ids])
|
67
73
|
authorize resources, :update?
|
68
74
|
resources.update(dash_params)
|
69
|
-
render json: { data: DashApi::Serializer.
|
75
|
+
render json: { data: DashApi::Serializer.render(resources) }
|
70
76
|
end
|
71
77
|
|
72
78
|
def delete_many
|
73
79
|
resources = dash_scope.where(id: params[:ids])
|
74
80
|
authorize resources, :destroy?
|
75
81
|
resources.destroy_all
|
76
|
-
render json: { data: DashApi::Serializer.
|
82
|
+
render json: { data: DashApi::Serializer.render(resources) }
|
77
83
|
end
|
78
84
|
|
79
85
|
private
|
@@ -85,8 +91,9 @@ module DashApi
|
|
85
91
|
@per_page = query[:per_page]
|
86
92
|
@order = query[:order]
|
87
93
|
@filters = query[:filters]
|
94
|
+
@stats = query[:stats]
|
88
95
|
@select = query[:select_fields]
|
89
|
-
@includes = query[:associations]
|
96
|
+
@includes = query[:associations]
|
90
97
|
end
|
91
98
|
|
92
99
|
def load_dash_table
|
@@ -47,19 +47,38 @@
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
stats = nil
|
51
|
+
if params[:max]
|
52
|
+
stats = {maximum: params[:max]}
|
53
|
+
end
|
54
|
+
|
55
|
+
if params[:min]
|
56
|
+
stats = {minimum: params[:min]}
|
57
|
+
end
|
58
|
+
|
59
|
+
if params[:avg]
|
60
|
+
stats = {average: params[:avg]}
|
61
|
+
end
|
62
|
+
|
63
|
+
if params[:count]
|
64
|
+
stats = {count: params[:count]}
|
65
|
+
end
|
66
|
+
|
67
|
+
|
50
68
|
page = params[:page]&.to_i || 1
|
51
69
|
per_page = params[:per_page]&.to_i || PER_PAGE
|
52
70
|
|
53
71
|
{
|
72
|
+
associations: associations,
|
73
|
+
filters: filters,
|
54
74
|
keywords: keywords,
|
55
|
-
select_fields: select_fields,
|
56
75
|
order: order,
|
57
|
-
sort_by: sort_by,
|
58
|
-
sort_direction: sort_direction,
|
59
|
-
filters: filters,
|
60
76
|
page: page,
|
61
|
-
|
62
|
-
|
77
|
+
per_page: per_page,
|
78
|
+
select_fields: select_fields,
|
79
|
+
sort_by: sort_by,
|
80
|
+
sort_direction: sort_direction,
|
81
|
+
stats: stats
|
63
82
|
}
|
64
83
|
end
|
65
84
|
|
data/lib/dash_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dash_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rami Bitar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -184,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
184
|
- !ruby/object:Gem::Version
|
185
185
|
version: '0'
|
186
186
|
requirements: []
|
187
|
-
rubygems_version: 3.
|
187
|
+
rubygems_version: 3.2.22
|
188
188
|
signing_key:
|
189
189
|
specification_version: 4
|
190
190
|
summary: REST API for your postgres database.
|