module API # Licenses API class Licenses < Grape::API PROJECT_TEMPLATE_REGEX = /[\<\{\[] (project|description| one\sline\s.+\swhat\sit\sdoes\.) # matching the start and end is enough here [\>\}\]]/xi.freeze YEAR_TEMPLATE_REGEX = /[<{\[](year|yyyy)[>}\]]/i.freeze FULLNAME_TEMPLATE_REGEX = /[\<\{\[] (fullname|name\sof\s(author|copyright\sowner)) [\>\}\]]/xi.freeze # Get the list of the available license templates # # Parameters: # popular - Filter licenses to only the popular ones # # Example Request: # GET /licenses # GET /licenses?popular=1 get 'licenses' do options = { featured: params[:popular].present? ? true : nil } present Licensee::License.all(options), with: Entities::RepoLicense end # Get text for specific license # # Parameters: # key (required) - The key of a license # project - Copyrighted project name # fullname - Full name of copyright holder # # Example Request: # GET /licenses/mit # get 'licenses/:key', requirements: { key: /[\w\.-]+/ } do required_attributes! [:key] not_found!('License') unless Licensee::License.find(params[:key]) # We create a fresh Licensee::License object since we'll modify its # content in place below. license = Licensee::License.new(params[:key]) license.content.gsub!(YEAR_TEMPLATE_REGEX, Time.now.year.to_s) license.content.gsub!(PROJECT_TEMPLATE_REGEX, params[:project]) if params[:project].present? fullname = params[:fullname].presence || current_user.try(:name) license.content.gsub!(FULLNAME_TEMPLATE_REGEX, fullname) if fullname present license, with: Entities::RepoLicense end end end