summaryrefslogtreecommitdiff
path: root/lib/api/licenses.rb
blob: be0e113fbcb8519e6b3798022a0fecfff8f89cd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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