Sha256: c480d8c4225d53d788739860a76ce278052e11471e0d2bb909684f8c2a290ecb
Contents?: true
Size: 717 Bytes
Versions: 10
Compression:
Stored size: 717 Bytes
Contents
# frozen_string_literal: true 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
10 entries across 10 versions & 1 rubygems