Skip to content

Instantly share code, notes, and snippets.

@irsl
Created December 31, 2023 08:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save irsl/ecb1031602d08f195256fc9d504d29b9 to your computer and use it in GitHub Desktop.
Save irsl/ecb1031602d08f195256fc9d504d29b9 to your computer and use it in GitHub Desktop.
sig { params(incl_filters: T::Array[String], excl_filters: T::Array[String], table: T.nilable(String)).void }
...
sig { override.returns(T.nilable(String)) }
memoize def query_clause
incl_slugs, excl_slugs = resolve_filters
return "1=0" if !incl_slugs.nil? && incl_slugs.empty?
predicates = []
predicates << "#{@col} IN (#{incl_slugs.map { |f| "'#{f}'" }.join(', ')})" unless incl_slugs.nil?
predicates << "#{@col} NOT IN (#{excl_slugs.map { |f| "'#{f}'" }.join(', ')})" unless excl_slugs.nil?
predicates.join(" AND ") unless predicates.empty?
end
private
sig { returns([T.nilable(T::Array[String]), T.nilable(T::Array[String])]) }
def resolve_filters
incl_slugs = (@incl_filters - @excl_filters) unless @incl_filters.empty?
excl_slugs = @excl_filters unless @excl_filters.empty? || @incl_filters.present?
[incl_slugs, excl_slugs]
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment