thecore_api 1.2.9 → 1.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 652a914141b6f13ca7a4c4bb38cd2d1f5d18ad2176f172d4d41c97b8957a6052
|
4
|
+
data.tar.gz: 4751c908c3b8ae4fdf0b241654e9e201a14d3041cb8e8082dc97f03b28ddfb6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a556839a53c08cd73e3fd041e276028df41f5cfcc322a8a1bec46873f091be6ed010ca4ef736adb0fbd627c0ed1a19b06039addc035af4c4b2a049ba5ba0bdaa
|
7
|
+
data.tar.gz: 1ca71d563bdb7e1676ce5f9e004a881e30554ad6c990223da23569297be3f09e1df1c75cb98e21435ea488ae47188a8ed6a4236722ccc2410e473cf2e40104a9
|
@@ -1,3 +1,11 @@
|
|
1
|
+
# Rails.application.routes.disable_clear_and_finalize = true
|
2
|
+
# Rails.application.routes.draw do
|
3
|
+
# namespace :api do
|
4
|
+
# namespace :v1, defaults: { format: :json } do
|
5
|
+
|
6
|
+
# end
|
7
|
+
# end
|
8
|
+
# end
|
1
9
|
# https://labs.kollegorna.se/blog/2015/04/build-an-api-now/
|
2
10
|
class Api::V1::BaseController < ActionController::API
|
3
11
|
include CanCan::ControllerAdditions
|
@@ -14,7 +22,7 @@ class Api::V1::BaseController < ActionController::API
|
|
14
22
|
before_action :destroy_session
|
15
23
|
|
16
24
|
before_action :authenticate_user!
|
17
|
-
before_action :find_model, except: [ :version, :token, :available_roles ]
|
25
|
+
before_action :find_model, except: [ :version, :token, :available_roles, :check ]
|
18
26
|
before_action :find_record, only: [ :show, :update, :destroy ]
|
19
27
|
|
20
28
|
rescue_from ActiveRecord::RecordNotFound, with: :not_found!
|
@@ -31,11 +39,54 @@ class Api::V1::BaseController < ActionController::API
|
|
31
39
|
# request.parameters
|
32
40
|
# end
|
33
41
|
|
42
|
+
def check
|
43
|
+
path = params[:path].split("/")
|
44
|
+
find_model path.first
|
45
|
+
if request.get?
|
46
|
+
if path.second.blank?
|
47
|
+
@page = params[:page]
|
48
|
+
@per = params[:per]
|
49
|
+
@pages_info = params[:pages_info]
|
50
|
+
@count = params[:count]
|
51
|
+
@query = params[:q]
|
52
|
+
index
|
53
|
+
elsif path.second.to_i.zero?
|
54
|
+
# String, so it's a custom action I must find in the @model (as an singleton method)
|
55
|
+
# Like: :controller/:custom_action
|
56
|
+
return render json: MultiJson.dump(@model.send(path.second, params))
|
57
|
+
elsif !path.second.to_i.zero? && path.third.blank?
|
58
|
+
# Integer, so it's an ID, I must show it
|
59
|
+
find_record path.second.to_i
|
60
|
+
show
|
61
|
+
elsif !path.second.to_i.zero? && !path.third.blank?
|
62
|
+
# Like :controller/:id/:custom_action
|
63
|
+
return render json: MultiJson.dump(@model.send(path.third, path.second.to_i, params))
|
64
|
+
end
|
65
|
+
elsif request.post?
|
66
|
+
# Non sono certo che i request params gli arrivino... Domani da testare
|
67
|
+
# Il body come glielo passo?
|
68
|
+
create
|
69
|
+
elsif request.put?
|
70
|
+
# Non sono certo che i request params gli arrivino... Domani da testare
|
71
|
+
# Il body come glielo passo?
|
72
|
+
find_record path.second.to_i
|
73
|
+
update
|
74
|
+
elsif request.delete?
|
75
|
+
find_record path.second.to_i
|
76
|
+
destroy
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
34
80
|
def index
|
81
|
+
# Rails.logger.debug params.inspect
|
35
82
|
# find the records
|
36
|
-
@q = (@model.column_names.include?("user_id") ? @model.where(user_id: current_user.id) : @model).ransack(params[:q])
|
83
|
+
@q = (@model.column_names.include?("user_id") ? @model.where(user_id: current_user.id) : @model).ransack(@query.presence|| params[:q])
|
37
84
|
@records_all = @q.result(distinct: true)
|
38
|
-
|
85
|
+
page = (@page.presence || params[:page])
|
86
|
+
per = (@per.presence || params[:per])
|
87
|
+
pages_info = (@pages_info.presence || params[:pages_info])
|
88
|
+
count = (@count.presence || params[:count])
|
89
|
+
@records = @records_all.page(page).per(per)
|
39
90
|
|
40
91
|
# If there's the keyword pagination_info, then return a pagination info object
|
41
92
|
return render json: MultiJson.dump({
|
@@ -48,13 +99,13 @@ class Api::V1::BaseController < ActionController::API
|
|
48
99
|
is_out_of_range: @records.out_of_range?,
|
49
100
|
pages_count: @records.total_pages,
|
50
101
|
current_page_number: @records.current_page
|
51
|
-
}) if !
|
102
|
+
}) if !pages_info.blank?
|
52
103
|
# If it's asked for page number, the paginate
|
53
|
-
return render json: MultiJson.dump(@records,
|
104
|
+
return render json: MultiJson.dump(@records, json_attrs) if !page.blank? # (@json_attrs || {})
|
54
105
|
# if you ask for count, then return a json object with just the number of objects
|
55
|
-
return render json: MultiJson.dump({count: @records_all.count}) if !
|
106
|
+
return render json: MultiJson.dump({count: @records_all.count}) if !count.blank?
|
56
107
|
# Default
|
57
|
-
render json: MultiJson.dump(@records_all,
|
108
|
+
render json: MultiJson.dump(@records_all, json_attrs) #(@json_attrs || {})
|
58
109
|
end
|
59
110
|
|
60
111
|
# def count
|
@@ -71,7 +122,7 @@ class Api::V1::BaseController < ActionController::API
|
|
71
122
|
end
|
72
123
|
|
73
124
|
def show
|
74
|
-
render json: @record.to_json(
|
125
|
+
render json: @record.to_json(json_attrs), status: 200
|
75
126
|
end
|
76
127
|
|
77
128
|
def create
|
@@ -80,13 +131,13 @@ class Api::V1::BaseController < ActionController::API
|
|
80
131
|
|
81
132
|
@record.save!
|
82
133
|
|
83
|
-
render json: @record.to_json(
|
134
|
+
render json: @record.to_json(json_attrs), status: 201
|
84
135
|
end
|
85
136
|
|
86
137
|
def update
|
87
138
|
@record.update_attributes(request_params)
|
88
139
|
|
89
|
-
render json: @record.to_json(
|
140
|
+
render json: @record.to_json(json_attrs), status: 200
|
90
141
|
end
|
91
142
|
|
92
143
|
def destroy
|
@@ -181,17 +232,23 @@ class Api::V1::BaseController < ActionController::API
|
|
181
232
|
|
182
233
|
# private
|
183
234
|
|
184
|
-
def find_record
|
235
|
+
def find_record id
|
185
236
|
# find the records
|
186
|
-
@record = @model.column_names.include?("user_id") ? @model.where(id: params[:id], user_id: current_user.id).first : @model.find(params[:id])
|
237
|
+
@record = @model.column_names.include?("user_id") ? @model.where(id: (id.presence || params[:id]), user_id: current_user.id).first : @model.find((id.presence || params[:id]))
|
187
238
|
end
|
188
239
|
|
189
|
-
def find_model
|
240
|
+
def find_model path=nil
|
190
241
|
# Find the name of the model from controller
|
191
|
-
@
|
242
|
+
@singular_controller = (path.presence || controller_name).singularize.to_sym
|
243
|
+
@model = (path.presence || controller_path).classify.constantize rescue controller_name.classify.constantize
|
192
244
|
end
|
193
245
|
|
194
246
|
def request_params
|
195
|
-
|
247
|
+
# controller_name.singularize.to_sym
|
248
|
+
params.require(@singular_controller).permit!
|
249
|
+
end
|
250
|
+
|
251
|
+
def json_attrs
|
252
|
+
@model.json_attrs.presence || @json_attrs.presence || {}
|
196
253
|
end
|
197
254
|
end
|
data/config/routes.rb
CHANGED
@@ -17,6 +17,19 @@ Rails.application.routes.draw do
|
|
17
17
|
resources :users, only: [:index, :create, :show, :update, :destroy] do
|
18
18
|
match 'search' => 'users#search', via: [:get, :post], as: :search, on: :collection
|
19
19
|
end
|
20
|
+
|
21
|
+
namespace :base do
|
22
|
+
get :check
|
23
|
+
post :check
|
24
|
+
put :check
|
25
|
+
delete :check
|
26
|
+
end
|
27
|
+
|
28
|
+
# Catchall routes
|
29
|
+
get '*path', to: 'base#check'
|
30
|
+
post '*path', to: 'base#check'
|
31
|
+
put '*path', to: 'base#check'
|
32
|
+
delete '*path', to: 'base#check'
|
20
33
|
end
|
21
34
|
end
|
22
35
|
end
|
data/lib/thecore_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thecore_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriele Tassoni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thecore
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- app/controllers/api/v1/info_controller.rb
|
94
94
|
- app/controllers/api/v1/sessions_controller.rb
|
95
95
|
- app/controllers/api/v1/users_controller.rb
|
96
|
+
- config/initializers/after_initialize_for_thecore_api.rb
|
96
97
|
- config/initializers/cors_api_thecore.rb
|
97
98
|
- config/initializers/wrap_parameters.rb
|
98
99
|
- config/routes.rb
|