* Update annotate to version 2.7.3 * Update aws-sdk-s3 to version 1.9.2 * Update browser to version 2.5.3 * Update capistrano to version 3.10.2 * Update domain_name to version 0.5.20180417 * Update http to version 3.2.0 * Update lograge to version 0.10.0 * Update oj to version 3.5.1 * Update parallel_tests to version 2.21.3 * Update puma to version 3.11.4 * Update rubocop to version 0.55.0 * Update scss_lint to version 0.57.0 * Update simplecov to version 0.16.1 * Update tty-command to version 0.8.0 * Update tty-prompt to version 0.16.0 * Update pkg-config to version 1.3.0 * Update fog-local to version 0.5.0 * Update fog-openstack to version 0.1.25 * Update devise-two-factor to version 3.0.3 * bundle update
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
# == Schema Information
 | 
						|
#
 | 
						|
# Table name: custom_emojis
 | 
						|
#
 | 
						|
#  id                 :bigint(8)        not null, primary key
 | 
						|
#  shortcode          :string           default(""), not null
 | 
						|
#  domain             :string
 | 
						|
#  image_file_name    :string
 | 
						|
#  image_content_type :string
 | 
						|
#  image_file_size    :integer
 | 
						|
#  image_updated_at   :datetime
 | 
						|
#  created_at         :datetime         not null
 | 
						|
#  updated_at         :datetime         not null
 | 
						|
#  disabled           :boolean          default(FALSE), not null
 | 
						|
#  uri                :string
 | 
						|
#  image_remote_url   :string
 | 
						|
#  visible_in_picker  :boolean          default(TRUE), not null
 | 
						|
#
 | 
						|
 | 
						|
class CustomEmoji < ApplicationRecord
 | 
						|
  LIMIT = 50.kilobytes
 | 
						|
 | 
						|
  SHORTCODE_RE_FRAGMENT = '[a-zA-Z0-9_]{2,}'
 | 
						|
 | 
						|
  SCAN_RE = /(?<=[^[:alnum:]:]|\n|^)
 | 
						|
    :(#{SHORTCODE_RE_FRAGMENT}):
 | 
						|
    (?=[^[:alnum:]:]|$)/x
 | 
						|
 | 
						|
  has_one :local_counterpart, -> { where(domain: nil) }, class_name: 'CustomEmoji', primary_key: :shortcode, foreign_key: :shortcode
 | 
						|
 | 
						|
  has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce -strip' } }
 | 
						|
 | 
						|
  validates_attachment :image, content_type: { content_type: 'image/png' }, presence: true, size: { less_than: LIMIT }
 | 
						|
  validates :shortcode, uniqueness: { scope: :domain }, format: { with: /\A#{SHORTCODE_RE_FRAGMENT}\z/ }, length: { minimum: 2 }
 | 
						|
 | 
						|
  scope :local,      -> { where(domain: nil) }
 | 
						|
  scope :remote,     -> { where.not(domain: nil) }
 | 
						|
  scope :alphabetic, -> { order(domain: :asc, shortcode: :asc) }
 | 
						|
 | 
						|
  remotable_attachment :image, LIMIT
 | 
						|
 | 
						|
  include Attachmentable
 | 
						|
 | 
						|
  def local?
 | 
						|
    domain.nil?
 | 
						|
  end
 | 
						|
 | 
						|
  def object_type
 | 
						|
    :emoji
 | 
						|
  end
 | 
						|
 | 
						|
  class << self
 | 
						|
    def from_text(text, domain)
 | 
						|
      return [] if text.blank?
 | 
						|
 | 
						|
      shortcodes = text.scan(SCAN_RE).map(&:first).uniq
 | 
						|
 | 
						|
      return [] if shortcodes.empty?
 | 
						|
 | 
						|
      where(shortcode: shortcodes, domain: domain, disabled: false)
 | 
						|
    end
 | 
						|
 | 
						|
    def search(shortcode)
 | 
						|
      where('"custom_emojis"."shortcode" ILIKE ?', "%#{shortcode}%")
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |