module GroupMixer
Constants
- VERSION
Public Class Methods
by_group_size(people, past_set, group_size, is_separate_reminders = false)
click to toggle source
# File lib/group_mixer.rb, line 9 def self.by_group_size(people, past_set, group_size, is_separate_reminders = false) if group_size.zero? raise ZeroGroupSize, 'group_size must be a number greater than 1' end max_member_size = (people.size.to_f / group_size).ceil rest = people.size % max_member_size groups = make_groups(rest, group_size, max_member_size, is_separate_reminders) Mixer.new(people, past_set, groups, is_separate_reminders).execute end
by_member_size(people, past_set, max_member_size, is_separate_reminders = false)
click to toggle source
# File lib/group_mixer.rb, line 19 def self.by_member_size(people, past_set, max_member_size, is_separate_reminders = false) if max_member_size.to_f < 1 raise ZeroMaxMemberSize, 'max_member_size must be a number greater than 1' end rest = people.size % max_member_size group_size = (people.size.to_f / max_member_size).ceil groups = make_groups(rest, group_size, max_member_size, is_separate_reminders) Mixer.new(people, past_set, groups, is_separate_reminders).execute end
Private Class Methods
make_groups(rest, group_size, max_member_size, is_separate_reminders)
click to toggle source
# File lib/group_mixer.rb, line 72 def self.make_groups(rest, group_size, max_member_size, is_separate_reminders) return Array.new(group_size) { Group.new(max_member_size) } if rest.zero? if is_separate_reminders Array.new(group_size - 1) { Group.new(max_member_size) } + [Group.new(rest)] else min_group_size = max_member_size - rest if group_size - min_group_size < 1 return Array.new(1) { Group.new(rest) } end Array.new(group_size - min_group_size) { Group.new(max_member_size) } + Array.new(min_group_size) { Group.new(max_member_size - 1) } end end
make_groups_by_group_size(people_size, group_size, is_separate_reminders)
click to toggle source
# File lib/group_mixer.rb, line 35 def self.make_groups_by_group_size(people_size, group_size, is_separate_reminders) max_mem = (people_size.to_f / group_size).ceil if is_separate_reminders rest = people_size % max_mem if rest.zero? Array.new(group_size) { max_mem } else Array.new(group_size - 1) { max_mem } + [rest] end else rest = people_size % group_size if rest.zero? Array.new(group_size) { max_mem } else Array.new(rest) { max_mem } + Array.new(group_size - rest) { max_mem - 1 } end end end
make_groups_by_member_size(people_size, member_size, is_separate_reminders)
click to toggle source
# File lib/group_mixer.rb, line 54 def self.make_groups_by_member_size(people_size, member_size, is_separate_reminders) group_size = (people_size.to_f / member_size).ceil if is_separate_reminders rest = people_size % member_size return Array.new(group_size) { member_size } if rest.zero? Array.new(group_size - 1) { member_size } + [rest] else rest = people_size % group_size if rest.zero? msize = (people_size < group_size * member_size) ? member_size - 1 : member_size Array.new(group_size) { msize } else Array.new(rest) { member_size } + Array.new(group_size - rest) { member_size - 1 } end end end
make_groups_hoge(group_size_set)
click to toggle source
# File lib/group_mixer.rb, line 31 def self.make_groups_hoge(group_size_set) group_size_set.map { |s| Group.new(s) } end