class ProgrammeGrouper
Constants
- GROUPS
Public Class Methods
Source
# File app/lib/programme_grouper.rb, line 12 def self.call(...) = new(...).call private_class_method :new private attr_reader :objects GROUPS = { "flu" => :flu, "hpv" => :hpv, "menacwy" => :doubles, "mmr" => :mmr, "td_ipv" => :doubles }.freeze def group(object) key = type(object) if (value = GROUPS[key]) value else raise UnsupportedProgrammeType, key end end def sorted(objects) = objects.sort_by { type(it) } def type(object) = object.try(:programme_type) || programme(object).type def programme(object) = object.try(:programme)
Source
# File app/lib/programme_grouper.rb, line 4 def initialize(objects) @objects = objects end
Public Instance Methods
Source
# File app/lib/programme_grouper.rb, line 8 def call objects.group_by { group(it) }.transform_values { sorted(it) }.to_h end
Source
# File app/lib/programme_grouper.rb, line 28 def group(object) key = type(object) if (value = GROUPS[key]) value else raise UnsupportedProgrammeType, key end end
Source
# File app/lib/programme_grouper.rb, line 41 def programme(object) = object.try(:programme) || object end
Source
# File app/lib/programme_grouper.rb, line 37 def sorted(objects) = objects.sort_by { type(it) } def type(object) = object.try(:programme_type) || programme(object).type def programme(object) = object.try(:programme) ||
Source
# File app/lib/programme_grouper.rb, line 39 def type(object) = object.try(:programme_type) || programme(object).type def programme(object) = object.try(:programme) || object