class SlackInvitation::Invitator

Attributes

admin_email[W]
admin_password[W]
team[W]

Public Class Methods

new() click to toggle source
# File lib/slack_invitation/invitator.rb, line 11
def initialize
  @driver = nil
  @headless = nil
end

Public Instance Methods

config(team, email, password) click to toggle source
# File lib/slack_invitation/invitator.rb, line 41
def config(team, email, password)
  @team = team
  @admin_email = email
  @admin_password = password
end
headless_destroy() click to toggle source
# File lib/slack_invitation/invitator.rb, line 31
def headless_destroy
  @headless.destroy
end
headless_start() click to toggle source
# File lib/slack_invitation/invitator.rb, line 26
def headless_start
  @headless = Headless.new
  @headless.start
end
invite(email) click to toggle source
# File lib/slack_invitation/invitator.rb, line 35
def invite(email)
  login
  send_invitation_mail(email)
  test_success
end
quit() click to toggle source
# File lib/slack_invitation/invitator.rb, line 22
def quit
  @driver.quit
end
start() click to toggle source
# File lib/slack_invitation/invitator.rb, line 16
def start
  @driver = Selenium::WebDriver.for :firefox
  target_size = Selenium::WebDriver::Dimension.new(1024, 768)
  @driver.manage.window.size = target_size      
end

Private Instance Methods

invitation_url() click to toggle source
# File lib/slack_invitation/invitator.rb, line 86
def invitation_url
  "https://#{ @team }.slack.com/admin/invites/full"      
end
login() click to toggle source
# File lib/slack_invitation/invitator.rb, line 49
def login
  @driver.navigate.to slack_url
  @driver.find_element(:id, 'email').send_keys(@admin_email)
  @driver.find_element(:id, 'password').send_keys(@admin_password)
  @driver.find_element(:id, 'signin_btn').click
  true
rescue Selenium::WebDriver::Error::NoSuchElementError
  false
end
send_invitation_mail(email) click to toggle source
# File lib/slack_invitation/invitator.rb, line 59
def send_invitation_mail(email)
  return false if email !~ /@/
  
  tries ||= 0
  @driver.navigate.to invitation_url
  wait tries
  @driver.find_element(:class, 'email_field').send_keys(email)
  @driver.find_element(:class, 'api_send_invites').click
  wait tries
rescue Selenium::WebDriver::Error::NoSuchElementError
  wait tries
  retry unless (tries += 1) == 5
  return false
end
slack_url() click to toggle source
# File lib/slack_invitation/invitator.rb, line 82
def slack_url
  "http://#{ @team }.slack.com/"
end
test_success() click to toggle source
# File lib/slack_invitation/invitator.rb, line 74
def test_success
  error = @driver.find_element(:class, 'error_msg').displayed?
  success = @driver.find_element(:class, 'seafoam_green').displayed?

  return true if success
  return false if error
end
wait(try = nil) click to toggle source
# File lib/slack_invitation/invitator.rb, line 90
def wait(try = nil)
  sleep(3) unless try
  sleep(0.5 + try*1) if try
end