Skip to content

Commit a929305

Browse files
committed
implements document types controller, makes necessary changes to documents and services controllers
1 parent 8952a83 commit a929305

File tree

3 files changed

+107
-11
lines changed

3 files changed

+107
-11
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# frozen_string_literal: true
2+
3+
# app/controllers/document_types_controller.rb
4+
class DocumentTypesController < ApplicationController
5+
include Pundit::Authorization
6+
7+
before_action :authenticate_user!, except: %i[index show]
8+
before_action :set_document_type, only: %i[show edit update review]
9+
before_action :set_documents, only: :show
10+
11+
def index
12+
authorize DocumentType
13+
@q = DocumentType.ransack(params[:q])
14+
@document_types = @q.result(distinct: true).page(params[:page] || 1)
15+
end
16+
17+
def show
18+
authorize @document_type
19+
end
20+
21+
def new
22+
authorize DocumentType
23+
24+
@document_type = DocumentType.new
25+
@submit_text = current_user.admin || current_user.curator ? 'Create' : 'Request'
26+
end
27+
28+
def create
29+
authorize DocumentType
30+
31+
@document_type = DocumentType.new(document_type_params)
32+
current_user_privileged = current_user.admin || current_user.curator
33+
@document_type.status = 'pending' unless current_user_privileged
34+
35+
@document_type.user = current_user
36+
37+
if @document_type.save
38+
redirect_to document_type_path(@document_type)
39+
else
40+
render 'new'
41+
end
42+
end
43+
44+
def edit
45+
authorize @document_type
46+
47+
@submit_text = 'Update'
48+
end
49+
50+
def update
51+
authorize @document_type
52+
53+
@document_type.update(document_type_params)
54+
if @document_type.save
55+
flash[:notice] = 'Document type updated'
56+
redirect_to document_type_path(@document_type)
57+
else
58+
render 'edit'
59+
end
60+
end
61+
62+
def review
63+
authorize @document_type
64+
65+
@document_type.status = params[:status]
66+
if @document_type.save
67+
flash[:notice] = 'Updated status of document type'
68+
redirect_to document_type_path(@document_type)
69+
else
70+
flash[:error] = 'There was an error updating the document type'
71+
end
72+
end
73+
74+
private
75+
76+
def set_document_type
77+
@document_type = DocumentType.find(params[:id])
78+
end
79+
80+
def set_documents
81+
document_type = DocumentType.find(params[:id])
82+
@documents = document_type.documents
83+
end
84+
85+
def document_type_params
86+
params.require(:document_type).permit(:user_id, :name, :status, :description)
87+
end
88+
end

app/controllers/documents_controller.rb

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,33 @@ class DocumentsController < ApplicationController
2727

2828
before_action :authenticate_user!, except: %i[index show]
2929
before_action :set_document, only: %i[show edit update crawl restore_points]
30-
before_action :set_services, only: %i[new edit]
31-
before_action :set_document_names, only: %i[new edit]
32-
before_action :set_crawlers, only: %i[new edit]
30+
before_action :set_services, only: %i[new edit create update]
31+
before_action :set_document_names, only: %i[new edit create update]
32+
before_action :set_crawlers, only: %i[new edit create update]
3333

3434
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
3535

3636
def index
3737
authorize Document
38-
@q = Document.includes(:service).ransack(params[:q])
38+
@q = Document.includes(:service, :document_type).ransack(params[:q])
3939
@documents = @q.result(distinct: true).page(params[:page] || 1)
4040
end
4141

4242
def new
4343
authorize Document
4444

4545
@document = Document.new
46-
service = params[:service]
47-
return unless service
46+
service = params[:service_id]
4847

49-
@document.service = Service.find(service)
48+
@document.service = Service.find(service) if service
5049
end
5150

5251
def create
5352
authorize Document
5453

5554
@document = Document.new(document_params)
5655
@document.user = current_user
56+
@document.name = @document.document_type.name if @document.document_type
5757

5858
if @document.save
5959
crawl_result = perform_crawl
@@ -67,7 +67,7 @@ def create
6767
end
6868
redirect_to document_path(@document)
6969
else
70-
render 'new'
70+
render :new
7171
end
7272
end
7373

@@ -76,6 +76,12 @@ def update
7676

7777
@document.update(document_params)
7878

79+
if document_params[:document_type_id]
80+
id = document_params[:document_type_id]
81+
document_type = DocumentType.find(id)
82+
@document.name = document_type.name unless @document.name == document_type.name
83+
end
84+
7985
# we should probably only be running the crawler if the URL or XPath have changed
8086
run_crawler = @document.saved_changes.keys.any? { |attribute| %w[url xpath crawler_server].include? attribute }
8187
crawl_result = perform_crawl if run_crawler
@@ -115,6 +121,8 @@ def destroy
115121

116122
def show
117123
authorize @document
124+
125+
@name = @document.document_type ? @document.document_type.name : @document.name
118126
end
119127

120128
def crawl
@@ -157,15 +165,15 @@ def set_services
157165
end
158166

159167
def set_document_names
160-
@document_names = Document::VALID_NAMES
168+
@document_names = DocumentType.order('name ASC')
161169
end
162170

163171
def set_crawlers
164172
@crawlers = Rails.env.development? ? DEV_CRAWLERS : PROD_CRAWLERS
165173
end
166174

167175
def document_params
168-
params.require(:document).permit(:service, :service_id, :user_id, :name, :url, :xpath, :crawler_server)
176+
params.require(:document).permit(:service, :service_id, :user_id, :document_type_id, :name, :url, :xpath, :crawler_server)
169177
end
170178

171179
def crawler_error_message(result)

app/controllers/services_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def create
4949
def annotate
5050
authorize Service
5151

52-
@service = Service.includes(documents: [:points, :user]).find(params[:id] || params[:service_id])
52+
@service = Service.includes(documents: [:points, :user, :document_type]).find(params[:id] || params[:service_id])
5353
@documents = @service.documents
5454
@sourced_from_ota = @documents.where(ota_sourced: true).any?
5555
if params[:point_id] && current_user

0 commit comments

Comments
 (0)