You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

38 lines
789 B

  1. # frozen_string_literal: true
  2. class CustomEmojiFilter
  3. attr_reader :params
  4. def initialize(params)
  5. @params = params
  6. end
  7. def results
  8. scope = CustomEmoji.alphabetic
  9. params.each do |key, value|
  10. next if key.to_s == 'page'
  11. scope.merge!(scope_for(key, value)) if value.present?
  12. end
  13. scope
  14. end
  15. private
  16. def scope_for(key, value)
  17. case key.to_s
  18. when 'local'
  19. CustomEmoji.local.left_joins(:category).reorder(Arel.sql('custom_emoji_categories.name ASC NULLS FIRST, custom_emojis.shortcode ASC'))
  20. when 'remote'
  21. CustomEmoji.remote
  22. when 'by_domain'
  23. CustomEmoji.where(domain: value.strip.downcase)
  24. when 'shortcode'
  25. CustomEmoji.search(value.strip)
  26. else
  27. raise "Unknown filter: #{key}"
  28. end
  29. end
  30. end