diff options
author | Claire <claire.github-309c@sitedethib.com> | 2021-11-26 01:12:09 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-26 01:12:09 +0100 |
commit | b4f785c1f46693c4e42b035e6728f99aac1b85db (patch) | |
tree | e904eeb81cc2a1cd99dc11d8fbe0ed0e9d766d59 /app/models/preview_card_filter.rb | |
parent | 8c2fe2a846dd14914f7faa4bf71be21058249a93 (diff) | |
parent | 5f10e64330635bfd609ba5acdd78fa505c12f5b1 (diff) |
Merge pull request #1636 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/models/preview_card_filter.rb')
-rw-r--r-- | app/models/preview_card_filter.rb | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/app/models/preview_card_filter.rb b/app/models/preview_card_filter.rb new file mode 100644 index 000000000..8dda9989c --- /dev/null +++ b/app/models/preview_card_filter.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +class PreviewCardFilter + KEYS = %i( + trending + ).freeze + + attr_reader :params + + def initialize(params) + @params = params + end + + def results + scope = PreviewCard.unscoped + + params.each do |key, value| + next if key.to_s == 'page' + + scope.merge!(scope_for(key, value.to_s.strip)) if value.present? + end + + scope + end + + private + + def scope_for(key, value) + case key.to_s + when 'trending' + trending_scope(value) + else + raise "Unknown filter: #{key}" + end + end + + def trending_scope(value) + ids = begin + case value.to_s + when 'allowed' + Trends.links.currently_trending_ids(true, -1) + else + Trends.links.currently_trending_ids(false, -1) + end + end + + if ids.empty? + PreviewCard.none + else + PreviewCard.joins("join unnest(array[#{ids.map(&:to_i).join(',')}]::integer[]) with ordinality as x (id, ordering) on preview_cards.id = x.id").order('x.ordering') + end + end +end |