class Flip
Constants
- DEFAULT_COUNT
- MAX_COUNT
- SIDES
Public Class Methods
Source
# File plugins/flip.rb, line 12 def self.command_pattern /flip(?: (\d+))?$/i end
Source
# File plugins/flip.rb, line 49 def self.flip(count_str = nil, rand: -> { Random.rand(2) }) parsed = parse_count(count_str) return parsed[:error] if parsed[:error] results = flip_coins(parsed[:count], rand: rand) format_results(results) end
Source
# File plugins/flip.rb, line 33 def self.flip_coin(rand: -> { Random.rand(2) }) SIDES[rand.call] end
Source
# File plugins/flip.rb, line 37 def self.flip_coins(count, rand: -> { Random.rand(2) }) Array.new(count) { flip_coin(rand: rand) } end
Source
# File plugins/flip.rb, line 41 def self.format_results(results) return results.first if results.length == 1 heads = results.count("heads") tails = results.length - heads "#{results.join(', ')} (#{heads} heads, #{tails} tails)" end
Source
# File plugins/flip.rb, line 26 def self.parse_count(count_str) count = count_str.nil? ? DEFAULT_COUNT : count_str.to_i return { error: usage_message } if count < 1 || count > MAX_COUNT { count: count } end
Source
# File plugins/flip.rb, line 22 def self.usage_message "Usage: !flip [count] — e.g. !flip, !flip 5" end
Public Instance Methods
Source
# File plugins/flip.rb, line 61 def execute(m, count_str = nil) flood_safe_reply(m, flip(count_str)) end
Source
# File plugins/flip.rb, line 57 def flip(count_str = nil, **options) self.class.flip(count_str, **options) end