25 lines
474 B
Ruby
25 lines
474 B
Ruby
|
|
class CustomRankOrder
|
||
|
|
def initialize(attribute, ordered_values)
|
||
|
|
@attribute = attribute
|
||
|
|
@ordered_values = ordered_values
|
||
|
|
end
|
||
|
|
|
||
|
|
def sql
|
||
|
|
Arel.sql case_statement
|
||
|
|
end
|
||
|
|
|
||
|
|
private
|
||
|
|
|
||
|
|
attr_accessor :attribute, :ordered_values
|
||
|
|
|
||
|
|
def case_statement
|
||
|
|
["CASE", case_conditions, "END"].join(" ")
|
||
|
|
end
|
||
|
|
|
||
|
|
def case_conditions
|
||
|
|
ordered_values.map.with_index do |release, index|
|
||
|
|
"WHEN #{attribute}='#{release}' THEN '#{index+1}'"
|
||
|
|
end.join(" ")
|
||
|
|
end
|
||
|
|
end
|