Sha256: bef205c6a14575bdf4b43b78297f955782aef21f2eca41a3ec46519787492ce0

Contents?: true

Size: 1.39 KB

Versions: 19

Compression:

Stored size: 1.39 KB

Contents

require 'httparty'

class SlackInviteWorker
  include Sidekiq::Worker

  def perform(questionnaire_id)
    questionnaire = Questionnaire.find(questionnaire_id)
    email = questionnaire.email
    first_name = questionnaire.first_name
    last_name = questionnaire.last_name
    json = query_api('users.admin.invite', "&email=#{email}&first_name=#{first_name}&last_name=#{last_name}&set_active=true")

    return if json[:ok]

    if json[:error]
      return if ok_errors.include?(json[:error])
      return attempt_manual_invite(questionnaire.id, email) if use_manual_errors.include?(json[:error])
      raise "Slack error: #{json[:error]}"
    end

    raise "Failed to invite to Slack."
  end

  private

  def query_api(method, params = '')
    response = HTTParty.post("https://brickhack3.slack.com/api/#{method}?token=#{ENV['SLACK_API_TOKEN']}#{params}")
    json = JSON.parse(response.body, symbolize_names: true)
    raise "Could not read Slack response" unless json
    json
  end

  def attempt_manual_invite(questionnaire_id, email)
    json = query_api('users.list')
    raise "Slack error: #{json[:error]}" if json[:error]

    return if json[:members].find { |member| member[:profile][:email] == email }

    Mailer.delay.slack_invite_email(questionnaire_id)
  end

  def ok_errors
    ['already_invited', 'already_in_team']
  end

  def use_manual_errors
    ['invalid_email', 'invite_limit_reached']
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
hackathon_manager-0.5.7 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.6 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.5 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.4 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.3 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.2 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.1 app/workers/slack_invite_worker.rb
hackathon_manager-0.5.0 app/workers/slack_invite_worker.rb
hackathon_manager-0.4.4 app/workers/slack_invite_worker.rb
hackathon_manager-0.4.3 app/workers/slack_invite_worker.rb
hackathon_manager-0.4.2 app/workers/slack_invite_worker.rb
hackathon_manager-0.4.1 app/workers/slack_invite_worker.rb
hackathon_manager-0.4.0 app/workers/slack_invite_worker.rb
hackathon_manager-0.3.3 app/workers/slack_invite_worker.rb
hackathon_manager-0.3.2 app/workers/slack_invite_worker.rb
hackathon_manager-0.3.1 app/workers/slack_invite_worker.rb
hackathon_manager-0.3.0 app/workers/slack_invite_worker.rb
hackathon_manager-0.2.0 app/workers/slack_invite_worker.rb
hackathon_manager-0.1.0 app/workers/slack_invite_worker.rb