class SlackNeuralyzer::ArgsParser

Attributes

after[RW]
before[RW]
bot[RW]
channel[RW]
direct[RW]
execute[RW]
file[RW]
group[RW]
log[RW]
message[RW]
mpdirect[RW]
rate[RW]
regex[RW]
show[RW]
token[RW]
user[RW]

Public Class Methods

new(args) click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 7
def initialize(args)
  @args = args
  init_arg_groups
  parse_args
  validates_mutex_args
  validates_required_args
end

Public Instance Methods

init_arg_groups() click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 15
def init_arg_groups
  @arg_groups = {
    'required': [
      [:token],
      [:message, :file],
      [:channel, :direct, :group, :mpdirect],
      [:user, :bot]
    ],
    'mutex': [
      [:message, :file],
      [:channel, :direct, :group, :mpdirect],
      [:file, :bot],
      [:file, :regex]
    ]
  }
end
rate_limit() click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 32
def rate_limit
  rate || 0.05
end

Private Instance Methods

double_dash(arrays) click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 94
def double_dash(arrays)
  arrays.map{ |array| array.to_s.prepend('--') }
end
parse_args() click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 38
def parse_args
  opts = OptionParser.new
  opts.banner = usage_msg
  opts.separator ''
  opts.separator 'options:'
  opts.on('-t', '--token TOKEN', 'Slack API token (https://api.slack.com/web)') { |token| self.token = token }
  opts.on('-s', '--show', 'Show all users, channels, groups and multiparty direct names') { self.show = true }

  opts.on('-m', '--message', 'Specifies that the delete object is messages') { self.message = true }
  opts.on('-f', '--file TYPE', "Specifies that the delete object is files of a certain type (Type: all, spaces, snippets, images, gdocs, docs, zips, pdfs)") { |file| self.file = file }

  opts.on('-C', '--channel CHANNEL', 'Public channel name (e.g., general, random)') { |channel| self.channel = channel }
  opts.on('-D', '--direct DIRECT', 'Direct messages channel name (e.g., leon)') { |direct| self.direct = direct }
  opts.on('-G', '--group GROUP', 'Private groups channel name') { |group| self.group = group }
  opts.on('-M', '--mpdirect MPDIRECT', 'Multiparty direct messages channel name (e.g., mpdm-leon--bot-1 [--show option to see name])') { |mpdirect| self.mpdirect = mpdirect }

  opts.on('-u', '--user USER', "Delete messages/files from the specific user (if you want to specific all users, you can type 'all')") { |user| self.user = user }
  opts.on('-b', '--bot BOT', "Delete messages from the specific bot (not bot users, if you want to specific all bots, you can type 'all')") { |bot| self.bot = bot }

  opts.on('-A', '--after DATE', 'Delete messages/files after than this time (YYYYMMDD)') { |after| self.after = after }
  opts.on('-B', '--before DATE', 'Delete messages/files before than this time (YYYYMMDD)') { |before| self.before = before }

  opts.on('-R', '--regex TEXT', 'Delete messages with specified text (regular expression)') { |regex| self.regex = regex }

  opts.on('-e', '--execute', 'Execute the delete task') { self.execute = true }
  opts.on('-l', '--log', 'Generate a log file in the current directory') { self.log = true }
  opts.on('-r', '--rate RATE', Float, 'Delay between API calls in seconds (default:0.1)') { |rate| self.rate = rate }
  opts.on('-v', '--version', 'Show the SlackNeuralyzer version') { puts("slack_neuralyzer #{SlackNeuralyzer::VERSION}"); exit }
  opts.on('-h', '--help', 'Show this message') { puts(opts); exit }
  opts.parse!(@args)
end
usage_msg() click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 70
    def usage_msg
      <<-USAGE.freeze
usage:
    slack_neuralyzer [options]
    See https://github.com/mgleon08/slack_neuralyzer for more information.
      USAGE
    end
validates_mutex_args() click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 86
def validates_mutex_args
  @arg_groups[:mutex].each do |opts|
    return unless self.show.nil?
    filters = opts.select{ |opt| !self.public_send(opt).nil? }
    raise SlackNeuralyzer::Errors::MutuallyExclusiveArgumentsError.new(double_dash(filters).join(', ')) if filters.size > 1
  end
end
validates_required_args() click to toggle source
# File lib/slack_neuralyzer/args_parser.rb, line 78
def validates_required_args
  @arg_groups[:required].each do |opts|
    filters = opts.select{ |opt| !self.public_send(opt).nil? }
    raise SlackNeuralyzer::Errors::RequiredArgumentsError.new(double_dash(opts).join(', ')) if filters.empty?
    return unless self.show.nil?
  end
end