class MeetupGenerator

Everything needed for a meetup generator

Attributes

lib[R]
words[R]

Public Class Methods

new() click to toggle source
# File lib/meetup_generator.rb, line 14
def initialize
  @words = Zlib::GzipReader.open(LIB + 'words.gz').readlines.map(&:strip)
  @lib   = YAML.safe_load(IO.read(LIB + 'all_the_things.yaml'),
                          symbolize_names: true)
end

Public Instance Methods

agenda(num = 5) click to toggle source

@param num [Integer] how many talks you want @return [Hash] full meetup agenda

# File lib/meetup_generator.rb, line 23
def agenda(num = 5)
  { talks: lib[:template].sample(num).map { |t| talk(t) },
    refreshment: refreshment,
    location: location,
    date: date }
end
company() click to toggle source
# File lib/meetup_generator.rb, line 67
def company
  format('%<word>s.io', word: words.sample.sub(/([^aeiou])er$/, '\\1r'))
end
date() click to toggle source
# File lib/meetup_generator.rb, line 43
def date
  (Date.today + 1).strftime('%d/%m/%Y')
end
location() click to toggle source
# File lib/meetup_generator.rb, line 39
def location
  'Shoreditch, probably'
end
pair(list1, list2) click to toggle source
# File lib/meetup_generator.rb, line 75
def pair(list1, list2)
  [lib[list1].sample, lib[list2].sample].join(' ')
end
random_template(number = 1) click to toggle source
# File lib/meetup_generator.rb, line 51
def random_template(number = 1)
  lib[:template].sample(number).first
end
refreshment() click to toggle source
# File lib/meetup_generator.rb, line 63
def refreshment
  pair(:food_style, :food)
end
replace_number(template) click to toggle source
# File lib/meetup_generator.rb, line 99
def replace_number(template)
  return template unless template =~ /%RAND\d+%/

  replace_number(template.sub(/%RAND(\d+)%/) do
    rand(2..Regexp.last_match(1).to_i).to_s
  end)
end
replace_ops(template) click to toggle source
# File lib/meetup_generator.rb, line 93
def replace_ops(template)
  return template unless template.include?('%FNOPS%')

  replace_ops(template.sub('%FNOPS%', something_ops))
end
replace_things(template) click to toggle source
# File lib/meetup_generator.rb, line 79
def replace_things(template)
  return template unless template =~ /%[a-z_]+%/

  replace_things(template.sub(/%([a-z_]+)%/) do
    lib[Regexp.last_match(1).to_sym].sample
  end)
end
replace_word(template) click to toggle source
# File lib/meetup_generator.rb, line 87
def replace_word(template)
  return template unless template.include?('%WORD%')

  replace_word(template.sub('%WORD%', words.sample.capitalize))
end
role() click to toggle source
# File lib/meetup_generator.rb, line 59
def role
  pair(:job_role, :job_title)
end
something_ops() click to toggle source
# File lib/meetup_generator.rb, line 71
def something_ops
  (lib[:something_ops] * 4).sample(rand(2..4)).join + 'Ops'
end
talk(template = random_template) click to toggle source

@param templates [Array] array of templates

# File lib/meetup_generator.rb, line 32
def talk(template = random_template)
  { title: title(template),
    talker: talker,
    role: role,
    company: company }
end
talker() click to toggle source
# File lib/meetup_generator.rb, line 55
def talker
  pair(:first_name, :last_name)
end
title(template = random_template) click to toggle source
# File lib/meetup_generator.rb, line 47
def title(template = random_template)
  replace_word(replace_number(replace_ops(replace_things(template))))
end