Sha256: c8298f632b7c975d18c4b83e21ed3595bbdec36ee7eac7050ade2be976b285bf
Contents?: true
Size: 740 Bytes
Versions: 100
Compression:
Stored size: 740 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 << Arel.sql("WHEN '#{item}' THEN #{index}") end Arel.sql("CASE #{column} #{clauses.join(' ')} END") end end end
Version data entries
100 entries across 100 versions & 1 rubygems