class Slackup

Constants

Error
RUN_ROOT
SEMAPHORE
VERSION

Attributes

client[R]
config[R]
dirname[R]
name[R]

Public Class Methods

backup(team_config = team_config()) click to toggle source
# File lib/slackup.rb, line 46
def self.backup(team_config = team_config())
  team_config.each do |config|
    fork do
      new(config).execute
    end
  end
  p Process.waitall
end
configure_client(token) click to toggle source
# File lib/slackup.rb, line 35
def self.configure_client(token)
  client = nil
  SEMAPHORE.synchronize do
    Slack.configure do |config|
      config.token = token
    end
    client = Slack.client
  end
  client
end
new(config, client=nil) click to toggle source
# File lib/slackup.rb, line 57
def initialize(config, client=nil)
  @config = config
  @name = config.fetch("nickname") { config.fetch("name") }
  @client = client || configure_client
  FileUtils.mkdir_p(name)
end
run_root() click to toggle source
# File lib/slackup.rb, line 17
def self.run_root
  RUN_ROOT
end
team_config() click to toggle source
# File lib/slackup.rb, line 27
def self.team_config
  if team_config_file.readable?
    YAML.load(team_config_file.read)
  else
    fail Error, "No team config file found. See README for instructions."
  end
end
team_config_file() click to toggle source
# File lib/slackup.rb, line 23
def self.team_config_file
  Pathname.glob(run_root.join("slack_teams.{json,yml,yaml}")).first
end

Public Instance Methods

configure_client() click to toggle source
# File lib/slackup.rb, line 78
def configure_client
  token = config.fetch("token")
  self.class.configure_client(token)
end
execute() click to toggle source
# File lib/slackup.rb, line 64
def execute
  authorize! && write!
end
write!() click to toggle source
# File lib/slackup.rb, line 68
def write!
  Dir.chdir(dirname) do
    Channels.new(config, client).write!
    Groups.new(config, client).write!
    Stars.new(config, client).write!
    user_client.write!
    Ims.new(config, client).write!
  end
end

Private Instance Methods

authorize!() click to toggle source
# File lib/slackup.rb, line 89
def authorize!
  auth_test = client.auth_test
  if auth_test["ok"] === true
    p [name]
    true
  else
    p [name, auth_test]
    false
  end
end
backup_filename(name) click to toggle source
# File lib/slackup.rb, line 147
def backup_filename(name)
  "#{name}.yml"
end
format_messages(messages) click to toggle source
# File lib/slackup.rb, line 112
def format_messages(messages)
  if messages.nil?
    $stderr.puts "Messages nil #{caller[0..1]}"
    return []
  end
  messages.reverse.map { |msg|
    if msg.has_key?("text") && msg.has_key?("user")
      msg["user"] = user_name(msg["user"])
      msg["text"].gsub!(/<@(?<userid>U[A-Z0-9]+)>/) {
        userid = $~[:userid] # MatchData
        "<@#{user_name(userid)}>"
      }
      msg
    else
      nil
    end
  }.compact
end
serialize(obj) click to toggle source
# File lib/slackup.rb, line 143
def serialize(obj)
  obj.to_yaml
end
user_client() click to toggle source
# File lib/slackup.rb, line 131
def user_client
  @user_client ||= Users.new(config, client)
end
user_name(user_id) click to toggle source
# File lib/slackup.rb, line 139
def user_name(user_id)
  user_client.user_name(user_id)
end
users() click to toggle source
# File lib/slackup.rb, line 135
def users
  user_client.users
end
with_messages(name, query_result) { |query_result| ... } click to toggle source

{“ok”=>false, “error”=>“ratelimited”} {“ok”=>false, “error”=>“token_revoked”

# File lib/slackup.rb, line 102
def with_messages(name, query_result)
  if query_result["ok"]
    yield query_result["messages"]
  else
    error = query_result["error"]
    $stderr.puts "#{name}, error: #{error}"
    exit 1 if error =~ /ratelimited/
  end
end