status_filter.rb 746 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. # frozen_string_literal: true
  2. class Admin::StatusFilter
  3. KEYS = %i(
  4. media
  5. report_id
  6. ).freeze
  7. attr_reader :params
  8. def initialize(account, params)
  9. @account = account
  10. @params = params
  11. end
  12. def results
  13. scope = @account.statuses.where(visibility: [:public, :unlisted])
  14. params.each do |key, value|
  15. next if %w(page report_id).include?(key.to_s)
  16. scope.merge!(scope_for(key, value.to_s.strip)) if value.present?
  17. end
  18. scope
  19. end
  20. private
  21. def scope_for(key, _value)
  22. case key.to_s
  23. when 'media'
  24. Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id).reorder('statuses.id desc')
  25. else
  26. raise "Unknown filter: #{key}"
  27. end
  28. end
  29. end