Class: WorkItems::SortingKeys

Inherits:
Object
  • Object
show all
Extended by:
Gitlab::Utils::StrongMemoize
Defined in:
app/models/work_items/sorting_keys.rb

Constant Summary collapse

DEFAULT_SORTING_KEYS =
{
  closed_at_asc: {
    description: 'Closed time by ascending order.',
    experiment: { milestone: '17.10' }
  },
  closed_at_desc: {
    description: 'Closed time by descending order.',
    experiment: { milestone: '17.10' }
  },
  escalation_status_asc: {
    description: 'Status from triggered to resolved.',
    experiment: { milestone: '17.10' }
  },
  escalation_status_desc: {
    description: 'Status from resolved to triggered.',
    experiment: { milestone: '17.10' }
  },
  popularity_asc: {
    description: 'Number of upvotes (awarded "thumbs up" emoji) by ascending order.',
    experiment: { milestone: '17.10' }
  },
  popularity_desc: {
    description: 'Number of upvotes (awarded "thumbs up" emoji) by descending order.',
    experiment: { milestone: '17.10' }
  },
  priority_asc: {
    description: 'Priority by ascending order.',
    experiment: { milestone: '17.10' }
  },
  priority_desc: {
    description: 'Priority by descending order.',
    experiment: { milestone: '17.10' }
  },
  relative_position_asc: {
    description: 'Relative position by ascending order.',
    experiment: { milestone: '17.10' }
  },
  severity_asc: {
    description: 'Severity from less critical to more critical.',
    experiment: { milestone: '17.10' }
  },
  severity_desc: {
    description: 'Severity from more critical to less critical.',
    experiment: { milestone: '17.10' }
  },
  updated_desc: {
    description: 'Updated at descending order.'
  },
  updated_asc: {
    description: 'Updated at ascending order.'
  },
  created_desc: {
    description: 'Created at descending order.'
  },
  created_asc: {
    description: 'Created at ascending order.'
  },
  title_asc: {
    description: 'Title by ascending order.'
  },
  title_desc: {
    description: 'Title by descending order.'
  }
}.freeze

Class Method Summary collapse

Class Method Details

.allObject



73
74
75
# File 'app/models/work_items/sorting_keys.rb', line 73

def all
  DEFAULT_SORTING_KEYS.merge(widgets_sorting_keys)
end

.available?(key, widget_list: []) ⇒ Boolean

Returns:

  • (Boolean)


84
85
86
87
88
89
90
# File 'app/models/work_items/sorting_keys.rb', line 84

def available?(key, widget_list: [])
  key = key.to_sym
  widget_list = Array.wrap(widget_list)

  DEFAULT_SORTING_KEYS.key?(key) ||
    widget_list.any? { |widget| widget.sorting_keys.key?(key) }
end

.widgets_sorting_keysObject



77
78
79
80
81
# File 'app/models/work_items/sorting_keys.rb', line 77

def widgets_sorting_keys
  ::WorkItems::WidgetDefinition.widget_classes
    .map(&:sorting_keys)
    .reduce({}, :merge)
end