* Nascent tag menu on frontend * Hook up frontend to search * Tag intersection backend first pass * Update yarnlock * WIP * Fix for tags not searching correctly * Make radio buttons function * Simplify radio buttons with modeOption * Better naming * Rearrange options * Add all/any/none functionality on backend * Small PR cleanup * Move to service from scope * Small cleanup, add proper service tests * Don't use send with user input :D * Set appropriate column header * Handle auto updating timeline * Fix up toggle function * Use tag value correctly * A bit more correct to use 'self' rather than 'all' in status scope * Fix some style issues * Fix more code style issues * Style select dropdown more better * Only use to_id'ed value to ensure no SQL injection * Revamp frontend to allow for multiple selects * Update backend / col header to account for more flexible tagging * Update brakeman ignore * Codeclimate suggestions * Fix presenter tag_url * Implement initial PR feedback * Handle additional tag streaming * CodeClimate tweak
21 lines
600 B
Ruby
21 lines
600 B
Ruby
# frozen_string_literal: true
|
|
|
|
class HashtagQueryService < BaseService
|
|
def call(tag, params, account = nil, local = false)
|
|
any = tags_for(params[:any])
|
|
all = tags_for(params[:all])
|
|
none = tags_for(params[:none])
|
|
|
|
@query = Status.as_tag_timeline(tag, account, local)
|
|
.tagged_with_all(all)
|
|
.tagged_with_none(none)
|
|
@query = @query.distinct.or(self.class.new.call(any, params.except(:any), account, local).distinct) if any
|
|
@query
|
|
end
|
|
|
|
private
|
|
|
|
def tags_for(tags)
|
|
Tag.where(name: tags.map(&:downcase)) if tags.presence
|
|
end
|
|
end
|