Module: LcpRuby::Sort::EnumSortOrder
- Defined in:
- lib/lcp_ruby/sort/enum_sort_order.rb
Constant Summary collapse
- VALID_STRATEGIES =
%w[definition_order value].freeze
Class Method Summary collapse
- .case_when_sql(field_def, table_name, conn) ⇒ Object
- .enum_field_for(field_name, model_def) ⇒ Object
- .resolve_strategy(sort_field, presenter, model_def) ⇒ Object
Class Method Details
.case_when_sql(field_def, table_name, conn) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/lcp_ruby/sort/enum_sort_order.rb', line 7 def case_when_sql(field_def, table_name, conn) return nil unless field_def&.enum? values = field_def.enum_value_names return nil if values.empty? col_ref = "#{conn.quote_table_name(table_name)}.#{conn.quote_column_name(field_def.name)}" clauses = values.each_with_index.map do |val, idx| "WHEN #{col_ref} = #{conn.quote(val)} THEN #{idx}" end "CASE #{clauses.join(' ')} ELSE #{values.length} END" end |
.enum_field_for(field_name, model_def) ⇒ Object
21 22 23 24 |
# File 'lib/lcp_ruby/sort/enum_sort_order.rb', line 21 def enum_field_for(field_name, model_def) field_def = model_def.fields.find { |f| f.name == field_name.to_s } field_def&.enum? ? field_def : nil end |
.resolve_strategy(sort_field, presenter, model_def) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/lcp_ruby/sort/enum_sort_order.rb', line 26 def resolve_strategy(sort_field, presenter, model_def) col_config = presenter.table_columns.find { |c| c["field"] == sort_field.to_s } explicit = col_config&.dig("sort_strategy") return explicit if explicit && VALID_STRATEGIES.include?(explicit.to_s) source_field = col_config&.dig("group_field") || sort_field.to_s enum_field = enum_field_for(source_field, model_def) enum_field ? "definition_order" : "value" end |