bin/slack
#!/usr/bin/env ruby
require 'gli'
require 'slack_ruby_client'
module Slack
module Cli
class App
extend GLI::App
program_desc 'Slack client.'
default_command :help
switch %i[d debug], desc: 'Enable debug-level logging.', default_value: false
flag [:t, 'slack-api-token'], desc: 'Slack API token.', default_value: ENV['SLACK_API_TOKEN']
flag ['vcr-cassette-name'], desc: 'Offline VCR cassette.'
commands_from File.expand_path('commands', __dir__)
pre do |global_options, _command, options, _args|
# global Slack configuration
Slack.config.token = global_options['slack-api-token']
help_now! 'Set Slack API token via --slack-api-token or SLACK_API_TOKEN.' unless Slack.config.token && !Slack.config.token.empty?
if global_options['debug']
require 'logger'
logger = Logger.new(STDOUT)
logger.level = Logger::DEBUG
Slack::Web::Client.config.logger = logger
end
@client = Slack::Web::Client.new
# Offline VCR cassette
if global_options['vcr-cassette-name']
require 'webmock'
WebMock.enable!
require 'vcr'
VCR.configure do |config|
config.cassette_library_dir = 'spec/fixtures/slack'
config.hook_into :webmock
config.default_cassette_options = { record: :new_episodes }
end
VCR.insert_cassette global_options['vcr-cassette-name']
end
# remove any nil values from options
options.compact!
true
end
end
end
end
exit Slack::Cli::App.run(ARGV)