File: programming_language.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (31 lines) | stat: -rw-r--r-- 864 bytes parent folder | download
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
# frozen_string_literal: true

class ProgrammingLanguage < ApplicationRecord
  validates :name, presence: true
  validates :color, allow_blank: false, color: true

  # Returns all programming languages which match any of the given names (case
  # insensitively).
  scope :with_name_case_insensitive, ->(*names) do
    sanitized_names = names.map { |name| sanitize_sql_like(name) }
    where(arel_table[:name].matches_any(sanitized_names))
  end

  def self.most_popular(limit = 25)
    sql = <<~SQL
      SELECT
        mcv
      FROM
        pg_stats
      CROSS JOIN LATERAL
        unnest(most_common_vals::text::int[]) mt(mcv)
      WHERE
        tablename = 'repository_languages' and attname='programming_language_id'
      LIMIT
        $1
    SQL
    ids = connection.exec_query(sql, 'SQL', [limit]).rows.flatten

    where(id: ids).order(:name)
  end
end