class Ruboty::NoMoreBocchi::Actions::NoMoreBocchi

Public Instance Methods

call() click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 6
def call
  groups, bocchi_candidates = grouping_member(people,[])
  groups.reduce(bocchi_candidates) do |candidates, group|
    choice = candidates.sample
    group.push choice unless choice.nil?
    candidates - [choice]
  end
  message.reply(result_message(groups))
end

Private Instance Methods

assign_member() click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 45
def assign_member
  (people.length / necessary_group_count)
end
group_names() click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 57
def group_names
  ("A".."Z")
end
grouping_member(remaining_member, groups) click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 18
def grouping_member(remaining_member, groups)
  new_group = remaining_member.sample(assign_member)
  groups.push(new_group)
  if groups.length < necessary_group_count
    grouping_member(remaining_member - new_group, groups)
  else
    return groups, remaining_member - new_group
  end
end
necessary_group_count() click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 53
def necessary_group_count
  message[:group_count].to_i || 2
end
people() click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 49
def people
  message[:people].split(/,/)
end
result_message(groups) click to toggle source
# File lib/ruboty/no_more_bocchi/actions/no_more_bocchi.rb, line 28
        def result_message(groups)
          result_messages = []
          groups.zip(group_names.first(groups.length)).map do |group_name_and_member|
            members = group_name_and_member.first
            group_name = group_name_and_member.last
            result_messages.push <<-"MES"
#{group_name}チーム
#{members.map { |member| "  * #{member}" }.join("\n") }
            MES
          end

          <<-"EOS"
以下のようなチーム分けになりました。
#{result_messages.join("\n")}
          EOS
        end