Commit 44bc526b authored by James Edwards-Jones's avatar James Edwards-Jones

Issues CSV view code extracted for reuse

parent d9e9035b
......@@ -37,8 +37,6 @@ class Projects::IssuesController < Projects::ApplicationController
if params[:label_name].present?
@labels = LabelsFinder.new(current_user, project_id: @project.id, title: params[:label_name]).execute
elsif request.format.csv?
@labels = @issues.labels_hash
end
@users = []
......@@ -56,7 +54,9 @@ class Projects::IssuesController < Projects::ApplicationController
respond_to do |format|
format.html
format.atom { render layout: false }
format.csv
format.csv do
render text: Issues::ExportCsvService.new(@issues).render
end
format.json do
render json: {
html: view_to_html_string("projects/issues/_issues"),
......
module Issues
class ExportCsvService
def initialize(issues_relation)
@issues = issues_relation
@labels = @issues.labels_hash
end
def render
csv_builder.render
end
private
def csv_builder
@csv_builder ||= CsvBuilder.new(@issues.includes(:author, :assignee),
'Issue ID' => 'iid',
'Title' => 'title',
'State' => 'state',
'Description' => 'description',
'Author' => 'author_name',
'Assignee' => 'assignee_name',
'Confidential' => 'confidential',
'Due Date' => -> (issue) { issue.due_date&.to_s(:csv) },
'Created At (UTC)' => -> (issue) { issue.created_at&.to_s(:csv) },
'Updated At (UTC)' => -> (issue) { issue.updated_at&.to_s(:csv) },
'Milestone' => -> (issue) { issue.milestone&.title },
'Labels' => -> (issue) { @labels[issue.id].sort.join(',').presence }
)
end
end
end
columns = {
'Issue ID' => 'iid',
'Title' => 'title',
'State' => 'state',
'Description' => 'description',
'Author' => 'author_name',
'Assignee' => 'assignee_name',
'Confidential' => 'confidential',
'Due Date' => -> (issue) { issue.due_date&.to_s(:csv) },
'Created At (UTC)' => -> (issue) { issue.created_at&.to_s(:csv) },
'Updated At (UTC)' => -> (issue) { issue.updated_at&.to_s(:csv) },
'Milestone' => -> (issue) { issue.milestone&.title },
'Labels' => -> (issue) { @labels[issue.id].sort.join(',').presence }
}
CsvBuilder.new(@issues.includes(:author, :assignee), columns).render
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment