58 lines
1.3 KiB
Ruby
58 lines
1.3 KiB
Ruby
class ContractsController < ApplicationController
|
|
def show
|
|
respond_to do |format|
|
|
format.pdf { send_contract_pdf }
|
|
|
|
if Rails.env.development?
|
|
format.html { render_sample_html }
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def releases
|
|
if @project
|
|
policy_scope(@project.public_send(releasable_param.name.pluralize))
|
|
else
|
|
policy_scope(releasable_param.type)
|
|
end
|
|
end
|
|
|
|
def releasable_param
|
|
@releasable_param ||= ReleasableParam.new(params.to_unsafe_h)
|
|
end
|
|
|
|
def releasable
|
|
authorize releases.find(releasable_param.id)
|
|
end
|
|
|
|
def contract
|
|
authorize Contract.new(releasable)
|
|
end
|
|
|
|
def download_attributes
|
|
{
|
|
disposition: "inline",
|
|
filename: contract.filename,
|
|
type: "application/pdf",
|
|
}
|
|
end
|
|
|
|
def render_sample_html
|
|
# NOTE: For development purposes, this contract renders with the current locale, not the locale of the release itself
|
|
render contract.render_attributes
|
|
end
|
|
|
|
def send_contract_pdf
|
|
# Native release contracts must be generated on-the-fly; non-native releases have a contract attachment
|
|
if releasable.native?
|
|
send_file contract.to_pdf, download_attributes
|
|
elsif policy(contract).show?
|
|
redirect_to releasable.contract.service_url
|
|
else
|
|
raise Pundit::NotAuthorizedError
|
|
end
|
|
end
|
|
end
|