Sha256: b97427a26e7927550c4b8203bd6754c0684e33cd8bf90a7e0b11f24380ade623
Contents?: true
Size: 720 Bytes
Versions: 4
Compression:
Stored size: 720 Bytes
Contents
# frozen_string_literal: true require "attr_extras" module SQL # Example: # # indexed_case_stmt(:code, "DT", "AC", "XY") # # Will return the string: # # CASE code # WHEN 'DT' THEN 1 # WHEN 'AC' THEN 2 # END # # Used for creating an explicit sort order in conjunction with a find: # # Description.where(code: codes).order(indexed_case_stmt(:code, codes)) # class IndexedCaseStmt pattr_initialize :column, :items def generate return if items.blank? clauses = [] Array(items).each_with_index do |item, index| clauses << "WHEN '#{item}' THEN #{index}" end "CASE #{column} #{clauses.join(' ')} END" end end end
Version data entries
4 entries across 4 versions & 1 rubygems